爱迪生 发表于 2022-6-17 17:13:05

【SpreadJS V15.1 新特性介绍】 当行或列变动时自动更新指定打印区域

本帖最后由 爱迪生 于 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 时更新。

孙志强 发表于 2022-9-1 20:00:41

请问下,不想自动更新打印区域时,应该如何设置?

Clark.Pan 发表于 2022-9-5 18:23:27

打印设置rowStart/rowEnd/columnStart/columnEnd设置成固定行列即可。
如果整页打印那么设置成-1
页: [1]
查看完整版本: 【SpreadJS V15.1 新特性介绍】 当行或列变动时自动更新指定打印区域