SpreadJS 表格控件 - 历史版本
SpreadJS 历史版本
V17.0
SpreadJS v17.0 新版本包含了诸多的新插件及功能增强!
此次新版本中,SpreadJS 的插件家族迎来了一位新的成员:报表插件,基于 SpreadJS 本身强大的表格能力,在 DataManager 数据关系引擎的助力下,全新的报表插件让报表和数据录入用户有了全新的能力和体验,快速完成报表和数据录入功能的搭建,相对之前,能节省大量的开发成本。
同时,针对之前发布的甘特图插件,v17.0 新版本推出了正式版本,在之前的功能上,增加了资源功能。
新插件 / Addon
报表插件 / ReportSheet
各类报表示例
报表设计器
报表性能
测试环境:
- ThinkPad
- Memory: 32G
- CPU: 13th Gen Intel(R) Core(TM) i7-13700H 2.40 GHz
- Chrome: 119.0.6045.160 (Official Build) (64-bit)
计量单位:
- 时长单位:ms / 毫秒
- 内存单位:MB / 兆
基于行的报表
分组报表
交叉统计表
支持使用 Excel 作为报表模板
支持报表设计向导功能
正式版本的甘特图插件 / GanttSheet
甘特图插件允许您创建工作分解、生产计划及计划进度等甘特图类型。
是一个快速、数据绑定的 DataTable 视图,具有甘特图行为和电子表格用户界面。使用甘特图有以下的价值:
- 可视化规划:提供项目任务、时间表和依赖关系的清晰可视化表示,有效地规划和管理项目变得更加容易。
- 任务依赖性:允许定义和可视化任务依赖性,了解不同任务的链接方式以及延迟对整个项目时间表的影响。
- 进度跟踪:通过标记已完成的任务并将其与计划时间表进行比较来跟踪每个任务和整个项目的进度。
- 截止日期管理:能够设置和管理项目里程碑和截止日期,确保项目保持正轨并在指定的时间范围内完成。
在正式版本中,增加了“资源”能力
图表部分增强
新增的瀑布图表
将运行总计显示为添加或减去的值,这些值排列为具有正值和负值的列,并通过颜色编码来区分两者。
初始列和最终列通常与水平轴对齐,而中间值通常是浮动列。
折线图的平滑线格式
SpreadJS 中的折线图现在支持平滑线条的格式。
图表的数据来自多个区域
与 Excel 类似,SpreadJS 现在支持使用多选插入图表。
除了选择连续的数据区域之外,还可以按 Ctrl 键选择多个不连续的区域来创建图表。
也可以通过在每个范围之间放置逗号来在代码中指定多个范围:
sheet.charts.add("chart1", GC.Spread.Sheets.Charts.ChartType.columnClustered, 0, 100, 400, 300, "Sheet1!$A$1:$C$4,Sheet1!$E$3:$G$3,Sheet2!$A$1:$A$3");
新增的棒棒糖迷你图
工作表增强
增强的粘贴选项
SpreadJS 现在支持更多粘贴特殊选项,包括:
- Comments -仅粘贴备注
- Validation - 仅粘贴数据验证
- All using Source theme - 全部使用源主题
- All except borders - 粘贴除边框外的所有单元格内容和格式
- Column Widths - 粘贴复制的一个列或一系列列的宽度
- Formulas and Number Formats - 仅粘贴公式和所有数字格式选项
- Values and Number Formats - 仅粘贴值和所有数字格式选项
扩展自定义表格列样式
当表自动扩展时,自定义表列样式现在可以正确复制。
TopRowChanged/LeftColumnChanged 事件增强
TopRowChanged 和 LeftColumnChanged 事件现在支持像素滚动。在此更改之前,必须滚动整个行或列才能触发事件,但现在,当启用像素滚动时,它将触发并为滚动中的任何更改提供滚动状态。
水平分布对齐
SpreadJS 现在支持文本的分布式水平对齐。
保留 Excel 排序状态
导入 Excel 文件时,SpreadJS 现在会保留排序条件,以免丢失。
透视表增强
样式中字体设置
将字体选项拆分为不同的属性,以更好地支持 Excel 中的数据透视表和表格字体选项。
通常,单元格上的字体属性可用于设置所有字体选项,新版本还提供了 API 来设置单独的字体选项,如 fontFamily、fontSize、fontWeight 和 fontStyle:
// Font
activeSheet.getCell(2, 0).font('italic normal 12px Mangal');
activeSheet.getCell(4, 0).font('normal bold 15px Arial Black');
activeSheet.getCell(6, 0).font('normal normal 18px Georgia');
// FontFamily
activeSheet.getCell(2, 1).fontFamily('Mangal');
activeSheet.getCell(4, 1).fontFamily('Arial Black');
activeSheet.getCell(6, 1).fontFamily('Georgia');
// FontSize
activeSheet.getCell(2, 2).fontSize('12px');
activeSheet.getCell(4, 2).fontSize('20px');
activeSheet.getCell(6, 2).fontSize('28px');
// FontWeight
activeSheet.getCell(2, 3).fontWeight('bold');
activeSheet.getCell(4, 3).fontWeight('normal');
// Italic
activeSheet.getCell(2, 4).fontStyle('italic');
activeSheet.getCell(4, 4).fontStyle('normal');
区域偏移支持
let style = new GC.Spread.Sheets.Style();
style.backColor = "rgb(247, 167, 17)";
let labelPivotAreaWithOffset = {
labelOnly: true,
references: [{
fieldName: "Salesperson",
items: ["Alan"]
}],
offset: {
row: 1,
col: 0,
rowCount: 3,
colCount: 1
}
};
pivotTable.setStyle(labelPivotAreaWithOffset, style);
let cornerPivotAreaWithOffset = {
type: GC.Spread.Pivot.PivotAreaType.corner,
offset: {
row: 0,
col: 1,
rowCount: 1,
colCount: 1
}
};
pivotTable.setStyle(cornerPivotAreaWithOffset, style);
let topRightPivotAreaWithOffset = {
type: GC.Spread.Pivot.PivotAreaType.topRight,
offset: {
row: 0,
col: 0,
rowCount: 1,
colCount: 4
}
};
pivotTable.setStyle(topRightPivotAreaWithOffset, style);
集算表增强
引用计算字段
DataManager 支持从数据源添加字段,新版本还支持具有公式数据类型的虚拟列。
之后可以在集算表的视图中使用这些公式列来显示运行总和或股票价值比率等内容:
// Add product table.
var productTable = dataManager.addTable("productTable", {
remote: {
read: {
url: baseApiUrl + "/Product"
}
},
schema: {
columns: {
TotalUnits: {
dataType: "formula",
value: "[@UnitsInStock] + [@UnitsOnOrder]"
},
StockValue: {
dataType: "formula",
value: "[@UnitPrice] * ([@TotalUnits])"
}
}
}
});
// Bind a view to the table sheet
var myView = productTable.addView("myView", [
{ value: "Id", caption: "ID", width: 50 },
{ value: "ProductName", caption: "Name", width: 170 },
{ value: "UnitPrice", caption: "Unit Price", style: { formatter: "$#,##0.00" }, width: 120 },
{ value: "UnitsInStock", caption: "Units In Stock", width: 120 },
{ value: "TotalUnits", caption: "Total Units", width: 120 },
{ value: "StockValue", caption: "Stock Value", style: { formatter: "$#,##0.00" }, width: 120 },
{ value: "=SUM([#1:@[UnitPrice]]*([#1:@[UnitsInStock]]+[#1:@[UnitsOnOrder]])", caption: "Running SUM", style: { formatter: "$#,##0.00" }, width: 150 },
{ value: "=[@StockValue]/SUM([UnitPrice] * ([UnitsInStock] + [UnitsOnOrder]))", caption: "Stock Value Ratio", style: { formatter: "0.00%" }, width: 160 }
]);
针对列的触发公式
集算表中的触发器公式是根据特定条件或触发器进行计算的公式。
这意味着可以根据特定条件重新计算数据,在输入新值时清理数据,或为列提供默认值。以下是触发公式的一些示例:
var table = dataManager.addTable("Table", {
schema: {
columns: {
createdDate: {
dataType: "Date",
trigger: {
when: "onNew", <<------- apply the formula on created
formula: "=NOW()", <<------- trigger formula to set current time
// fields: "*" <<------- when triggered on new, there is no need to specify the affected fields
},
},
updatedDate: {
dataType: "Date",
trigger: {
when: "onNewAndUpdate", <<------- apply the formula on created and updated
formula: "=NOW()", <<------- trigger formula to set current time
fields: "*" <<------- all fields changed will have the formula applied to them
},
},
label: {
trigger: {
when: "onNewAndUpdate", <<------- apply the formula on updated
formula: "=UPPER([@label])" <<------- use the upper formula on the input text of the label field
fields: "label", <<------- when the current column value is updated the formula will be applied
},
},
amount: {
dataType: "number",
trigger: {
when: "onNewAndUpdate", <<------- apply the formula on updated
formula: "=[@price] * [@quantity]" <<------- automatically evaluate the amount
fields: "price,quantity", <<------- the changes of the price and quantity columns will cause the formula to calculate
},
},
price: { dataType: 'number' },
quantity: { dataType: 'number' }
},
}
});
设计器增强
SpreadJS 支持为组合键添加自定义快捷命令。在 Github 的项目中实现了一些 Excel 标准,用户可以从 GitHub 下载:https://github.com/GrapeCity/spreadjs-resources
在 v17 版本中,默认将此项目中的快捷方式添加到设计器组件中,以便在设计器中无需任何额外代码即可使用快捷方式。
V16.0 Update2
甘特图插件 / GanttSheet
在新版本中,SpreadJS 新增了一个新的插件:甘特图,这是基于 SpreadJS 本身的强大电子表格能力,将生产计划、预算排期中的日程管理进行了全新可视化的展示插件,在 V16.0 Update2 版本中以 Beta 版本发布。
其数据来自与集算表同源的数据管理器(DataManager),通过绑定 -> 视图的方式,将层级化的任务数据使用此插件进行展示,如上图。
在此次版本中,甘特图插件已具备以下的能力(功能):
缩放和滚动时间刻度
任务栏和网格线的样式
布局
任务操作
日历
导入和导出
甘特图插件将在 SpreadJS v17.0 版本中实现更完整的功能。
公式编辑器 / Formula Editor
在使用电子表格的过程中,如果碰到比较复杂的公式,除了阅读困难,无法理解公式函数的计算逻辑,在编辑时也会非常困难,很容易造成公式出错。
在新版本中,SpreadJS 增加了公式编辑器的工具,帮助用户解决以上的困难,如下图:
公式编辑器具备:
公式函数格式化
调整公式的缩进、间距、换行等,使公式更易读、易于维护。
灵活的大纲视图
允许在公式编辑器中折叠和展开公式视图。
语法高亮
通过突出显示公式中的不同语法元素,提升可读性和可用性。
Lint 选项
提供错误提示,如不正确的函数参数、括号不匹配等,以减少错误。
工具提示信息
当用户悬停或输入函数时,显示包含有关函数详细信息的工具提示。
主题定制
提供多个主题,并允许自定义现有主题以改变编辑器的外观。
CSS
// Define the color of the function token
.gc-formula-editor-token-function {
color: blue;
}
// Define the color of the string token
.gc-formula-editor-token-const-string {
color: red;
}
// Define the color, background-color, and font of the formula editor
.gc-formula-editor-content {
color: black;
background-color: white;
font: 16px, sans-serif;
}
手动计算模式 / Manual Calculation Options
新版本中,SpreadJS 会在依赖值(公式中引用的单元格、值或名称)发生变化时自动更新公式。
然而,如果你希望控制何时重新计算公式,而不是在引用单元格发生变化后立即进行计算,你可以将自动计算切换为手动计算。
SpreadJS API 中的 CalculationMode 枚举允许你设置自动或手动的计算选项。
当 CalculationMode 设置为 auto 时(默认模式),SpreadJS 会在每次引用的单元格发生改变时自动计算所有被修改的单元格。例如,在剪切粘贴或输入单元格时。
需要注意的是,SpreadJS 将修改过的单元格视为脏单元格,并且需要进行重新计算。
另一方面,当 CalculationMode 设置为手动(manual) 时,SpreadJS 仅在你明确请求时计算和更新公式。
这在你有一个包含许多复杂公式的大型工作表中,并且希望避免频繁的重新计算以提高性能和响应速度时非常有用。例如,在剪切或粘贴值时,SpreadJS 会重置公式和单元格的值,但不会重新计算任何公式。
注意:SpreadJS 在导出到 Excel 时支持 CalculationMode 选项。
以下代码示例展示了如何在初始化工作簿时设置手动计算选项。
JavaScript
// Switch to manual mode when initializing the workbook.
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {calculationMode: GC.Spread.Sheets.CalculationMode.manual});
// Or
spread.options.calculationMode = GC.Spread.Sheets.CalculationMode.manual;
一旦切换到手动计算模式,你需要使用 calculate()方法手动更新工作表中的公式,该方法接受 CalculationType 枚举值作为参数。
CalculationType枚举指定计算类型,其可用成员如下所示:
注意:从 SpreadJS V16.0 Update2 版本开始,已弃用了 sheet.recalcAll() 方法来重新计算单元格中的公式。你可以使用 spread.calculate() 来替代。
其他更新和增强 / Other Enhancement
计算相关
SUMIFS 和 XLOOKUP 性能优化
在新版本中,针对高频率使用的 SUMIFS 和 XLOOKUP 进一步做了性能优化,在普遍场景下有 10% ~ 30% 的提升。
输入公式时的跨工作表引用支持
在 SpreadJS 中,用户可以通过键入“=”在单元格中输入公式。
通常,用户只能使用光标选择要在该公式中引用的单元格,只要它们位于同一张工作表上即可。
在新版本中,添加了在编辑单元格公式以引用其他工作表中的单元格时单击不同工作表选项卡的功能。
工作簿增强 / Workbook Enhancement
单元格支持默认值 / DefaultValue
新版本中,在单元格对象添加了一个新属性,允许设置单元格的默认值。这将对需要对填报表单设置默认值的场景提供方便,结合单元格掩码功能,将会为表格最终用户填写表单时提供极大的方便。
通常,当单元格中没有值时,单元格将显示空白,在新版本中,可以将任何值或公式设置为单元格的默认值。也可以使用简单的 API 获取和设置默认值:
JavaScript
// 使用 defaultValue 方法设置或获取单元格的默认值/公式
activeSheet.getCell(0, 0).defaultValue(20);
console.log("使用defaultValue方法获取单元格(0,0)的默认值:" + activeSheet.getCell(0, 0).defaultValue());
activeSheet.getCell(0, 1).defaultValue("=IF(A1>10, A1*3)");
console.log("使用defaultValue方法获取单元格(0,1)的默认值:" + activeSheet.getCell(0, 1).defaultValue());
// 使用 setDefaultValue 或 getDefaultValue 方法设置或获取单元格的默认值/公式
activeSheet.setDefaultValue(0, 0, 20);
activeSheet.setDefaultValue(1, 0, 40);
console.log("使用getDefaultValue方法获取单元格(0,0)的默认值:" + activeSheet.getDefaultValue(0, 0));
activeSheet.setDefaultValue(2, 0, "=SUM(A1,A2)");
console.log("使用getDefaultValue方法获取单元格(2,0)的默认值:" + activeSheet.getDefaultValue(2, 0));
请注意,当单元格为空并且已经设置了默认值时,以下条件适用:
- 只有该单元格的默认值或默认公式将包括在重新计算中,公式优先
- 在编辑模式下,单元格显示默认值或使用默认公式重新计算的值
- 导出到 Excel 时,默认值将导出为单元格值
- 用户可以更改单元格值,但不会覆盖默认值
默认值只能针对工作表中的视口区域进行设置,但无法为整行或整列设置默认值。
日期时间单元格类型增强 / DateTime cell type
单元格中的日期时间选择器下拉菜单允许用户设置日期和时间以在单元格中填充计算结果。
以下截图说明带有下拉指示器的单元格 C5 中的日期时间选择器下拉列表。
以下图片展示了使用日期时间选择器下拉菜单进行日期范围选择的情况。
Excel 样式复制优化
SpreadJS 中的复制样式已得到增强,可以匹配 Excel。
新版本中,SpreadJS 将为单元格生成命名样式并将它们添加到 HTML 剪贴板内容的顶部,而不是为每个单元格添加相同的样式定义,从而减少命令包的大小。
集算表增强 / TableSheet Enhancement
窗口聚合函数 / Window Formula
新版本中添加的 WINDOW 函数提供集算表中的数据分析。
这些函数可以在特定窗口(与当前行相关的一组表行)上执行聚合、排名和分析计算,并为每行生成结果。可以同时使用聚合值和非聚合值。这些新函数如下:
排名功能
- CUMEDIST - 返回累积分布值
- DENSERANK - 返回当前行在其分区内的排名,没有间隙
- ROWNUMBER - 返回分区内当前行的编号
- W_PERCENTRANK - 返回排名值的百分比
- W_RANK - 返回当前行在其分区内的排名(有间隙)
分析函数
- FIRSTVALUE - 返回窗口框架第一行的参数值
- LAG - 提供对指向当前行的给定物理偏移量的行中的值的访问
- LASTVALUE - 返回窗口框架最后一行的参数值
- LEAD - 提供对当前行之后给定物理偏移量的行中的值的访问
- NTHVALUE - 返回窗口框架第 N 行的参数值
- NTILE - 返回其分区内当前行的存储桶编号
Windows 函数实现的最佳示例是运行总计(running total)。
可以使用 Windows 函数创建某些数据的运行总计,并使用 PARTITIONBY 函数等来获取每年的运行总计或类似的内容:
设计器增强 / Designer Enhancement
设定默认活动选项卡 / Default Active Ribbon Tab
新版本中对设计器组件所做的一个增强是能够在功能区中设置默认的活动选项卡。
通过在配置中设置默认的活动选项卡,该特定选项卡将在加载 SpreadJS 设计器组件时打开。
JavaScript
// Use the activeRibbonTab method of the designer component to set the active ribbon tab.
var config = GC.Spread.Sheets.Designer.DefaultConfig;
var designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("designerHost"), config);
let currentActiveRibbonTab = designer.activeRibbonTab();
if (currentActiveRibbonTab !== "insert") {
designer.activeRibbonTab("insert");
}
Excel 主题、颜色和字体
我们在设计器中添加了“主题”、“颜色”和“字体”按钮,使用户可以切换主题或颜色集以影响引用这些主题颜色的所有形状、图表和内置单元格样式。
Excel 文件密码
SpreadJS 支持使用密码打开和保存 Excel 文件,我们现在已将该功能添加到文件对话框中的 SpreadJS 设计器中。
名称管理器中的只读名称
在此版本中,现在可以在名称管理器中将名称设置为只读。这可以防止您的用户更改工作簿中的特定名称。
Angular 16 支持
SpreadJS 现在支持 Angular 16 用于我们的 Angular 包装器和设计器组件。
V16.0 Update1
单元格相关
1. 支持用户输入数据时掩码提示(Input Mask)
输入掩码对于表单录入、单元格编辑是一个非常有用的特性。通过输入掩码可以将用户输入限制在一组格式中,从而确保数据完整性。同时,能够防止用户输入错误。例如,输入格式化的电话号码、身份证号码等。数据格式可以是字符串模式或日期模式,并且该格式还可以与公式结合使用,进而产生特定结果。
相对于数据验证的功能,输入掩码在录入的同时就能帮助用户纠正输入错误,且具备格式提示的功能,让数据录入体验更加友好,更加准确。
2. 文字换行策略优化(Word Line Break Enhancement)
不同语言系统下的Excel对中文文本的换行策略并不一致,如下图所示:
在新版中,SpreadJS针对英文语言环境下Excel中的中文文本提供换行策略,确保该样式与中文环境中保持一致。
同时,SpreadJS开放了接口和自定义换行策略,方便用户进行调整与扩展。示例代码如下图所示:
公式函数相关
1. 对计算结果进行自动格式化(Formula Result Format Hint)
当您在 SpreadJS 中输入公式后,新版本可以根据公式中的数据自动生成格式化的结果。例如,有一个值为 0.1 的单元格 (A1)并且对其应用了百分比格式化 (0%),如果在该单元格中引用公式“=A1+1”,那么结果也会自动格式化为百分比形式:110%。
自动格式包含以下类型:
2. 新增正则表达式函数
SpeadJS V16.0 Update1中新增了一些新的正则RegEx函数:
- GC.EGEXEXTRACT - 根据正则表达式提取匹配的子字符串
- GC.REGEXMATCH - 测试一段文本是否与正则表达式匹配
- GC.REGEXREPLACE - 使用正则表达式将部分文本字符串替换为不同的文本字符串
新功能可以帮助提取、匹配和替换单元格内的文本,以下为示例:
数据透视表相关
1. 单字段小计位置设置(Subtotal Position)
在新版中,可以对透视表单字段的小计位置进行设置。
2. 支持对数据进行排序(Sort Value)
新版本的数据透视表支持对数据进行排序,其方式与通用Excel保持兼容。
3. 支持是否启用GetPivotData函数
在新版本中,用户可以通过配置项来决定是否使用GetPivotData函数对数据透视表的数据进行引用。使用GetPivotData函数的效果如下图所示:
使用单元格引用的效果如下图所示:
API函数如下图所示:
形状增强(Shape Enhancement)
1. 支持将迷你图作为形状背景
在新版的 SpreadJS 中,支持使用迷你图函数作为源属性,通过 style.fill.src 来完成背景填充。使用时,将创建迷你图并将其用作形状的背景。例如,您可以创建一个标准矩形并在其中使用饼图迷你图。
2. 支持文本框(Textbox)
SpreadJS V16.0 Update1版本中支持文本框(TextBox),可以在工作表的任何位置添加文本框,同时还可以利用 resizeToFitText 选项自动调整文本框的大小来适应用户的输入。
3. 支持调整形状的Z-Order
在新版的 SpreadJS 及设计器组件中可以支持更改形状的 Z-Order顺序,基于此功能用户就可以根据需要调整形状之间的顺序。可以通过以下方法来调整形状之间的Z-Order 顺序:
- 向前移动 - 将形状移动到另一个形状之上
- 置于顶层 - 将形状移到其他所有形状之上
- 向后发送 - 将形状移动到另一个形状下方
- 置于底层 - 将形状移到其他所有形状下方
4. 表单控件形状支持 enabled 属性
在之前的版本中,SpreadJS提供的表单控件(Form Controls),允许为类似表单的界面添加不同类型的按钮和交互式 UI。在新版本为该表单控件添加 enabled 属性,通过该属性可控制用户是否可以与表单控件进行交互。
图表增强
1. 新增仪表图(Gauge Charts)
SpreadJS V16.0 版本新增仪表图(Gauge Charts)类型。通过这个新的组合图表可创建一种仪表或速度计。该仪表图通过饼图和圆环图进行组合,可让用户定量地可视化单个数据值。
2. 负数反转
在新版本中柱形图和条形图可通过 invertIfNegative 选项得到增强,同时能够以不同的方式设置正值和负值的格式,从而实现更清晰的视觉区分。如果在图表中的特定系列上启用此选项,SpreadJS 将自动反转数据。可以使用invertColor选项为倒置系列选择特定颜色。
工作簿与工作表(Workbook & Worksheet)
1. 通过密码保护工作表
在 SpreadJS 中可以为工作表添加密码,从而实现对工作表的保护。您可以为特定工作表或整个工作簿设置密码,以确保在线表格文件的安全性。API 如下:
GC.Spread.Sheets.Worksheet.prototype.protect
GC.Spread.Sheets.Worksheet.prototype.unprotect
GC.Spread.Sheets.Worksheet.prototype.hasPassword
2. 过滤对话框可调整大小
在新版的 SpreadJS 中可以调整下拉过滤器对话框的大小以适应用户对文本长度的不同需求。该功能会遵循以下行为对大小进行调整:
- 跟踪用户上次将其设置的大小
- 不允许将尺寸调整至低于最小要求的范围,以确保能够正确显示内容
- 提供启用/禁用可调整大小的过滤器对话框的全局设置
3. 组合框下拉列表支持浮动样式
在某些情况下,完整的 ComboBox 列表可能会出现无法正确显示的问题。在新版的SpreadJS中,为ComboBoxCellType 添加了一个allowFloat 属性。启用该属性后,就可以允许ComboBox浮动到页面上的 SpreadJS 实例之外,确保内容可以完整被显示,如下所示:
4. 空值显示为 0 开关
在工作表中可能包含导致单元格中为 0 的公式,而用户可能并不希望这些单元格显示任何值。在SpreadJS新版本中添加了 showZeros 选项。启用该选项就可以在单元格中显示 0 值,禁用该选项可将单元格值显示为空白。
5. 样式复制剪贴板内容优化
新版本中,在复制样式范围时为剪贴板生成优化的 HTML 内容,该特性大大提高了大型剪贴板操作的性能、有效降低内存消耗。
6. 保留自动换行
作为另一个复制/粘贴的增强功能,新版本支持从一个 SpreadJS 实例复制到另一个实例或从一个SpreadJS实例复制到 Excel时保留单元格中的自动换行。如果为单元格启用了自动换行,则该单元格自动换行将在复制时自动启用。
7. 增强列/行标题布局
新版本中支持对列/行标题进行布局,addRows/Columns 和 deleteRows/Columns 函数可以在 Column 和 Row 标题区域使用。您只需在调用这些函数时指定 SheetArea.colHeader 或 SheetArea.rowHeader 即可实现该能力。
8. 风格装饰图标(Style Decoration Icons)
在 SpreadJS V16.0 Update1 中对 icons 属性进行了增强,从而实现对样式装饰的支持。这些图标是一组自定义图标,可以嵌入单元格内部或外部。由于该效果是使用样式来实现的,因此可以指定图标的来源、宽度、高度和位置。
9. SetRowCount 和 SetColumnCount 数据保护
在以前的 SpreadJS 版本中,SetRowCount 和 SetColumnCount 函数可以删除行或列,即使该行或列中有包含数据。在本次发布中,系统添加一个名为guardContent的参数,通过该参数就可以保护包含数据的行和列,避免在删除的过程中过程中发生错误。
框架支持
1. Next.js 支持
Next.js 框架是一个基于 React 的框架,可创建全栈 Web 应用程序。新版本中添加了对 Next.js 使用的支持。为您提供生产所需的所有功能,包括混合静态和服务器渲染、支持 TypeScript、智能捆绑、路由预取等。
2. Nuxt支持
Nuxt 是一个基于 Vue 的开源框架,有助于 Web 开发,现在支持在新版本中与 SpreadJS 一起使用。
3. Angular 15 支持
新版本的 SpreadJS 支持带有 Angular Wrapper 的最新 Angular 15。
设计器增强
可调整大小的条件格式和命名范围对话框
在新版的 SpreadJS 中,设计器组件可以支持调整对话框的大小。通过添加到对话框模板中的一个新的“可调整大小”的属性进行条件格式的调整。
当该属性设置为 true 时,对话框将支持在左、右和底部方向进行大小调整。另外,对话框的初始尺寸是该对话框的最小尺寸。
集算表增强(TableSheet Enhancement)
1. 数据源字段扩展
在某些情况下,DataManager中的数据可能是具有不同属性的嵌套对象。以前,您需要使用计算列或点分隔符将这些对象的属性指示为字段。在新版本中,可以通过指定“spread: true”来确保将对象的第一级子对象分散到单独的字段中。
2. 类似 WorkSheet 的过滤对话框,支持多列过滤
新版本中集算表允许同时过滤多个列。
V16.0
新文件结构
新文件结构是 SpreadJS 近几个版本中最为重要的架构级更新。这种新文件结构可以大大提高导入大型 Excel 文件的性能,同时在保存时创建更小、优化更好的文件。
在 V15.0 及更早的版本中,SpreadJS 需要先导出 SSJSON ,再导出 Excel 的 xlsx 文档。新的文件格式可以直接将数据转换为模型。生成的数据被保存到一个压缩的 .sjs 文件中,使其类似于 Excel 自身的 XML 结构。这种格式让 ExcelIO 的进程更快、更轻量。有关此功能的更多信息,请点击此处查看博客。
导出文件性能对比(单位:毫秒)
集算表(TableSheet)增强
SpreadJS 集算表(TableSheet)是一个具备数据绑定功能、公式计算能力的高性能数据表格,提供排序、筛选、样式、行列冻结、自动更新、单元格更新等能力。集算表在 V16.0 中获得了更多功能:
1、关系数据管理器(DataManager)中的层级数据
TableSheets 现在支持源数据中的层级结构数据。这包括四种不同类型的记录数据:
- 属性“id”和“parentId”
- 指示层级结构级别的属性
- 包含分层子集的属性
- 可以通过自定义函数解析为层级结构的,包含主键的数据
配置父子层次结构类型代码示例:
还添加了层级结构操作,使用户能够:
- 升级/降级记录
- 向上/向下移动记录
- 在之后/之前或之上/之下插入记录
- 删除一条记录
- 展开/折叠所有记录级别或特定级别
- 排序/过滤记录
2、关系数据管理器(DataManager)字段名称映射
关系数据管理器(DataManager)的数据源模式现在支持为列设置别名,允许数据源的前端和后端之间使用不同的名称。这可以通过在向 DataManager 添加视图时简单地设置“caption”属性来完成。如图:
设计器(Designer)增强
我们对 SpreadJS 的设计器组件进行了增强,包括本博客前面 TableSheet 部分的一些相应功能:
1、集算表(TableSheet)模板和面板增强
当集算表最初被添加到 SpreadJS 时,我们在设计器中添加了一个面板来管理 TableSheets。在 V16.0 中使用列列表中的关系数据时,可以进行折叠特定列的操作。此外,用户可以单击关系列以显示该特定列的详细信息。在工作簿中选择集算表时,此功能也适用于设计器右侧的集算表面板。其他功能包括分组和拖动字段。
2、集算表(TableSheet)层次结构数据
设计器中有关集算表(TableSheet) 的另一个增强,是在数据源的“列”选项卡中添加了对分层数据的支持。列现在有一个单独的“层次结构”部分,其中包含可以定义的类型、聚合公式和分组列:
这些选项可以按如下方式使用:
- 类型 - 定义为 Parent、ChildrenPath 或 Level
- 汇总公式 - 输入指定列的层级汇总公式
- 大纲列 - 自定义列的显示,指定是否包括复选框、图像或指示器
3、在选择区域中执行查找/替换
在大型工作表中搜索特定数据时,您可能只想搜索选中区域的单元格内容。在 V16.0 中,我们添加了对查找和替换功能的增强,支持了仅在选中区域的单元格中进行搜索。
4、格式面板
新的格式窗格按钮让用户可以快速打开形状、图片和图表的侧边栏。
计算增强
无效的公式输入行为和样式
SpreadJS 会自动识别无效的公式,并在用户尝试提交时显示错误。在 V15.0 及更早版本中,如果公式无效,输入的内容会被自动删除。在 V16.0 版本中,我们添加了对应的可选项,支持将输入错误的公式保留在单元格中以便用户修正,当我们设置 AllowInvalidFormula 选项设置为 true 时,输入的错误公式将被转换为文本并保留:
spread.options.allowInvalidFormula = true;
设计器配置方法:
代码配置方法:
通过此增强功能,我们还添加了专门针对无效公式的单元格状态。这意味着您可以实现自动标记具有无效公式的单元格并将样式应用于这些特定单元格。
形状增强
1、类 Excel 的表单控件(Form Controls)
为了更轻松地在 SpreadJS 中创建您自己的表单,我们添加了一些基于 SpreadJS 形状的有用的类似 Excel 的表单控件。这些控件包括:
- 按钮(Buttons)
- 微调按钮(Spin Buttons)
- 列表框(List Boxes)
- 组合框(Combo Boxes)
- 复选框(Check Boxes)
- 选项按钮(Option Buttons)
- 分组框(Group Boxes)
- 标签(Labels)
- 滚动条(Scrollbars)
通过指定表示控件位置和大小的 addFormControl 方法的 left、top、width 和 height 参数,可以将这些控件放置在工作表中的任何位置。一旦设置了位置和大小并创建了控件,它就可以绑定到特定的单元格,例如上面屏幕截图中的年龄微调按钮。此外,还添加了一个名为 FormControlValueChanged 的新事件,以便在表单控件的值发生变化(UI 操作、API 调用或关联的单元格发生变化)时触发。
2、调整大小(Resizing)增强
开发人员现在可以限制或允许不同类型的形状调整大小。这些类型包括纵横比、水平和垂直调整大小,可以使用 API“allowResize”进行设置。
3、Shift+鼠标调整大小行为
当 allowResize 在工作表中设置为 true 时,可以在使用鼠标调整形状大小时按住 shift 键以保持形状的纵横比。
工作簿(Workbook)增强
我们对 SpreadJS 的工作簿功能做了一些增强:
1、复制/剪切取消事件
复制和剪切事件已得到增强以提供剪贴板的当前状态。这有助于在复制/剪切/粘贴过程的某些阶段实现特定功能,并向以下事件添加额外的参数:
- ClipboardChanging
- ClipboardPasting
- ClipboardPasted
2、单元格装饰样式
我们的样式实现已得到增强,包括单元格装饰。包括:
- 遮角样式
- 边角样式
- 图标(位置、图标和颜色)
3、数据验证(Data Validation)的自定义样式
数据验证可用于标记非法的单元格数据或防止输入特定数据。V16.0 可以为该验证设置样式,但对于此版本,我们添加了为数据验证设置自定义样式的功能。
4、在 EditEnding 和 EditEnded 事件中取消输入
EditEnding 和 EditEnded 事件发生在用户在单元格中输入或更改数据之后。在 V16.0 版本中,我们添加了一个取消参数,以便开发人员可以在需要时取消编辑。
V15.0 Update2
名称对话框组件化 / Name Box Component
SpreadJS 的名称框组件用于显示选定的范围、项目、命名范围,并在电子表格中创建和导航到自定义名称。 名称框有几个功能:
用户可以在名称框中输入文本
- 如果文本无法解析为范围,SpreadJS 将为选定的单元格创建一个自定义名称
- 如果文本可以解析为范围,SpreadJS 会将这些范围作为选择添加到工作表中
- 如果文本可以解析为范围但这些范围不在同一个工作表中,则会显示警告
- 如果文本无法解析为范围并且不是有效的自定义名称,则会显示警告
用户可以选择单元格范围
- 如果所选区域已与自定义名称关联,则名称框将显示该名称
此功能已经存在于设计器中,但在此版本中,我们将其分离到自己的组件中,可以在没有 SpreadJS 设计器的情况下单独使用。
工作簿(工作表)增强
1、新增 DataObject 单元格类型
在此版本中,添加了一种新的单元格类型,以帮助以 DataObject 单元格类型的形式呈现数据。 这意味着您可以拥有绑定到数据的特殊单元格,并且选择数据对象的不同属性非常容易。 当单元格值为对象且单元格类型设置为 DataObject 时,单元格按钮将自动添加到单元格中:
单击此按钮后,将打开一个下拉列表,如果单元格值是嵌套对象,则会有一个级联下拉列表:
当用户从该列表中选择一个项目时,所选项目的值将被提取并显示在右侧相邻的空单元格中:
2、切片器更新
当我们第一次在 SpreadJS 中实现切片器时,它们是使用 DOM 元素制作的。 在此版本中,我们增强了使用形状构建的切片器,使我们能够在不久的将来实现更易于使用的切片器功能,例如 Table Slicer Multi-Select 等。
3、表格切片器支持多选
使用此功能,用户可以在表格切片器中选择某些项目,而不仅仅是一个或所有项目。
4、选中区域内导航增强
此增强功能侧重于导航选定的单元格。以前,SpreadJS 会在选择多个单元格、输入数据然后按 Enter 移动到下一个单元格时取消选择。我们已对此进行了更改以匹配 Excel 行为,因此现在不会删除选择:
5、悬停状态支持在不同区域设置不同样式
以前,您可以为工作表中的单元格区域定义悬停样式,以便当用户悬停在该行上时,它会显示一个样式:
通过此增强功能,现在可以为多个范围设置不同的悬停样式:
6、InvalidOperation 事件增强
InvalidOperation 事件在用户执行特定的无效操作时触发,例如:
- 无效的工作表名称更改
- 更改数组公式的一部分
- 设置无效公式
此事件现在将针对更多无效的用户交互触发:
- 尝试输入锁定的单元格
- 双击锁定的单元格
- 切割锁定的单元格
图片形状增强与重构
SpreadJS 的图片功能目前支持很多特性,包括边框、背景颜色和拉伸。 在此版本中,我们添加了更多图片自定义选项,包括:
- Brightness
- Contrast
- Recolor
- Crop
- Transparency
- Geometry Types
除了这些新选项之外,我们还在 SpreadJS 设计器中添加了图片格式选项卡,因此您的用户可以使用 SpreadJS 设计器组件或您的开发人员使用 SpreadJS 设计器桌面应用程序来利用这些新选项。
计算引擎增强
1、跨文件引用增强
在 v15 的第一个服务包版本中添加了跨工作簿公式支持。 在此版本中,我们以 getExternalReferences 函数的新 includeItemDetail 参数的形式添加了有关源引用和目标引用的更多信息,它允许开发人员实际获取特定文件的特定目标行、列和源范围以了解 确切地说,特定引用来自哪些单元格。
2、新公式与函数(与 Excel 兼容)
文本操作相关
3 个新的文本操作功能包括:
- TEXTBEFORE - 返回分隔符之前的文本
- TEXTAFTER - 返回分隔符之后的文本
- TEXTSPLIT - 使用分隔符将文本分割成行或列
数组操纵相关
11 个新的数组操作函数包括:
- VSTACK - 垂直堆叠数组
- HSTACK - 水平堆叠数组
- TOROW - 将数组作为一行返回
- TOCOL - 将数组作为一列返回
- WRAP ROWS - 将行数组包装成二维数组
- WRAP COLS - 将列数组包装成二维数组
- TAKE - 从数组开始或结束返回行或列
- DROP - 从数组开始或结束删除行或列
- CHOOSEROWS - 从数组中返回指定的行
- CHOSECOLS - 从数组中返回指定的列
- EXPAND - 将数组扩展到指定的维度
3、关系数据显示,支持公式
新版本还实现了一个有助于显示对象关系值的公式。 例如,假设您有一个名为“Customer”的对象,它具有以下属性:
- Name
- ID
- CompanyName
您现在可以使用如下语法在单元格中引用这些单独的项目:
[code]
=[@customer.CompanyName]
[/code]
集算表增强
1、无需更新页面的数据更新
在我们最初的 TableSheet 实现中,需要刷新页面才能从连接的数据源更新 TableSheet。 在此版本中,可以通过 DataManager 表和视图级别的新 fetch 方法更新数据而无需刷新页面。 调用它将从数据源中获取数据并更新相关的 TableSheets。
2、获取修改信息
我们现在添加了一个 getChanges 方法来以编程方式获取 TableSheet 中已更改的项目。 这个新方法返回一个包含以下信息的对象数组:
- 更改类型 - 自动同步模式的更新或插入,沐浴模式的更新、插入或删除
- 数据项 - 当前行数据
- 旧数据项 - 原始行数据(可选)
- Index - TableSheet 视图索引
3、无数据场景下加载集算表
SpreadJS TableSheets 现在支持在不包含 TableSheet 数据的情况下保存模板,然后使用上述表格的 fetch 方法在不同的时间加载该数据。 这实质上让开发人员无需在最初指定数据的情况下创建 TableSheet,然后在稍后加载数据,例如当数据更改时。 这看起来像这样:
[code]
// 1. Invoke the Workbook's fromJSON method
spread.fromJSON(spreadJson);
// 2. Update table options
let myTable = spread.dataManager().tables["myTable"];
myTable.options = {
remote: {
read: function () {
return Promise.resolve(dataSource);
}
}
};
// 3. Invoke the table's fetch then setDataView
myTable.fetch().then(function() {
let myView = myTable.views["myView"];
let sheet = spread.getActiveSheetTab();
sheet.setDataView(myView);
});
[/code]
4、ComboBox/MultiColumn 单元格显示字典字段
SpreadJS TableSheets 中的查找列是在数据模式中标记为“查找”的列,用于支持跨列计算。 在此版本中,这些查找列可以根据数据架构自动更改单元格类型:
- 以数组形式查找列 - 组合框单元格类型
- 关系查找 - 多列列表
- 查找中的关系和列选项 - 具有指定列的多列
透视表支持对数据字段编辑
默认情况下,SpreadJS 中的数据透视表中的单元格无法编辑,只能编辑数据透视范围,就像 Excel 一样。 在此版本中,最终用户现在能够编辑数据透视表单元格值,然后更新和重新加载数据透视表的数据源以反映更改。 对于开发人员,这是通过一个名为的属性启用的。
前端框架新版本支持
SpreadJS 现在包括对最新版本的 React 18 和 Angular 14 的支持。
V15.0 Update1
集算表
1、多行列头支持
集算表现在支持在列标题中显示多行,允许您在相关字段的层次结构中直观地将列分组在一起。 此功能包含在用于集算表和表格编辑器的 SpreadJS 脚本文件中。
2、列头自由区域
新版本中添加的另一个强大功能是支持集算表中的空闲标题区域。 这使您可以在 TableSheet 视图上方创建一个动态标题区域,其中包括对公式、格式设置等的完全支持,使其成为提供支持摘要数据的理想选择。
3、交叉列支持
集算表交叉列是此次新版本中添加的最重要功能之一,极大地增强了数据输入功能。 交叉列允许您在单个行视图中显示(透视或转置)来自多个相关表或记录的字段。
下方示例是在单行而不是多行中显示具有多个记录选项的 Payment Method 字段。
在此示例中,交叉列允许您在一行中显示现金、支票、ACH 和 CC 选项,使您的用户可以轻松输入或编辑此数据。 交叉列本质上将这些数据转换为更简化的行视图,例如用于数据输入的数据透视表。
这也可以用于预算或费用报告等内容。
4、基于集算表直接创建透视表
新版本中支持从 TableSheets 创建数据透视表。 您现在可以在创建数据透视表时引用 TableSheet 数据,如下所示:
5、列头折叠模式增强
在许多情况下,TableSheet 中的列将包含比列宽更长的标题文本。Stacked-Mode API 增强功能允许您在不增加列宽的情况下显示全文,使其非常适合呈现窄列数据/条目,同时仍为标题标签提供上下文。 此增强功能现在支持在这些堆叠模式列标题中使用垂直文本:
工作簿与工作表
1、跨工作簿公式函数支持
在此版本中添加的SpreadJS 最受欢迎的功能之一是支持跨工作簿公式。
这个新功能允许您的用户输入包含对其他 SpreadJS 工作簿中数据的引用的公式。 其他工作簿的文件名包含在公式中的方括号内:
2、形状支持引用单元格内容
在之前的 SpreadJS 版本中,我们为形状添加了在其中添加文本的功能。 我们在此版本中增强了此功能,现在包括在内容为形状时添加单元格引用的功能。
3、显示所有工作表列表
为了使 SpreadJS 中的多个工作表易于导航,我们在工作表选项卡栏中添加了一个“所有工作表”按钮,该按钮显示工作簿中所有工作表的下拉列表,以便于选择它们。
4、表格内的拖拽行为增强
SpreadJS 中的拖放功能已得到增强,可以插入行而不是覆盖现有行。 选择一行并拖动它时,将出现一条突出显示的行,表示拖动行的新位置:
5、支持工作表的“深度隐藏”设置
在新版本中,添加了一个新的隐藏状态,称为“深度隐藏”。这与标准“隐藏”状态的行为相同,只是无法通过 UI 执行隐藏和取消隐藏操作。此设置也支持对 Excel 兼容。
透视表
1、支持日期切片器
SpreadJS 数据透视表现在支持时间线切片器,这使您的用户能够方便地按特定日期切片数据。除了按日期过滤数据透视表外,您还可以使用时间线切片器通过强大的滑块控件按日期和/或时间。
2、显示无数据项目
默认情况下,数据透视表将仅显示包含数据的项目,当行或列在过滤时不可见时,这一点尤其明显。使用这个新的“显示没有数据的项目”选项,您可以启用数据透视表来显示这些空白值,即使它们没有任何数据。
公式函数
1、支持 “." 对象操作符
计算引擎现在支持使用“.” 作为运算符来检索对象的属性。 例如,如果单元格 A1 包含一个具有属性“productName”的对象,您可以使用此运算符来引用它:A1.productName。
表格编辑器
1、格式化符号本地化语言支持
我们添加的新设计器功能之一是对 CultureInfo 的增强。 这包括:
- 在 CultureInfo 类型中公开属性(id、名称、预定义格式)
- 支持在数字格式对话框中自定义文化相关功能
- 在我们的 GitHub 上发布的新文化信息包项目
2、Vue3 框架支持
已经在 SpreadJS 中支持 Vue3,并且在这个版本中,在编辑器组件中添加了 Vue3 支持。
接口与 API
1、按条件获取有效区域:GetUsedRange()
不少同时使用SpreadJS和GCExcel的客户,都会问为什么GCExcel中提供了getUsedRange()方法,可以很方便的获取当前使用区域,从而获取相关数据。而SpreadJS却没有这个API,导致获取数据需要根据行列总数依次获取,但实际上,很多单元格都是空白单元格,写起来比较麻烦。SpreadJS也是积极响应客户需求,在15.1.0中新增了工作表(Worksheet)级别上的getUsedRange()方法。getUsedRange()方法接收一个参数,根据这个参数,可以获取不同元素的使用区域,详细的参数枚举列表如下:
2、对区域直接设置样式
在之前的 SpreadJS 版本中,必须使用循环逐个单元格地设置样式和样式名称。 此版本通过在整个单元格范围上提供 setStyle 和 setStyleName API 消除了循环的需要,使代码更简单一些。
V15.0
全新设计的集算表 / TableSheet
集算表 (TableSheet)是一个具备高性能渲染、数据绑定功能、公式计算能力的数据表格,通过全新构建的关系型数据管理器结合结构化公式,在高性能表格的基础上提供排序、筛选、样式、行列冻结、自动更新、单元格更新等功能。
集算表的出现,不但可以将表格作为数据库使用,保存大量结构化数据,还支持后端加载和原始数据回写,以此实现实时分析、处理,以及跨数据源计算和数据再加工等功能。借助这些功能,集算表非常适用于开发企业预算系统、财务系统,以及针对这些系统的数据分析、可视化展示、快速绑定、在线编辑等场景的搭建。
SpreadJS 全新设计的集算表(TableSheet)功能,除了提供排序、筛选、样式、行和列置顶以及单元格编辑等 WorkSheet 基础功能之外,还提供了关系数据管理、结构化公式和数据分组等实用功能,具体列表如下所示:
集算表应对的问题:
- 表格存在大量结构化数据(需要将表格作为数据库使用)
- 加载后端数据到表格中,并进行分析、处理
- 实际分析数据需要来自多个数据表(源)
- 对原始数据的再加工(修改、计算等)
- 原始数据的回写
集算表适用的场景:
- 全面预算系统
- 企业财务系统
- 数据分析及可视化展示
- 快速数据绑定及编辑
数据透视表增强 / PivotTable Enhancement
SpreadJS 的数据透视表增加了计算项的概念,该概念将原始的统计数据使用公式进行纵向计算得到结果,即增加一行计算得到的结果(相对应有一个“计算字段”的概念,会增加一列计算得到的结果)。
以下图为例,Raw Data 为原始的数据透视结果:
当增加计算项并进行单独分组后,可以看到在 Analysis Results 分组内,添加了三行计算项:Outstanding Orders 、Total Order和Order Proportion。
- Outstanding Orders:每个产品中尚未交付的订单总数(=OrderStatus[Canceled] + OrderStatus[Backorder] + OrderStatus[Pending]),即订单前三种未交付状态的总量
- Total Order:每个产品的所有订单总数(=OrderStatus['Outstanding Orders'] + OrderStatus[Shipped]")即订单四种状态的总量
- Order Proportion:每种产品的未发货订单总数占订单总数的比例
除了计算项,SpreadJS 的数据透视表还支持切片器、行与列的数字格式以及筛选对话框的搜索功能,如下图所示:
(SpreadJS 支持切片器)
(SpreadJS 的行与列支持数字格式)
(SpreadJS 的筛选对话框支持搜索)
打印增强 / Print & Preview
在本次 SpreadJS 的新版本中,可以通过表格编辑器直接设置与打印相关的页面参数,如下图所示:
除了可设置相关参数,表格编辑器的打印预览页面也做了全新的设计:
除了上述功能,SpreadJS 还支持对首页、奇偶页进行不同的页眉页脚设置,如下图所示:
公式与函数 / Formula & Function
SpreadJS 新增了可编程的 LAMBDA表达式函数,该函数允许使用 Excel 自己的公式语言定义自定义函数。
语法如下:
=LAMBDA([parameter1, parameter2, …,] calculation)
其中,parameter1, parameter2 等参数是可选的,表示要传递给函数的值,例如单元格引用、字符串或数字;最多可以输入 253 个参数。
calculation 表示要执行并作为函数结果返回的公式,必须为最后一个参数,且必须返回一个结果。
使用该函数,可以直接在单元格中输入公式,如:
=LAMBDA(number,number+1)(1)
如下图,计算结果为2。
在此公式中,number 值即为 1,计算结果为” number+1“,即 “1+1”,所以最终结算结果为 2。
将上述 LAMBDA 函数添加到名称管理器,然后在单元格中使用:
spread.addCustomName("PlusOne", "LAMBDA(n, n + 1)", "");
sheet.setFormula(1, 0, 'PlusOne(1)'); // 计算结果为2
除了 LAMBDA 函数,SpreadJS 还引入了ASC 和 DBCS 函数。
ASC函数:对于双字节字符集 (DBCS) 语言,该函数将全角(双字节)字符转换成半角(单字节)字符。
DBCS函数:将字符串中的半角(单字节)字符转换为全角(双字节)字符,在日语和德语语言包中,此函数名称为 JIS。
工作簿与工作表 / Workbook & Worksheet
SpreadJS 新版本中支持对命名样式启用“启用”标志,如下方代码所示:
SpreadJS 还支持自定义格式中按颜色索引,如下图:
此外,关于计算公式的使用“细节”,SpreadJS 还增加了将加减号作为公式输入开始的功能,借助 FormulaTextBox 编辑器,可以帮助用户轻松编写公式。该编辑器支持以加号(+)开始写公式,这样 Excel 用户在使用中,不必改变他们原本的使用习惯。
这个功能将会对某些会计类的项目有很大的提升,这些用户的操作习惯是按下加号(+)再输入公式,因此他们可以不用改变自己在 Excel 的习惯去适应 SpreadJS。
界面与行为 / UI & Behavior
在 SpreadJS 新版本中,添加了“跨列居中”的对齐方式。
跨列居中的实现策略为:当一个范围被设置为“跨列居中”时,每个单元格将继续向右寻找对齐方式为“跨列居中”且值为空的连续单元格,最后将其内容放在所有单元格的中心。
同时,SpreadJS 还支持上下文菜单的滚动样式,当上下文菜单过多时,使用滚动样式来展示全部菜单项。
接口相关 / API
用户在做协同编辑的需求时,为了解决冲突等问题,需要在复制粘贴或剪切粘贴时对粘贴数据的来源进行判断,如判断当前粘贴对象是通过复制还是剪切操作获取、某些粘贴内容来自当前 sheet 还是来自同一个工作簿的其他 sheet 等,为此,SpreadJS V15.0 对复制粘贴功能进行了增强。
对 ClipboardPasted 和 ClipboardPasting 事件增加了三个参数:
- fromSheet //粘贴区域的源表
- fromRange //复制或剪切的数据区域的源区域
- isCutting //用来表示是否为剪切操作
表格编辑器相关 / Designer
SpreadJS V15.0 在表格编辑器中增加了分列功能,其操作和 Excel 一致:
此外,SpreadJS 还在表格编辑器中增加了“删除重复值”功能:
最后,SpreadJS V15.0 为了使表格编辑器的布局更加简洁易用,在 UX 上做了以下优化:
-
组标题字体缩小,空间调整:
-
将单元格类型和单元格下拉框合并到CellEditors(单元格编辑)菜单中,并将其移动到“样式”组:
V14.0 Update2
表格编辑器相关
1. 单行工具栏
传统的 Ribbon 工具栏已经伴随着 SpreadJS 走过了 4 年的时间,如今也是时候做一些不同的尝试了。
随着在线文档的普及,大家对表格在线编辑的需求也日趋旺盛,更节省空间和更智能的单行工具栏已成为在线表格系统的标配,为了顺应这一潮流,SpreadJS 的编辑器组件正式推出了全新的工具栏样式:单行工具栏模式。
(SpreadJS 单行工具栏效果展示)
注意:传统的 Ribbon 工具栏仍然保留,用户可以通过代码在两种编辑器工具栏布局之间进行切换。
2. 定位功能(GoTo)
与 Excel 软件中的定位功能类似,SpreadJS 新版本中的编辑器也支持该功能,效果如下图所示:
3. 替换和全部替换
除了已经支持的“查找”功能外,本次更新,SpreadJS 编辑器还追加了替换和全部替换功能,用户可以从“开始”→“查找”→“替换”下的“主页”选项卡打开此功能选项,效果如下图所示:
4. 格式刷
用户可以在 SpreadJS 的表格编辑器组件中添加和使用 “格式刷”按钮,该按钮与 Excel 的体验完全一致,格式刷效果如下方动图所示:
5. 自动分组(Auto outline)
使用 SpreadJS 的自动分组功能,可以用来创建组和大纲,效果如下所示:
6. 移动和复制工作表
如 Excel 一样,用户在 SpreadJS 编辑器中右键单击工作表选项卡时,将出现“移动或复制工作表”选项:
7. 迷你图工具栏样式
SpreadJS 在该版本中重新设计了插入迷你图的布局样式,如下是新旧版本迷你图工具栏样式对比。
SpreadJS V14.0 Update1 版本:
SpreadJS V14.0 Update2 版本:
8. 工具栏响应式布局
在不同的浏览器窗口大小内,SpreadJS 的工具栏会响应式的更新布局,在不同分辨率的窗口效果如下所示:
# 1920x1080
# 1440x900
# 800x600
9. 形状选择面板
利用 SpreadJS 全新的形状选择面板,用户可以轻松选择工作表中的形状,并可选择是隐藏它们还是显示它们,效果如下所示:
工作簿(Workbook)相关
1. Excel 相关快捷键支持
SpreadJS 支持了多种与 Excel 相同的键盘快捷键,包括 Alt 组合和功能键,例如 Shift + Space 选择一行,或 Ctrl + Home 移动到工作表的开头等。
- Shift+Space: 用于选择整行,用户可以选中一个或多个选区,之后同时按下Shift和Space,该操作不支持撤销。
- Ctrl+Space: 选择整列,用户可以选择一个或多个区域,之后同时按下Ctrl和Space,该操作会受系统类型影响,中文环境下,该快捷键会是切换输入法,建议大家改写该快捷键,如何改写在之后会讲到,该操作不支持撤销。
- Ctrl+'-': 删除一行或一列,用户需要选中某行或某列,该操作支持撤销。
- Ctrl+End:跳转到当前sheet有内容的右下方单元格,内容不限于值,样式,该操作不支持撤销。
- Ctrl+Home:跳转到当前sheet页A1单元格,不支持撤销。
- Ctrl+9:隐藏选中行,支持撤销。
- Ctrl+'[': 选择当前单元格引用的单元格。
- Ctrl+']': 选择当前单元格影响的单元格。
- Ctrl+';':给当前活动单元格设置日期,支持撤销。
- Alt+'=': 给当前单元格添加sum函数,支持撤销。
- Alt+Shift+Right Arrow:选中整行或整列,按下Alt+Shift+Right Arrow,会将选中行或列进行分组,如果选中的不是整行或整列,该操作将无效,支持撤销。
- Alt+Shift+Left Arrow:选中已经分组的整行或整列,撤销分组,支持撤销。
- Alt+';':只选择可见单元格;
- Ctrl+D:将选中区域第一行复制到区域下方单元格中,支持撤销。
- Ctrl+R: 将选中区域第一列复制到区域右侧单元格中,支持撤销。
- Ctrl+Shift+'+': 插入行或列,选中整行或整列后,同时按下Ctrl、Shift和+,支持撤销;
- Ctrl+A: 全选整个sheet,不支持撤销。
- Ctrl+B: 当前选中单元格字体变粗,支持撤销。
- Ctrl+I: 当前选中单元格字体变为斜体,支持撤销。
- Ctrl+U:当前选中单元格添加下划线,支持撤销。
- Ctrl+Shift+'%': 当前选中单元格值变为百分比形式,支持撤销。
具体使用方法见技术博客: SpreadJS V14.2.0新特性解析 - 快捷键增强
2. 增量加载中显示表单名称
使用 SpreadJS 的增量加载功能,可以逐页加载工作簿。 在当前版本中,正在加载的当前工作表的名称将显示在状态栏中,为您的用户提供有关加载状态的详细信息。
3. 新增API:克隆工作表
在当前版本中,用户可以通过调用 SpreadJS 的 API 快速克隆一个已有的 Worksheet,这个应用接口降为模板设计提供极大的方便。
///* field GC.Spread.Sheets.Commands.copySheet: { canUndo: boolean, execute(context: GC.Spread.Sheets.Workbook, options: {sheetName: string, targetIndex: number, newName: string, includeBindingSource?: boolean}): void}
/**
* Represents the command used to copy sheet.
* @param context The context of the operation.
* @param options The options of the operation.
* The arguments of the execute method are as follows.
* context {GC.Spread.Sheets.Workbook} The context of the operation.
* options {Object} The options of the operation.
* options.sheetName {string} The clone sheet name.
* options.targetIndex {number} The target index.
* options.newName {number} The new sheet name.
* options.includeBindingSource {boolean} Whether to bind data source to clone sheet
* @example
* //This example clones a sheet.
* spread.commandManager().execute({cmd: "copySheet", sheetName: "Sheet1", targetIndex: 3, newName: "Sheet1 (2)", includeBindingSource: true});
*/
Commands[COPY_SHEET] = {
canUndo: false,
execute: function (context: IWorkbook, options: IWorkSheetOption): boolean {
}
};
4. 获取“状态栏”对象
在 SpreadJS 新版本中,用户可以通过API获取状态栏对象,以便更好的进行定制开发。
// Creating the status bar
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var statusBar = new GC.Spread.Sheets.StatusBar.StatusBar(document.getElementById('statusBar'));
statusBar.bind(spread);
// Get the status bar if already created
var statusBar = GC.Spread.Sheets.StatusBar.findControl('statusBar');
5. 更新后的构造器语法
在之前版本中,用户需要使用“document.getElementById”来获取 SpreadJS 实例的宿主 DIV 元素,类似于以下内容:
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
在当前版本中,仅需如下代码即可获取:
var spread = new GC.Spread.Sheets.Workbook("ss");
6. 改变Worksheet index
/**
* Change sheet index and reorder sheets.
* @param {string} sheetName The sheet name.
* @param {number} targetIndex The target index.
* @example
* //This example show how to change sheet index.
* var spread = GC.Spread.Sheets.findControl(ss);
* spread.changeSheetIndex("Sheet1", 2);
*/
changeSheetIndex(sheetName: string, targetIndex: number): void {}
使用此 API,您可以(例如)使用以下方法将第一个工作表移动到工作簿中的最后一个位置:
spread.changeSheetIndex("sheet1", 2);
7. 框架支持
SpreadJS 当前已经支持 Vue 3 和 Angular 12 等前端开发框架,除此之外,还通过了 iOS 14 的兼容性测试。
V14.0 Update1
数据透视表功能增强
SpreadJS的 数据透视表插件已经覆盖了现有Excel 中 90% 以上的功能,并且做到了与 Excel 完全兼容,您可以将设计好的透视表在 SpreadJS 与 Excel 之前进行切换,而不用担心数据丢失。
与此同时,SpreadJS 也发布了多个与透视表有关的 API 接口,方便开发者通过代码控制透视表相关的行为和表现。
如下是SpreadJS数据透视表的功能更新列表:
1. 数据源刷新
SpreadJS 的透视表插件(PivotTable)已经具备刷新的能力,当数据源发生变更后,可以通过右键菜单完成透视表的刷新,如下图:
也可以使用调用接口的方式完成刷新,示例代码如下:
function updateSource()
@description refresh pivotTable data source
var spread = new GC.Spread.Sheets.workbook(document.getElementById("ss"));
var sourceSheet = spread.getSheet(0);
var sheet = spread.getSheet(1);
var sourceData = [["Date","Buyer","Type","Amount"],
["01-Jan","Mom","Fuel",74],
["15-Jan","Mom","Food",235],
["17-Jan","Dad","Sports",20],
["21-Jan","Kelly","Books",125]];
sourceSheet.setArray(0, 0, sourceData);
sourceSheet.tables.add('sourceData', 0, 0, 5, 4);
var layout = GC.Spread.Pivot.PivotTableLayoutType.compact;
var theme = GC.Spread.Pivot.PivotTableThemes.medium2;
sheet.pivotTables.add("pivotTable_1", 'sourceData', 1, 1, layout, theme, options);
var pivotTable = sheet.pivotTables.get("pivotTable_1");
sourceSheet.setValue(1,3,1000);
pivotTable.updateSource();
updateSource()
2. 详细数据的显示和获取
在数据透视表操作中,常常需要查看某一个汇总数据的详细数据,这对数据的检查非常重要,SpreadJS 在新版本中可以快速的显示详细数据,如下图所示:
同时也可以利用接口获取透视表内某一个汇总数的详细数据信息,接口如下:
function getPivotDetails(pivotItemInfo: GC.Spread.Pivot.IPivotItemInfo[])
@description get PivotTable Details
@param {Array} pivotItemInfo The pivot filter details information list
@param {string} pivotItemInfo.fieldName The name of field
@param {string} pivotItemInfo.fieldItem The name of field item
getPivotDetails(pivotItemInfo: GC.Spread.Pivot.IPivotItemInfo[])
3. 筛选与排序
筛选和排序也是透视表中常常涉及到的功能,此次SpreadJS新版本中同样对此做出了加强,如下图所示:
(筛选对话框)
(行&列筛选对话框)
(值内置筛选)
(值自定义条件筛选)
(标签筛选(字符串&数字))
(标签筛选(日期))
(标签自定义条件筛选(字符&数字))
以上的 UI 操作均可以通过相对应的 API 在代码中完成。
4. 条件格式化(透视表)
SpreadJS的数据透视表提供了给指定维度设置条件化规则的能力。无论数据透视表布局如何变化,条件化规则都仅应用在指定的维度。
5. 字段的组合和折叠
SpreadJS 的数据透视表提供了组合和折叠功能,这使得查看数据和查找所需数据更加容易。
6. GETPIVOTDATA 函数
SpreadJS 的 GETPIVOTDATA 函数能够查询数据透视表并根据数据透视表结构而不是单元格引用检索特定数据。
7. 值显示方式(Show Value As)
SpreadJS 数据透视表提供了将每个数据和其他数据进行比较的计算方法(值显示方式)。它帮助用户轻松了解到不同部分数据的百分比差异。
8. 视图管理
SpreadJS 数据透视表提供了管理视图的能力,它可以快速恢复在某个时刻保存下来的数据透视表的状态。
公式函数相关
SpreadJS 在持续不断地加入最新的公式与函数,方便最终用户使用这些公式和函数快速的构造各类数据表格及表单。
1. LET 函数增强
LET 函数为计算结果分配名称。 这允许在公式内存储中间表达式,值或定义的名称。 这些名称仅适用于 LET 函数内的范围。 与编程中的变量类似,LET 函数是通过 Excel 内置的公式语法完成的。
要使用 SpreadJS 的 LET 函数,您需要定义名称和与之关联的值,以及使用名称和值所组成的最终计算表达式。 您必须定义至少一个名称/值(一个变量),LET 函数最多支持 126 组这样的变量。
2. TIMEAGO 函数
使用这个函数可以计算起点到当前时间点的时间。
3. WEBSERVICE + FilterJSON 函数
WEBSERVICE 函数请求一个允许跨域资源共享(CORS)的网站,最终得到处理成字符串的返回值。
FILTERJSON 函数将一个有效的 json 字符串转化为一个值、一个对象或者一个可以拆分的对象数组。
您可以同时使用 FILTERJSON 函数以及 WEBSERVICE 函数从服务器上获取 json 对象并在 SpreadJS 中使用。
spread.options.allowDynamicArray = true; // allow dynamicArray
sheet.setFormula(0,0,'=FILTERJSON(WEBSERVICE("https://restcountries.eu/rest/v2/name/China"))'); // WEBSERVICE get the json data.
sheet.setFormula(0,1,'=PROPERTY(A1,"name")'); // "China"
形状相关
1. 支持超链接
SpreadJS 支持给形状添加超链接。
// 你可以使用以下代码给形状,线条或者组合形状添加超链接。
var heart = sheet.shapes.add("shape", GC.Spread.Sheets.Shapes.AutoShapeType.heart, 100, 50, 100, 150);
heart.hyperlink({url: "http://www.google.com", target: 0, tooltip: 'goes to google'});
var lineShape = sheet.shapes.addConnector("line", GC.Spread.Sheets.Shapes.ConnectorType.straight, 290, 20, 420, 170);
lineShape.hyperlink({url: "http://www.grapecity.com", target: 0, tooltip: 'goes to grapecity'});
var cube = sheet.shapes.add("cube", GC.Spread.Sheets.Shapes.AutoShapeType.cube, 100, 240, 150, 150);
var can = sheet.shapes.add("can", GC.Spread.Sheets.Shapes.AutoShapeType.can, 400, 240, 150, 150);
var shapes = [cube, can];
var groupShape = sheet.shapes.group(shapes);
groupShape.hyperlink({url: "https://www.grapecity.com/spreadjs/demos/", target: 0});
2. 填充效果
SpreadJS 形状提供渐变填充,图片填充以及纹理填充。
3. 区域快照
SpreadJS 提供区域快照功能,区域快照是在工作表中创建一种视觉引用的功能,区域快照创建一个引用区域的镜像图片。在数据引用区域的内容发生变化的同时,快照图片也会发生改变。
迷你图相关
SpreadJS 的迷你图(Sparkline)作为很重要的数据可视化手段,可以以灵活的方式多角度展示数据规律及特性,此次新版本中也加入了多个迷你图方面的更新。
1. 直方函数迷你图
(离散型)
(连续型)
2. KPI 函数(仪表盘)迷你图
SpreadJS 的 KPI 函数迷你图可以使你更轻松地在财务或者一般行政事务中衡量员工绩效。在下面的工作表中看一下不同员工的关键绩效。
3. IMAGE函数迷你图
使用 SpreadJS 的 IMAGE 函数可以插入一个图像到单元格中,图片数据源必须是 URL 或者 base64 字符串。
图表相关
1. 坐标轴增强
您可以自己定义图表的横纵坐标轴样式。在 SpreadJS 中使 用Javascript 代码自定义属性,例如颜色,线条样式,刻度线和刻度线标签位置,格式以及标题字体大小。
2. 自定义系列
SpreadJS 已支持以下图标元素的自定义:
- chartType
- axisGroup
- backColor
- backColorTransparency
- border
- name
- xValues
- yValues
- errorBars
- trendlines
- dataLabels
- bubbleSizes
- doughnutHoleSize
- gapWidth
- overlap
界面&布局相关
1. 标签页位置
在 SpreadJS 的新版本中,标签页的位置已经可以上、下、左、右四个位置指定摆放。
2. 底部冻结行跟随最后一行
3. Undo/Redo 栈
SpreadJS 支持获取撤销栈以及保留栈,同时您可以在 undoManager 中根据 maxSize 设置撤销栈以及保留栈的长度。
// 您可以通过 getRedoStack 方法获取到 SpreadJS 的保留栈。
var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
let redoStack = spread.undoManager().getRedoStack();
// 您可以通过 getUndoStack 方法获取到 SpreadJS 的撤销栈。
var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
let undoStack = spread.undoManager().getUndoStack();
// 您可以通过 maxSize 方法获取或者设置保留栈或者撤销栈的最大长度。
var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
let undoManager = spread.undoManager();
undoManager.maxSize(20); // set max size.
let maxSize = undoManager.maxSize(); // get max size.
4. 复制粘贴跳过隐藏区域
提供了一个选项来表明当粘贴时是否应该跳过不可见的区域。
// SpreadJS 通过设置工作簿的 pasteSkipInvisibleRange 配置(默认值是false)支持了粘贴时跳过不可见的区域。例如:
workbook.options.pasteSkipInvisibleRange = true;
不可见的例子:
- 筛选
- 组合
- 列宽为0或者行高为0
- 隐藏
行为相关
1. 撤销后,选中位置更新到上一次操作的位置
选中的位置会因为撤销操作而改变,从而让用户更直观的感受到撤销动作的执行。
V14.0
数据透视表插件:完美再现 Excel 强大的数据分析能力
作为一款功能布局与 Excel 高度类似的纯前端表格控件,SpreadJS 不但兼容了450 种以上的 Excel 公式、32 种图表和 18 种迷你图,还在此版本中正式加入了数据透视表插件。
(SpreadJS的数据透视表插件)
如上图所示,SpreadJS 的数据透视表插件已具备了 Excel 透视表的绝大部分功能,包括透视面板、透视表字段、筛选器、值字段设置、数据排序、分类汇总等。
通过 50 万行数据测试,SpreadJS 的数据透视表仍表现出极高的数据处理性能,所有操作在 527 毫秒内即可执行完毕。
在线表格编辑器(控件版):更易嵌入、秒级加载、灵活定制
在线表格编辑器作为 SpreadJS 的扩展插件,可轻松嵌入各类前端页面,内置开放的 API 和类 Excel 的 UI 设计元素,助力开发者在 Angular、Vue、React 等前端 JS 框架中,实现高性能的模板设计、在线编辑/填报和数据绑定等功能,并为最终用户带来高度类似 Excel 的使用体验。
在线表格编辑器(控件版)以 Dom 作为容器,通过前端组件的形式发布,可以在本地下载试用,无任何功能限制。
在线表格编辑器(控件版)具备的优势如下:
1. 应用方式更灵活
(从应用架构到组件化设计的转变)
2. 更易嵌入、移植
(从依赖第三方类库到零依赖)
3. 体积更小,秒级加载
(体积减少 70%,秒级完成加载)
4. 定制更容易,交互更丰富
(用声明式语法代替 HTML 源代码)
公式函数:支持迭代计算,加入XMatch & XLookup、LET 等新函数
SpreadJS 在当前版本中支持了迭代计算,即可通过一个递推公式反复校正设定的初始近似值,直至达到预定精度要求为止,具体实现如下所示:
(SpreadJS的迭代计算功能)
(迭代计算的实例演示)
除了迭代计算,SpreadJS 还在当前版本中加入了 XMatch & XLookup,以及 LET 函数:
(SpreadJS 的 XMatch & XLookup函数)
(SpreadJS 的 LET 函数)
点击此处,了解 XLOOKUP 函数
点击此处,了解 LET 函数
点击此处,了解 XMATCH 函数
点击此处,了解迭代计算
导入导出:支持渐进加载、HTML 导出
在当前版本中,SpreadJS 不仅可直接在浏览器中完成 Excel、CSV、JSON 等文件的导入导出、PDF 导出、打印及预览操作,还加入了渐进加载、HTML 导出等更多新功能。
(SpreadJS 的 HTML 导出功能)
单元格:支持渐进填充、多列选择
SpreadJS 已支持单元格渐进填充效果,可实现多列选择、行列头支持公式函数以及迷你图等功能。
(SpreadJS 的渐进填充效果)
(SpreadJS 的行列头支持公式及迷你图)
数据可视化:新增漏斗图,支持图表轴交叉属性
SpreadJS 在当前版本中新增了漏斗图类型,并支持图表模板填充、GapWidth & Overlap 调整、环形图的 holeSize 属性调整,以及图表轴交叉等新功能。
(SpreadJS 的漏斗图)
(SpreadJS 的图表模板填充效果)
(SpreadJS 的图表轴交叉功能)
(SpreadJS 的 GapWidth & Overlap 调整效果)
(SpreadJS 的 holeSize 属性调整效果)
V13.0 Update2
在学习指南中增加 React、Vue、Angular 框架示例代码
为了让用户更方便的在框架中嵌入 SpreadJS 表格控件,本次更新,在 SpreadJS 学习指南的所有示例中,增加了三大框架的对应代码,如下图所示:
图表系列数据标签定制
在 SpreadJS 中,可以根据样式自定义数据标签(针对图表中的系列),以使其与应用程序的外观和主题更加匹配。
可定制的选项包括:
- 分隔器
- 背景色
- BackColor 透明度
- 边框颜色
- 边框宽度
- BorderColor 透明度
在系列的 dataLabels 选项中设置的示例代码如下:
var series = chart.series().get(1);
series.dataLabels= {
showValue : false,
showSeriesName: true,
showCategoryName: false,
showPercentage:false,
position: GC.Spread.Sheets.Charts.DataLabelPosition.Center,
color: "white",
backColor: "red",
backColorTransparency: 0.25,
borderColor: "green",
borderWidth: 2
};
chart.series().set(1, series);
结果如下图:
保留图表导入标志
使用标志,用户可以保留 SpreadJS 当前未支持的 Excel 图表类型,以便于从 SpreadJS 中导出。
启用该标志,SpreadJS 当前未支持的图表类型将提示“不支持的图表类型”。当然,也可以根据业务需要,修改提示内容,如直接提示不支持的特定图表类型:
sheet.charts.preserveUnsupportedChart(true, function(chart, chartHost){
var paintElement= document.createElement('div');
var type= chart.chartType();
paintElement.innerHTML = 'Unsupported Chart Type:' + type;
chartHost.appendChild(paintElement);
})
按组排序
SpreadJS 可以在排序时按行和列分组。
目前,SpreadJS 支持的排序方式不仅仅为平面排序,而是在排序时,对组中的项目同样执行递归排序,这保证了每个组的内容和整个工作表,均符合整体排序规则,如下所示:
未排序:
排序后:
要想在范围排序中使用组排序,只需在 RangeSorting 事件中设置即可:
spread.bind(GC.Spread.Sheets.Events.RangeSorting, function (e, info) {
info.groupSort = GC.Spread.Sheets.GroupSort.full;
});
排序忽略隐藏的行
在对具有隐藏行的数据进行排序时,SpreadJS 的表现如 Excel 一样,会忽略隐藏行,不将其包括在排序内:
未排序:
排序后:
在上述情况下,A2:A5 被隐藏,这部分数据将不参与排序。
通过在排序时将 ignoreHidden 选项设置为 true 启用此行为,如在 sortRange 方法或在 RangeSorting 事件中设置:
sheet.sortRange(0, 0, 10, 1, true, [{index:0, ascending: true}], {ignoreHidden: false});
sheet.bind(GC.Spread.Sheets.Events.RangeSorting, function (e, info) {
info.ignoreHidden = true;
});
允许形状旋转
SpreadJS 通过调用 allowResize 和 allowMove 接口,可以在应用程序中启用或禁用调整大小或移动形状设置。本次更新,SpreadJS 又添加了用于控制形状旋转的 API —— allowRotate:
var heart = sheet.shapes.add("Shape1", GC.Spread.Sheets.Shapes.AutoShapeType.heart, 100, 60, 200, 160);
heart.allowRotate(false);
显示/隐藏形状句柄
句柄(Handle)是形状对象的标识符,可用于调整形状大小、旋转、显示/隐藏。
通过将 showHandle 函数设置为 false,可以隐藏句柄:
var heart = sheet.shapes.add("Shape1", GC.Spread.Sheets.Shapes.AutoShapeType.heart, 100, 60, 200, 160);
heart.showHandle(false);
请注意:如果将形状的 allowResize 或 allowRotate 属性设置为 true,则用户仍能够与该形状进行交互,他们只是看不到句柄。
查看放大、控制缩放
使用 ViewZooming 和 ViewZoomed 事件干预缩放过程,可以更改或扩展 SpreadJS 的缩放功能,这样可以确保仅将表单缩放至某个特定比例。
这些事件就像其他工作表事件一样被绑定在工作表上:
activeSheet.bind(GC.Spread.Sheets.Events.ViewZooming, function (e, info) {
if (info.newZoomFactor >= 2) {
info.newZoomFactor = 2;
}});
activeSheet.bind(GC.Spread.Sheets.Events.ViewZoomed, function (e, info) {
alert("Zoom (" + info.newZoomFactor + ")");
});
ClearPending 按范围变化
现在,clearPendingChanges API 将作为可选参数用于 SpreadJS 的单元格范围。
这个功能可以清除当前工作表中指定范围内的所有脏数据,最主要的应用场景是:在单元格发生更改后,在不使用撤消功能的情况下,直接还原已修改的操作。
RangeChanged 事件支持 isUndo 属性
SpreadJS 的 RangeChanged 事件已支持 isUndo 属性,开发人员可以借此区分出范围内的正常操作和撤消操作,可与事件(如 CellChanged、RowChanged 等)相匹配。
使用此功能,无需代码更改,只需更改执行范围的事件即可。
V13.0
追求极致的单元格特性
单元格状态:Cell States
在 SpreadJS V13.0 中,单元格包含以下五种状态,分别是:Normal(正常状态)、Hover(浮动状态)、Invalid(保护状态)、ReadOnly(只读状态)和 Edit(编辑状态)。用户不仅可以更为精确地获取单元格项目和当前状态,还可以通过数据绑定、判断单元格状态等,快速定位、查找、编辑、锁定、筛选单元格的值。
新单元格类型:Checkbox & RadioBox List
在 SpreadJS V13.0 中,新增了两种单元格类型:选择框和单选列表。
新单元格类型: Cell Dropdown
除了选择框和单选列表,在 SpreadJS V13.0 中,还新增了多种下拉列表单元格类型:‘colorpicker’ | 'calendar' | 'time' | 'calculator' | 'month' | 'list' | 'slider' | 'workflow'(颜色拾取器、日程表、时间、日历、月份、列表、切片器、工作流等)
新单元格按钮: Cell button
在 SpreadJS V13.0 中,用户可以使用一种新的单元格按钮:Cell button(单元格按钮类型)。
表格 API 增强:表格样式按需修改、高度开放自定制
用户使用 SpreadJS 创建表单和管理数据,将获得前所未有的操纵体验。通过调用 SpreadJS 提供的 API 接口,用户可以在运行时和设计时两种状态下,完成以下操作:
- 添加行/添加列
- 删除行/删除列
- 在表格中获取插入行、删除行、脏数据
- 将 Excel 表转换为数据范围
表格 UI 交互增强:全方位分析表格数据,顺利完成前后端交互
表格数据交互,作为用户界面设计中不容忽视的重要组成部分,其目的是通过构造结构化数据,让用户更易读取、更易比较。
SpreadJS 作为一款纯前端电子表格控件,充分考虑到了这一应用场景,并全面增强了表格数据交互分析能力,其功能具体体现在:
- 自动扩展 Auto Expand:input / copy-cut & paste / dragfill / dragdrop
- 调整大小手柄 Resize Handler
- 滚动时表头显示 Show Header when Scroll
- 更方便的表格选择 Selection
- 更智能的表格导航 Navigation
- 滚动时在列标题上显示表标题
表格数据绑定增强:支持更多列属性字段
SpreadJS V13.0 的表格数据绑定将支持更多列属性字段,这样做的好处是:用户在进行表格数据绑定时,更获得比此前更丰富的属性支持,如格式化、单元格类型、值(值转换函数)等。
SpreadJS 工作簿数据绑定支持以下属性:
- 名称
- 格式化
- 单元格类型
- 值(值转换函数)
- 宽度
- 可见
- 可调整大小
- 分页符
- 显示名称
SpreadJS 表格数据绑定支持以下属性:
- 名称
- dataField
- 格式化
- 单元格类型
- 值(值转换函数)
图表增强:支持更多图表图例属性、错误提示栏、自定义边框、对数轴、趋势线等
SpreadJS V13.0 的图表功能得到大幅提升,不但支持更多的图表图例属性,如自定义位置、字体颜色、大小等,还新增了多种图表功能,如错误提示栏、自定义边框、对数轴、趋势线、悬停动画、符号等。
图表图例属性:支持字体颜色、大小和更多字体
在 SpreadJS V13.0 中,通过更改字体颜色、大小和字体的能力,开发人员能够自行匹配图表图例与应用程序的整体外观样式,而无需额外调整,这样做的好处是:可以为仪表板中的所有组件,创建统一的外观样式。如下是为图例添加颜色、fontFamily、fontSize设置:
新图表属性:错误提示栏
在 SpreadJS V13.0 中,使用图表显示数据时,可以显示每个点的误差范围。借助此项新功能,您可以更改图表中显示的错误类型、样式和数量,从而一目了然的观测出图表数据的误差范围与标准偏差。
新图表属性:自定义边框
某些应用场景中,在图表周围添加边框以将图表与应用程序的其余部分区分开非常有用。借助此项新功能,开发人员可以自定义图表的边框,包括颜色、宽度、透明度和破折号样式,这样做的好处是:使开发人员可以将图表设计与应用程序的其他部分进行匹配。
新图表属性:对数轴
在绘制值差异巨大的数据时,我们很难以任何可读方式显示。但在 SpreadJS V13.0 中,借助图表增强功能,图表(不包括直方图、箱线图和瀑布图)可以支持值轴的对数刻度。这样在比较差异巨大的数据时,可以以更加易读的方式显示图表数据:
新图表属性:趋势线
在预测数据趋势时,我们都希望能直观地查看数据趋势变化。通过 SpreadJS 新的图表增强功能,为柱形图、条形图、折线图、散点图和面积图添加了趋势线辅助。开发人员可以为图表创建 6 种不同类型的趋势线,如线性、指数和多项式。使用趋势线可以更轻松地根据数据(例如销售变化趋势)预测未来价值。
如下分别是 SpreadJS 的线性趋势线、指数趋势线和多项式趋势线:
支持动态数组:大幅简化计算公式,提高公式运算效率
Excel 2019 推出了动态数组函数,用于简化复杂计算公式:使用动态数组,返回值将自动“输出”到相邻单元格中(未使用的)。用户只需编写一个简单的公式,而不是编写复杂的数组公式就可解决多单元格问题。
在 SpreadJS V13.0 中,也将支持动态数组功能。
SpreadJS 实现的动态数组效果如下:
支持公式追踪:可快速查看公式中引用的单元格数据
在使用公式时,有时需要了解公式中引用了哪些单元格的数据,这就涉及到公式追踪的操作。在 SpreadJS V13.0 中,用户可以利用公式追踪 API,快速且方便的构建数据关系拓扑图,以便进行审查、数据钻取、可视化显示等。
新增事件:ColumnChangingEvent & RowChangingEvent
当用户对工作表执行 Delete/Insert/Hide/Unhide 等操作时,如果希望在执行操作之前触发一个事件,该事件可以用来确认对象的数据,并控制该操作是否继续执行。此时,新增的这两个事件就可以派上用场。
行为增强:Advanced Resize
在 SpreadJS V13.0 中,Advanced Resize 添加了一种调整大小的方法 onlyNextTo 。它与一般调整大小的方式不同,使用 onlyNextTo 调整大小只会改变当前列/行和下一个可见列/行的大小。
自动合并:自动合并相邻单元格的相同文本
SpreadJS 支持自动合并。
如果相邻单元格的文本内容相同并且不在任何范围内,它们将自动合并。SpreadJS 的自动合并可以应用于任何指定范围,包括所选区域、行、列和整个工作表。
例如,原始数据如下:
在行方向自动合并后:
在列方向自动合并后:
区域模板:将工作表的范围指定为模板,并使用该模板绘制相似区域
SpreadJS 为客户提供了一个范围单元格类型。这种新的单元格类型允许用户将工作表的范围指定为模板,然后使用该范围来绘制具有单元格值的多个相似区域。
将样式模板应用于单元格后,可以将 RangeTemplate 设置为单元格样式的单元格类型。RangeTemplate 将使用单元格值作为数据源,解析指定范围的 bindingPath。
这样做的好处是:
- 客户可以通过更改模板来更改批处理片段显示模式。
- 客户可以轻松显示具有相同结构的一组数据。
- 客户可以在任何地方创建模板工作表,然后创建 JSON / fromJSON,并设置工作表范围以便轻松复用。
V12.0 Update2
打印增强(Print Enhancements)
SpreadJS 中的打印功能已通过新事件、打印预览行、页面打印信息和背景水印图像得到了全面增强。
- 使用新的 BeforePrint 事件,用户可以在启动打印程序后取消打印
- 新增打印预览线,通过在工作簿中绘制的虚线,可以显示打印时页面的结束位置
- 打印信息现在包括用于显示每页单元格打印范围的 API
- 可以在打印页面时添加背景水印图像
拖拽增强(Drag-Fill Enhancements)
SpreadJS 的拖动填充功能得到了增强,支持时间日期选择、包含数字的字符串以及自定义填充列表。
- 通过拖动,单元格将自动按日期规则进行填充
- 在开头或结尾有数字的字符串可以按顺序正确填充
- 使用自定义列表,开发人员可以创建一组特定的数据来拖动填充一系列单元格
多语言包(Language Packages)
SpreadJS 中的计算引擎添加了 18 个新的语言包,包括了针对特定语言环境下,电子表格结构化所引用的本地化函数名称以及语法。
支持的语言包如下所示:
- England/english ('en')(default)
- China/Chinese ('zh')
- Japan/Japanese ('ja')
- korea/Korean ('ko')
- French/français ('fr')
- Dutch/Nederlands ('nl')
- German/Deutsch ('de')
- ……
自定义本地化(Custom Localization)
通过自定义本地化资源,用户可以使用特定的语言,以定义 SpreadJS 实例中显示的属性和字母。默认情况下,SpreadJS 中内置语言是中文、英语、日语和韩语,但借助“自定义本地化”功能,开发人员可以自由地控制语言显示风格。
图表符号增强(Chart Symbol Enhancements)
SpreadJS V12.2 增加了对图表符号的支持,允许开发人员选择显示符号的类型来代替 Line、Scatter 和 Radar 等图表的标记。标记可以更改为圆形、菱形、正方形和三角形,如下图所示:
深度集成 Vue、Angular、React 框架(3rd Party Library Support Enhancements)
不仅限于兼容性支持,SpreadJS 还可深度集成于前端开发框架(Vue、React、Angular)中,为用户提供更多功能。
V12.0 Update1
运行时的新特性
双击自动填充(Double Click Auto Fill)
数据填充已经是 SpreadJS 已有功能之一,在 V12.1 中 SpreadJS 新增了当最终用户双击填充光标时,自动填充数据的功能。
数据验证高亮样式(Data Validation Highlight Style)
SpreadJS V12.1 中新增了全新的数据验证样式和不同的单元格突出显示类型,包括 circle,dogear 和 icon。
数字与日期显示增强(Number and Date Display Enhancement)
SpreadJS V12.1 中的显示数字和日期的方式得到了增强。即,当数字或日期太长而无法容纳在单元格中时,它们将被一种更接近 Excel 的方式显示,例如下图:
剪贴板增强(Clipboard Paste Enhancement)
SpreadJS V12.1 新增了两种类型的剪贴板粘贴方式:
- 允许用户仅复制和粘贴值和格式
- 允许用户仅复制和粘贴公式和格式
全面支持 Angular 7(Support Angular 7)
SpreadJS 已经通过了最新版本 Angular 7 的兼容测试,包括对所有 SpreadJS 属性和事件以及 Angular CLI 的支持。
设计器的新特性
状态条(Status Bar)
SpreadJS V12.1 新增了类似 Excel 那样的状态栏(Status Bar)。该状态栏除了显示有关所选单元格的信息外,还添加了上下文菜单,并允许用户自定义以满足其特定需求。
分类汇总(Subtotal Function)
SpreadJS V12.1 将类似 Excel 的分类汇总功能添加到 Spread 设计器中,最终用户可以在 SpreadJS 中以类似 Excel 的分类方式,对数据进行汇总。
数据验证高亮样式(Data Validation Highlight Style)
SpreadJS V12.1 允许最终用户在设计器中设定数据验证时使用的高亮样式。
剪贴板增强(Clipboard Paste Enhancement)
SpreadJS V12.1 新增的剪贴板粘贴选项已在 Spread 设计器的功能区菜单和上下文菜单中添加。
空白表格样式(Blank Table Style)
SpreadJS V12.1 现在可以选择空白表格样式,用于轻松的去除此前应用的表格样式。
V12.0
形状(Shapes):在 SpreadJS 中根据需要添加内置或自定以的形状
SpreadJS v12 已经实现了诸多类Excel的内置形状,如线条、矩形、箭头、流程图,可以为您的前端界面添加更多的细节展现和可视化效果,并且这些内置的形状都可以无缝的进行导入导出。
(图:SpreadJS v12 内置形状)
您还可以通过 SpreadJS v12 提供的新能力来自定义您所需要的形状,并且所有的形状属性均可以设置为公式,这就意味着,您的形状可以随着数据的变化而变化,从而为您的前端界面效果带来极大的提升。下面的例子就是利用自定形状来实现一个保险理赔界面的例子
(图:SpreadJS v12 自定义形状 - 保险理赔实例)
富文本格式(RichText Formatting):在同一个单元格中包含不同的文字格式
通过丰富的文本格式,用户现在可以为单个单元格添加粗体,斜体,字体和所有基本格式!
(图:SpreadJS v12 富文本格式)
新增图表类型:雷达图(Radar),旭日图(Sunburst)和树图(Treemap)
这些新图表(也可在Excel中使用)具有完整的 SpreadJS 在线表格编辑器支持,您可以无缝导入和导出包含这些图表的 Excel 文件。
雷达图(Radar)显示具有任意数量变量的多变量观测值; 它通常用于表现个性特征。
(图:SpreadJS v12 新增雷达图(Radar))
旭日图(Sunburst)展示了从根节点(中心)向外到较低层次结构的分层数据。内圆的一段是外圆的分段的父代,它位于父代的角度扫描范围内。 旭日图非常适合展示如何将一个类别或级别(环)分解为其所占的大致比例。
在下面的例子中,世界人口用大陆、区域、国家来表示,并使用颜色进行区分。这样一来,人口的分布立即变得清晰起来:
(图:SpreadJS v12 新增旭日图(Sunburst))
树图(Treemap)显示结合相对数量的分层信息。如果您的应用程序存在空间限制,并且您需要使用工作表中的表中定义的众多实体绘制数千个数据点,则它们特别有用。
以下是用树图表示的世界人口图表:
(图:SpreadJS v12 新增树图(Treemap))
新增迷你图(Sparkline)类型:条形码(Barcode)
通过设置迷你图类型,您可以轻松的在单元格中呈现您需要的条形码,SpreadJS v12 已经支持 QRCode, EAN-13, EAN-8, Codabar, Code39, Code93, Code128, GS1_128, Code49, PDF417, DataMatrix
(图:SpreadJS v12 新增条形码支持(Barcode))
图表动画效果
借助SpreadJS为柱状图,条形图,折线图和饼图创建新的无缝加载和更新动画,让您的仪表板真正闪耀起来。
(图:SpreadJS v12 新增图表动画)
类Excel的精准选择
Excel 的新功能允许用户先选择一个范围,然后取消选择特定单元格。 SpreadJS 已添加此功能。
(图:SpreadJS v12 新增类Excel精确选择)
V11.0 Update2
撤销/重做
SpreadJS 现在支持与 React和 Vue框架一起使用,包括特定标签及使两者结合使用的元素和事件。随着 SpreadJS 在 NPM 上发布,您可以使用传统的 HTML 或 NPM包将其与框架一起使用。
SpreadJS 可作为 NPM 包公开发布
SpreadJS 现已作为 NPM 包公开发布。该软件包可以在您的应用程序中下载和使用,无需手动重新下载和替换即可轻松更新软件包。
要安装 SpreadJS NPM 软件包,只需使用命令行安装它:
npminstall@grapecity/spread-sheets
您还可以在 Visual Studio 2017 中使用程序包管理器并搜索“grapecity”。 了解更多。
使用 CSS 自定义分组界面
您现在可以使用 CSS 类自定义分组界面的外观,包括:图标,线条,分组点和轮廓区域。
工作表区域偏移功能
工作表区域现在有一个偏移量,可以解决边框未显示的问题。在 之前的 SpreadJS 版本中,如果行头/列头被隐藏,则边框不会显示在最顶行和最左列。工作表区域偏移功能现在完美地解决了这个问题。 了解更多。
其他功能增强
本次发布版本也包括其他功能增强。关于发布更新的更多细节, 请参考发布说明。
V11.0 Update1
撤销/重做
用户可以使用 startTransaction/endTransaction/undoTransaction 实现支持撤销/重做的命令。如下代码示例。
单元格/范围对角线
新增对单元格或范围设置对角线边框样式的功能,并支持保存到 JSON/Excel/PDF 文件或打印输出。
支持垂直方向显示文本
行头/列头/单元格新增对垂直方向文本的显示支持,并支持对齐方式、自适应、折行和缩进等组合条件下的不同设置。
增强筛选
在筛选框中,日期类型数据和分组列新增树状层级过滤的功能。
在筛选框中,新增文本筛选、数字筛选、日期筛选,颜色筛选。
颜色排序
新增按照颜色进行排序。
条件格式支持自定义 IconSet
条件格式中,新增支持自定义图标集合。
其他功能增强
本次发布版本也包括其他功能增强。关于发布更新的更多细节, 请参考发布说明。
V11.0
SpreadJS 表格
图表功能
新增对图表的支持。支持图表使得 SpreadJS 在数据可视化方面有长足的进步,能够更好的将抽象数据以直观的形式来展现。支持组合图表和对图表的各个部分进行定制。支持导入和导出含图表的 Excel 文件。
支持的图表类型包括:柱状图、折线图、饼图或圆环图、条形图、面积图、散点图、股价图、组合图表。
纯前端 PDF 导出
新增纯前端 PDF 导出功能。导出 PDF 文件不再依赖于 Windows 服务器。无论是 .Net 用户还是 Java 用户,无论使用的框架类型和后台服务器操作系统配置,Web 开发者都可以使用该功能,快速简单的实现 PDF 导出和其文件相关设置。
列分组
新增列分组功能。通过单元格缩进呈现树状结构,并且支持扩展和折叠操作。
右键菜单
新增内置右键菜单功能。用户可以像操作 Excel 右键菜单那样,操作更加方便。其风格跟随主题风格自动变化。
Excel 2013~2016 的新函数
新增 60 个 Excel 2013~2016 的新增函数,支持函数总量超过 400 种。新增函数涵盖数学与三角函数、统计、文本、工程、日期与时间、逻辑、财务、信息、查找和引用及 Web 等各个领域。
拖拽合并
新增拖拽合并功能,用户可以使用拖拽轻松实现单元格的合并效果。如下图这样点击右侧红框部分进行横向合并。
同理,点击下方的红框部分拖拽实现纵向合并。
其他功能增强
本次发布版本也包括其他功能增强。关于发布更新的更多细节, 请参考发布说明。
V10.0 Update2
SpreadJS 表格
支持Angular2
支持韩语
设计器界面支持产品新功能
- 支持单元格的内边距和标签(Label)设置
- 支持在工作表/行/列/单元格上设置标签属性(Tag)
- 支持剪切板设置
- 支持范围选择模式
- 支持年度和月度迷你图
SpreadJS 视图
设计器全面汉化
其他功能增强
本次发布版本也包括其他功能增强。关于发布更新的更多细节, 请参考发布说明。
V10.0
原有 SpreadJS 产品正式更名为 SpreadJS 表格(Spread.Sheets)。伴随着 SpreadJS 新版本的发布,我们推出了去全新的 SpreadJS 视图(Spread.Views)并正式加入SpreadJS产品包(SpreadJS 表格+ SpradJS 视图)中。
SpreadJS 视图
全新控件 SpreadJS 视图(Spread.Views)
SpreadJS 视图为用户提供了灵活多变的数据布局和呈现,例如:树状表格,甘特图,网格,新闻提要,看板,时间轴等等。不仅如此,它还继承了SpreadJS一贯强大的公式计算能力,以及卓越的性能。
了解更多信息,请访问 SpreadJS 视图官网。
SpreadJS 表格
Excel 纯前端导入导出
SpreadJS 表格在新版本中添加了纯前端Excel导入导出功能。因此导入导出 Excel 文件不再必须依赖于 Windows 服务器。无论是.Net用户还是Java用户,无论使用的框架类型和后台服务器操作系统,Web开发者都可以快速简单的实现Excel的导入导出。它支持在 XLSX 文件类型和 SpreadJS 表格支持的 JSON 格式之间转换。
跨平台设计器
SpreadJS 表格在 V10 中提供了跨平台设计器,无论 Windows, MacOS, 还是 Linux 操作系统,您都可以像使用 Excel 一样,轻松使用其来设计电子表格。
增强拷贝粘贴
SpreadJS 表格和Excel之间,现在可以无缝拷贝样式、合并单元格、多个非连续单元格、头部等。当目标范围不足以粘贴被拷贝的单元格时,将会自动扩充行列以满足呈现需求。另外,增强了拷贝粘贴相关的事件,添加关于拷贝粘贴数据的更多信息。
单元格内边距和标签
单元格的内边距和标签属性可以设计完美的电子表单布局。单元格水印作为动态背景,辅助用户更加快速容易地填充表单。
增强范围选择
SpreadJS 表格增强了范围选择,包括来自不同表单和不同区域的选择。另外,您能在文本框中编辑选择,手动更新或者输出引用。这种方法提供了更易用的方式进行范围选择和更新所选范围。
年度和月度迷你图
SpreadJS 表格在单个函数调用中,增加了漂亮的年度和月度迷你图,它允许在单个单元格中总结并呈现大量数据。
其他功能增强
本次发布版本包括其他功能增强。关于发布更新的更多细节,请参考 发布说明。
V9.0 Update1
SpreadJS 产品包独立
SpreadJS 不再包含在Spread Studio套包中。
SpreadJS 添加新成员 Spread.Views
Spread.Views 控件帮助您快速创建各类流行的数据布局,比如表格、日历、格子、卡片、时间轴等等。
目前仅提供社区测试试用版,将在 V10 新版本中正式发布,敬请期待!
想了解本次发布版本的新增接口和问题修复,更多细节请参考 发布说明。
V9.0
预览和打印数据视图
在页面上添加打印按钮,可以直接打开标准的浏览器打印窗口。SpreadJS满足您的各种打印细节设置需求:自适应文本高宽打印、网格线、边框、页眉、页脚、边距、页面自适应、页面尺寸、插入分页符等等。导入或导出Excel文件之后,打印设置依然可以保留。
表格切片器
通过类似Excel的表格切片器过滤和分析数据。您可以以两种方式使用它。一种是类似Excel的按钮切片器,其提供一组便利的过滤器。另一种是使用切片器工具集添加便利的工具,比如按钮、复选框和滑动条等,允许您通过值、日期范围和数字范围切分数据。第一种方式提供了经典的Excel体验,第二种方式提供了更多的您期待的来自稳健数据网格的互动体验。您也可以使用柱形图作为切片工具以提供向下钻取功能。SpreadJS切片器支持单独使用。
汉化
SpreadJS 支持汉子和中文本地化界面。菜单、提示和公式等部分全面本地化。
注:SpreadJS本地化只包含SoreadJS 产品本身,不包含设计器和ExcelI/O部分。
Excel 导入/导出
老版本中,SpreadJS 的 Excel 导入/导出功能要求安装在网络服务器上。而现在,其作为一个组件,Excel I/O 允许您免费再分发,并提供公共接口方便您调用。
固定位置浮动对象
浮动对象目前提供固定位置属性,您可以添加图标、图片或者其他不需要用户滚屏浏览表格的对象。
设计器增强
- 增强粘贴:可以选择粘贴所有、粘贴值、粘贴格式、或者粘贴公式。
- 标签颜色:在设计器界面上可以更改表单标签颜色。
类 Excel行为的增强
- 隐藏行列指示器
- 禁止表单导航
- 滚动时忽略隐藏行列
- 锁定单元格不允许拷贝
- 保护工作表和单元格