【SpreadJS V18.2 新特性】Table 与 DataTable 双向转换功能详解
SpreadJS V18.2 引入了一项强大的新功能,允许用户在静态工作表表格(Table)和绑定数据表(DataTable)之间进行无缝转换。这一功能极大地增强了数据绑定应用程序的灵活性,对于需要结构化数据绑定(如实时分析、报表生成)或快照保存(如数据审计、模板复用)的应用场景尤为重要。
Table 与 DataTable 双向转换
SpreadJS 现在支持用户在普通表格(Regular Tables)和数据表(Data Tables)之间进行无缝转换,轻松应对动态数据集成或静态数据管理的各种场景。这一能力通过两种实现方式提供:
- API 驱动方式:使用专门的 convertToDataTable 和 convertFromDataTable 方法进行程序化控制
- 设计器 UI 操作:通过 SpreadJS Designer 的可视化界面执行转换
下面我们将详细介绍这两种方法的操作步骤,同时强调实际用例和技术细节。
将普通表格转换为数据表
通过将现有表格数据集成到数据管理器(Data Manager)生态系统中,您可以充分利用数据管理器提供的高级功能,如直接与控件绑定、复杂筛选、排序、分组和数据源操作,同时仍能在工作表上使用表格的可视化表示。
重要注意事项和规则
将普通表格转换为数据表时,请牢记以下规则:
- 未绑定要求:只有尚未绑定到数据源的普通表格才能使用此功能进行转换
- 数据和公式清除:转换后,原始普通表格数据范围内的所有数据和公式将从工作表单元格中清除,数据和列定义将由数据管理器表格管理
- 数据管理器表格创建:在 spread.dataManager().tables 集合中会创建一个新表格
- 绑定关系:原始工作表表格将重新绑定到这个新创建的数据管理器表格,此时工作表表格作为数据管理器所管理数据的视图
- 命名规则:新的数据管理器表格将尝试使用与原始普通表格相同的名称。如果同名的数据管理器表格已存在,新表格的名称将自动调整,通过添加数字(从1开始,加上相同前缀的最大现有数字)来确保唯一性
使用 API 进行转换
以下代码演示了如何调用 convertToDataTable 方法将普通表格转换为数据表:
// 向工作表添加普通表格
var sheet = spread.getActiveSheet();
sheet.tables.add('table1', 0, 0, 4, 4, GC.Spread.Sheets.Tables.TableThemes.light1);
// 为表格设置值
sheet.setArray(0, 0, [
['Id', 'Name', 'Age', 'Grade'],
[1000, 'Tom', 23, 98],
[1001, 'Bob', 22, 80],
[1002, 'Tony', 23, 99]
]);
let dmTable = spread.dataManager().tables['table1']; // 此时 dmTable 为 undefined
// 将普通表格转换为数据表,创建并绑定数据管理器表格
let table = sheet.tables.convertToDataTable('table1');
// 现在已从 table1 创建了一个数据管理器表格
let bindingTable = table.getBindingSource(); // 普通表格已转换为数据表
dmTable = spread.dataManager().tables['table1']; // dmTable 已创建
// bindingTable === dmTable // 返回 true,表格的 bindingTable 就是数据管理器中的 dmTable
使用设计器进行转换
设计器提供了用户友好的界面来执行转换操作:
- 选择表格:点击您想要转换的普通表格内的任意位置。这将激活功能区中的"表设计"选项卡。在"表设计"选项卡的"表绑定"框中,绑定源为空。
- 访问转换选项:
-
方法一:转到功能区中的"表格设计"选项卡,在"表格绑定"部分,点击"转换为数据表"按钮。
-
方法二:右键点击表格,在弹出的上下文菜单中,将鼠标悬停在"表格"子菜单上,然后选择"转换为数据表"。
- 在弹出的对话框中点击"确定"。
- 转换成功后,您会看到之前为空的绑定源现在显示为"Table2"---这表明原始普通表格已成功转换为数据表。
将数据表转换为普通表格
SpreadJS 提供了一种方法,可以断开工作表表格与其底层数据管理器(DataManager)源的连接。当您转换数据绑定表格时:
- 表格中当前显示的数据和任何列公式将被复制并直接设置到工作表中表格所占据的单元格范围内
- 工作表上的表格实例成为普通表格,不再绑定到数据管理器
- 数据管理器中的原始数据表不会被此转换过程删除或影响,仍可用于其他用途
当您需要从数据源捕获数据快照并在工作表中静态使用,而不需要表格自动从源更新或不需要该特定表格实例与数据管理器连接时,此功能非常有用。
使用 API 进行转换
以下代码演示了如何调用 convertFromDataTable 方法将数据绑定表格转换回普通表格:
var sheet = spread.getActiveSheet();
// 添加数据源
const productsTable = spread.dataManager().addTable("products", {
remote: {
read: {
url: 'https://northwind.vercel.app/api/products'
}
}
});
productsTable.fetch().then(()=>{
// 添加普通表格并通过 addFromDataSource 绑定数据管理器表格
sheet.tables.addFromDataSource("Table1", 0, 0, "products", GC.Spread.Sheets.Tables.TableThemes.medium7);
// 将绑定数据管理器表格的表格转换为普通表格
let table = sheet.tables.convertFromDataTable('Table1');
let bindingTable = table.getBindingSource(); // 此时 bindingTable 为 null,因为数据表已转换回普通表格
});
检索绑定表格的数据源
SpreadJS V18.2 引入了一个新的 API,可通过编程方式从绑定表格中检索基础数据源,简化了数据操作和同步。GC.Spread.Sheets.Tables.Table 对象上的 getBindingSource 方法允许您检索表格所绑定的基础数据源。
获取绑定源
您可以通过暴露表格的绑定源来识别表格是否绑定到数据管理器表格。
使用 API
GC.Spread.Sheets.Tables.Table 对象上的 getBindingSource 方法允许您检索表格所绑定的基础数据源。
注意:如果表格未绑定到任何数据源,getBindingSource 将返回 null。
示例 1:绑定到对象数组
当使用 JavaScript 数组作为数据源创建或绑定表格时,getBindingSource 将返回该数组。
var source = [
{ LastName: "张", FirstName: "三", Title: "销售代表", Phone: "138-1234-5678"},
{ LastName: "李", FirstName: "四", Title: "销售副总裁", Phone: "139-8765-4321"},
{ LastName: "王", FirstName: "五", Title: "销售代表", Phone: "137-2345-6789"},
{ LastName: "赵", FirstName: "六", Title: "销售代表", Phone: "136-3456-7890"},
];
// 假设 'activeSheet' 是当前工作表
const table = activeSheet.tables.addFromDataSource("Table1", 5, 2, source, GC.Spread.Sheets.Tables.TableThemes.dark1);
// 获取绑定源 - 它将是 'source' 数组
const bindingSource = table.getBindingSource();
console.log(bindingSource === source); // 应输出 true
示例 2:绑定到数据管理器表格
当使用数据管理器表格的名称作为数据源创建或绑定表格时,getBindingSource 将返回数据管理器中相应的 GC.Data.Table 对象。
// 假设 'spread' 是 SpreadJS 实例
const productsTable = spread.dataManager().addTable("products", {
remote: {
read: {
url: 'https://northwind.vercel.app/api/products'
}
}
});
productsTable.fetch().then(()=>{
// 方法 1:添加表格并使用 addFromDataSource 绑定到数据管理器表格
const table1 = spread.getActiveSheet().tables.addFromDataSource("Table1", 0, 0, "products", GC.Spread.Sheets.Tables.TableThemes.medium7);
// 获取绑定源 - 它将是 'productsTable' 数据管理器表格
let bindingTable1 = table1.getBindingSource();
console.log(bindingTable1 === productsTable); // 应输出 true
// 方法 2:添加表格,然后使用 bind 方法绑定到数据管理器表格
const table2 = spread.getActiveSheet().tables.add('Table2', 0, 0, 5, 5);
table2.bind(
[], // 可选:指定绑定列,或传递空数组
undefined, // 可选:绑定路径
"products" // 指定数据管理器表格名称
);
// 获取绑定源 - 它也将是 'productsTable' 数据管理器表格
let bindingTable2 = table2.getBindingSource();
console.log(bindingTable2 === productsTable); // 应输出 true
});
总结
SpreadJS V18.2 中引入的 Table 与 DataTable 双向转换功能为数据处理提供了更大的灵活性。无论是需要利用数据管理器的高级功能进行动态数据处理,还是需要将数据快照保存为静态表格进行独立操作,这一功能都能满足您的需求。
通过 API 或可视化设计器,您可以轻松实现两种表格类型之间的转换,并使用新的 getBindingSource 方法方便地管理和同步数据源。这一增强功能进一步扩展了 SpreadJS 在企业级数据应用程序开发中的能力,为用户提供了更流畅、更高效的数据处理体验。
扩展链接

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
亲测 8 款 AI 网页应用构建工具!附结果及选型指南
从全栈代码生成到一键部署,这些 AI 开发工具帮你快速落地项目 V0(由 Vercel 开发)是一款强大的 AI 网页应用构建工具,能将提示词和 Figma 文件转化为 UI 组件、Next.js 应用及原型。它速度快、操作直观,很适合追求"流畅开发节奏"的开发者。 但和多数 AI 编码工具一样,V0 也存在明显局限:定制化难度高、规模扩大后成本飙升,且频繁出现"AI 幻觉"(生成错误代码),仍需手动修正。 随着开发者对"更实用 AI 应用构建工具"的需求增长,一批替代方案应运而生------它们不仅能生成可投入生产环境的代码,还支持全栈开发、移动端适配、GitHub 同步及一键部署。 本文将盘点 8 款与 V0 类似的 AI 网页应用构建工具,帮你实现: 生成可直接上线的前端+后端代码 结合实时预览与 GitHub 同步,加速原型开发 借助内置托管服务,一键启动项目 轻松集成认证、支付、数据库功能,实现项目规模化 无论你是独立开发者、创业公司创始人、产品经理还是设计师,这些工具都能帮你"更快交付产品"。接下来,我们逐一拆解: 过程中,我们会以一个实际的项目需求作为测试用例。 测试用例...
-
下一篇
知乎开源“智能预渲染框架” 几行代码实现鸿蒙应用页面“秒开”
近日,知乎在 Gitee 平台开源了其自研的鸿蒙“智能预渲染框架”,并将该框架的 Har 包上架到 OpenHarmony 三方库中心仓。该框架在鸿蒙平台首创“智能预渲染”技术,旨在破解应用复杂页面加载缓慢,交互延迟等核心痛点,通过智能预测用户浏览目标进行提前渲染,只需几行代码即可显著提升复杂页面的加载性能,实现“页面秒开”的高效体验,为鸿蒙开发者带来开发效率和用户体验的双重飞跃。 随着鸿蒙生态快速发展,应用开发者难免会遇到一些性能问题:复杂页面渲染慢导致用户点击延迟较高,开发者单点优化成本高且难以复用。“智能预渲染框架”提供组件粒度的性能优化方案,具备智能预测、灵活预渲染、组件复用三大核心优势,解决用户体验不佳和优化困难的双重难题。 智能预测:依据用户“触碰位置、滑动速度、组件布局、操作序列、AI眼动追踪(开放接口后)”等多维交互信息,预测用户接下来点击的内容并基于预测动态调整预渲染时机和内容,显著提升预渲染命中率。 灵活预渲染:对复杂组件进行整体预渲染,接口灵活易用,开发者接入成本趋近于零。配备高效的 LRU队列管理及任务打断机制,大幅降低无效预渲染的功耗开销。 组件复用:通过...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL数据库在高并发下的优化方案
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程