找回密码
 立即注册

QQ登录

只需一步,快速开始

爱迪生

超级版主

55

主题

65

帖子

1400

积分

超级版主

Rank: 8Rank: 8

积分
1400
爱迪生
超级版主   /  发表于:2022-6-17 17:13  /   查看:2502  /  回复:2
本帖最后由 爱迪生 于 2022-6-17 17:48 编辑

当一个工作表中内容很多,并且我们只需打印其中某一部分内容时,如果需要打印的内容是不断增加的,这时则会用到设置动态打印区域,Spreadjs支持通过
添加自定义名称“Print_Area”作为打印区域。
使用“Print_Area”有3个优点:
  • 用户可以在公式中使用“Print_Area”。
  • 当用户插入/删除行/列时,打印区域可以更新。
  • 当用户将“Print_Area”设置为公式时,打印区域可以自动更新。
一.添加自定义名称“Print_Area”作为打印区域:
1.现在打印区域为自定义名称“Print_Area”
  1. var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
  2.         var sheet = spread.getActiveSheet();

  3.         sheet.suspendPaint();

  4.         var demoData = [
  5.             ["Region", "Sales Rep", "Product", "Units"],
  6.             ["East", "Tom", "Apple", 6380],
  7.             ["West", "Fred", "Grape", 5619],
  8.             ["North ", "Amy", "Pear", 4565],
  9.             ["South", "Sal", "Banana", 5323],
  10.             ["East", "Fritz", "Apple", 4394],
  11.             ["West", "Sravan", "Grape", 7195],
  12.             ["North ", "Xi", "Pear", 5231],
  13.             ["South", "Hector", "Banana", 2427],
  14.             ["East", "Tom", "Banana", 4213],
  15.             ["West", "Fred", "Pear", 3239],
  16.             ["North ", "Amy", "Grape", 6420],
  17.             ["South", "Sal", "Apple", 1310],
  18.             ["East", "Fritz", "Banana", 6274],
  19.             ["West", "Sravan", "Pear", 4894],
  20.             ["North ", "Xi", "Grape", 7580],
  21.             ["South", "Hector", "Apple", 9814]
  22.         ];
  23.         
  24.         sheet.setArray(2, 1, demoData);
  25.         sheet.resumePaint();
  26.         sheet.addCustomName("Print_Area", "=B3:E19");
  27.         document.getElementById("print").addEventListener("click", () => {
  28.             spread.print();
  29.         });
复制代码
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/FromJSON
PrintInfo 不会导出 rowStart/rowEnd/columnStart/columnEnd,除非将 printInfo 设置为另一个工作表的 printInfo,例如 sheet.printInfo(sheet2.printInfo())。
如果 rowStart/rowEnd/columnStart/columnEnd 不等于 -1,则自定义名称“Print_Area”将在 FromJSON 时更新。

2 个回复

倒序浏览
孙志强讲师达人认证
金牌服务用户   /  发表于:2022-9-1 20:00:41
沙发
请问下,不想自动更新打印区域时,应该如何设置?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-5 18:23:27
板凳
打印设置rowStart/rowEnd/columnStart/columnEnd设置成固定行列即可。
如果整页打印那么设置成-1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部