本帖最后由 爱迪生 于 2022-6-17 17:48 编辑
当一个工作表中内容很多,并且我们只需打印其中某一部分内容时,如果需要打印的内容是不断增加的,这时则会用到设置动态打印区域,Spreadjs支持通过添加自定义名称“Print_Area”作为打印区域。 使用“Print_Area”有3个优点: - 用户可以在公式中使用“Print_Area”。
- 当用户插入/删除行/列时,打印区域可以更新。
- 当用户将“Print_Area”设置为公式时,打印区域可以自动更新。
一.添加自定义名称“Print_Area”作为打印区域: 1.现在打印区域为自定义名称“Print_Area” - var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
- var sheet = spread.getActiveSheet();
- sheet.suspendPaint();
- var demoData = [
- ["Region", "Sales Rep", "Product", "Units"],
- ["East", "Tom", "Apple", 6380],
- ["West", "Fred", "Grape", 5619],
- ["North ", "Amy", "Pear", 4565],
- ["South", "Sal", "Banana", 5323],
- ["East", "Fritz", "Apple", 4394],
- ["West", "Sravan", "Grape", 7195],
- ["North ", "Xi", "Pear", 5231],
- ["South", "Hector", "Banana", 2427],
- ["East", "Tom", "Banana", 4213],
- ["West", "Fred", "Pear", 3239],
- ["North ", "Amy", "Grape", 6420],
- ["South", "Sal", "Apple", 1310],
- ["East", "Fritz", "Banana", 6274],
- ["West", "Sravan", "Pear", 4894],
- ["North ", "Xi", "Grape", 7580],
- ["South", "Hector", "Apple", 9814]
- ];
-
- sheet.setArray(2, 1, demoData);
- sheet.resumePaint();
- sheet.addCustomName("Print_Area", "=B3:E19");
- document.getElementById("print").addEventListener("click", () => {
- spread.print();
- });
复制代码2.rowStart/rowEnd/columnStart/columnEnd函数根据自定义名称取值。 二.使用场景: 1.显示要打印的行数输入公式,例如=IFERROR(ROWS(Print_Area),"none"),用户可以显示要打印的行数,如果不存在则显示“none”。 2.使用公式自动更新打印区域添加一个带有工作表范围的自定义名称“Print_Area”,并将其设置为=IF(Sheet1!$A$1,Sheet1!$B$1: $C$5,Sheet1!$D$5: $F$8) 。 如果 Sheet1!$A$1 是真值,则打印区域为 Sheet1!$B$1: $C$5 ,否则为 Sheet1!$D$5: $F$8。 三.策略1、支持自定义名称“Print_Area”与打印区域交互: - 用户设置打印区域后,名称管理器添加一个具有相同引用的“Print_Area”,用户可以手动添加“Print_Area”来设置打印区域。
- 如果“Print_Area”被删除、重命名,则初始化打印区域(获取rowStart/rowEnd/columnStart/columnEnd时返回-1)。
- “Print_Area”在工作表范围和引用工作表范围时有效。如果无效,它只是一个自定义名称,而不是打印区域。
- 用户可以在工作簿范围内添加自定义名称“Print_Area”,但不影响打印区域。
- 如果插件打印未导入,“Print_Area”只是一个自定义名称。
- 即使引用跨页,printInfo 的 rowStart/rowEnd/columnStart/columnEnd 也可用。
2.打印区域是自定义名称,因此: - 如果是绝对单元格引用,当引用发生变化时,如插入/删除行/列或直接修改公式,更新打印区域。
- 如果是相对单元格引用,则在插入/删除行/列时打印区域不会更新。
- “Print_Area”与文化无关。
- “Print_Area”不区分大小写。
3.而作为内置自定义名称,“Print_Area”还是有一些区别的: - 导出到 XLSX 后,名称“Print_Area”转移到“_xlnm.Print_Area”
4.如何从“Print_Area”获取 rowStart/rowEnd/columnStart/columnEnd- 如果 printInfo 没有工作表引用,则从 propertyDict 返回值
- 尝试使用工作表范围获取自定义名称“Print_Area”,如果不存在,则返回 -1
- 由于历史原因,如果 customName "Print_Area" 的公式等于 rowStart/rowEnd/columnStart/columnEnd 生成的公式,则从 propertyDict 返回值。
- 评估自定义名称“Print_Area”,如果结果是无效范围,则返回 -1
- 根据范围返回值
5.如何使用 rowStart/rowEnd/columnStart/columnEnd 设置“Print_Area”- 从自定义名称“Print_Area”获取当前打印范围
- 如果未设置“Print_Area”或未设置属性的方向:
- 如果设置属性为 rowStart/columnStart,则将 rowEnd/columnEnd 设置为 rowCount/columnCount。
- 如果设置属性为 rowEnd/columnEnd,则将 rowStart/columnStart 设置为 0。
- 保持另一个方向的值。
- 如果已经设置了“Print_Area”并且对应方向的值已经存在,假设我们从“Print_Area”获取开始和结束(可能是rowStart,rowEnd或columnStart/columnEnd)
- 如果设置属性是 rowStart/columnStart,
- 如果 rowStart/columnStart 不大于end,则更新start。
- 如果 rowStart/columnStart 大于end,则设置后的范围是从end到设置值。
- 如果设置属性是 rowEnd/columnEnd
- 如果 rowEnd/columnEnd 不小于start,则更新end。
- 如果 rowEnd/columnEnd 小于start,则设置后的范围是从设置值到start。
四.ToJSON/FromJSONPrintInfo 不会导出 rowStart/rowEnd/columnStart/columnEnd,除非将 printInfo 设置为另一个工作表的 printInfo,例如 sheet.printInfo(sheet2.printInfo())。 如果 rowStart/rowEnd/columnStart/columnEnd 不等于 -1,则自定义名称“Print_Area”将在 FromJSON 时更新。 |