表格基本应用

SpreadJS 表格功能提供了一种简单的方式来管理和分析数据。通过表格,你可以将数据组织成结构化的形式,支持自动生成表头、设置表格样式、添加汇总行等功能,让数据呈现更加清晰易读。

概述 本 Demo 展示了如何使用 SpreadJS 的表格功能,从数据源创建表格并设置表格属性。Demo 中创建了一个课程成绩表,包含表头、数据和汇总页脚,展示了表格的基本用法。 实现思路 准备数据源(包含课程信息的对象数组) 使用 addFromDataSource 方法从数据源创建表格,并指定表格主题样式 设置表格显示选项:显示表头、显示页脚、高亮首列 为学分和成绩列设置汇总公式(使用 SUBTOTAL 函数) 在页脚第一列设置"总计"文本 设置各列宽度以适应内容 使用 suspendPaint 和 resumePaint 优化性能 代码解析 从数据源创建表格 这段代码定义了课程数据数组,使用 addFromDataSource 方法创建表格。方法参数依次为:表格名称、起始行、起始列、数据源、表格主题。SpreadJS 会自动根据数据源的字段名生成表头。 设置表格属性 这些方法控制表格的显示样式: showFooter(true) 显示页脚行 showHeader(true) 显示表头行 highlightFirstColumn(true) 高亮显示第一列 highlightLastColumn(false) 不高亮显示最后一列 设置汇总公式和页脚值 setColumnFormula 方法为指定列的页脚设置公式。这里使用 SUBTOTAL 函数计算学分和成绩的总和。参数 109 表示求和(忽略隐藏值)。使用结构化引用 [学分] 和 [成绩] 引用表格列。setColumnValue 方法设置页脚单元格的文本值。 性能优化 在进行大量操作时,使用 suspendPaint 暂停绘制,完成所有设置后调用 resumePaint 一次性渲染,可以显著提升性能。 运行效果 表格自动从数据源生成,包含课程、学期、学分、成绩、教师五列 表头自动显示字段名称 第一列(课程)以高亮样式显示 页脚行显示"总计",并在学分和成绩列显示汇总结果 各列宽度已调整以适应内容 API 参考 addFromDataSource 方法 name:表格名称 row、column:表格起始位置 dataSource:数据源,可以是对象数组或数据管理器表 style:可选,表格主题样式 options:可选,扩展选项 showFooter 方法 value:布尔值,是否显示页脚 isFooterInserted:可选,是否自动插入页脚行 setColumnFormula 方法 tableColumnIndex:表格列索引(从 0 开始) formula:页脚公式,支持结构化引用(如 [列名]) setColumnValue 方法 tableColumnIndex:表格列索引 value:页脚单元格的值
window.onload = function () { var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss")); initSpread(spread); }; function initSpread(spread) { var spreadNS = GC.Spread.Sheets; var sheet = spread.getSheet(0); var source = [ { 课程: "微积分", 学期: 1, 学分: 5, 成绩: 80, 教师: "南希·费哈费尔" }, { 课程: "体育", 学期: 1, 学分: 3.5, 成绩: 85, 教师: "安德鲁·森奇尼" }, { 课程: "政治经济学", 学期: 1, 学分: 3.5, 成绩: 95, 教师: "扬·科塔斯" }, { 课程: "计算机基础", 学期: 1, 学分: 2, 成绩: 85, 教师: "史蒂文·索普" }, { 课程: "微观经济学", 学期: 1, 学分: 4, 成绩: 62, 教师: "扬·科塔斯" }, { 课程: "线性代数", 学期: 2, 学分: 5, 成绩: 73, 教师: "南希·费哈费尔" }, { 课程: "会计学", 学期: 2, 学分: 3.5, 成绩: 86, 教师: "南希·费哈费尔" }, { 课程: "统计学", 学期: 2, 学分: 5, 成绩: 85, 教师: "罗伯特·扎雷" }, { 课程: "市场营销学", 学期: 2, 学分: 4, 成绩: 70, 教师: "劳拉·朱萨尼" } ]; spread.suspendPaint(); var table = sheet.tables.addFromDataSource("Table1", 2, 1, source, spreadNS.Tables.TableThemes.medium7); table.showFooter(true); table.showHeader(true); table.highlightFirstColumn(true); table.highlightLastColumn(false); table.setColumnFormula(2, "=SUBTOTAL(109,[学分])"); table.setColumnFormula(3, "=SUBTOTAL(109,[成绩])"); table.setColumnValue(0, "总计"); sheet.setColumnWidth(0, 20); sheet.setColumnWidth(1, 130); sheet.setColumnWidth(2, 70); sheet.setColumnWidth(3, 70); sheet.setColumnWidth(4, 70); sheet.setColumnWidth(5, 100); spread.resumePaint(); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta name="spreadjs culture" content="zh-cn" /> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" style="width:100%; height: 100%"></div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }