找回密码
 立即注册

QQ登录

只需一步,快速开始

13732977034

初级会员

39

主题

87

帖子

366

积分

初级会员

积分
366
13732977034
初级会员   /  发表于:2021-11-15 17:39  /   查看:2162  /  回复:3
spreadJs    V14.0.9

场景描述:
在打印的时候,生成一个新的sheet页,将同一workbook下的其它sheet页复制合并到新sheet页中新生成的sheet如下图所示:

image.png388047789.png


image.png532583922.png



问题描述:
在打印的时候,预览发现有些地方无数据
image.png972446289.png
image.png387262267.png

请问是什么原因?
代码如下:
printInfo.js  文件
  1. /**打印相关:新建汇总sheet页、打印 */
  2. import GC from "@grapecity/spread-sheets";
  3. import {print} from "@grapecity/spread-sheets-print";

  4. /**
  5. * 新建汇总sheet页
  6. * @param {spread} spread
  7. * @param {Number} colCount
  8. * @returns sheet
  9. */
  10. export function createSummarySheet(spread, colCount) {
  11.   let sheetCount = spread.getSheetCount();
  12.   spread.suspendPaint();
  13.   let summarySheet = new GC.Spread.Sheets.Worksheet("汇总");
  14.   summarySheet.setColumnCount(colCount);
  15.   for (let col = 0; col < colCount; col++) {
  16.     summarySheet.setColumnWidth(col, 78);
  17.   }
  18.   spread.addSheet(sheetCount + 1, summarySheet);
  19.   spread.resumePaint();
  20.   return summarySheet;
  21. }

  22. /**
  23. * 复制其它sheet内容至汇总sheet, 公共sheet页除外
  24. * @param {spread} spread
  25. * @param {sheet} summarySheet  汇总sheet页
  26. * @param {Boolean} excludeTitle  true:排除folderno、title
  27. */
  28. export function copySheetsDataToSummarySheet(spread, summarySheet, excludeTitle) {
  29.   let sheets = spread.sheets;
  30.   let sheetCount = spread.getSheetCount();
  31.   let fromRangeRowIndex = excludeTitle ? 2 : 0,
  32.       toRangeBeginRowIndex = 0;
  33.   spread.suspendPaint();
  34.   for (let i = 0; i < sheetCount; i++) {
  35.     let sheet = sheets[i];
  36.     if (sheet.visible() && sheet.name() !== summarySheet.name()) {
  37.       let rowCount = sheet.getRowCount();
  38.       let colCount = sheet.getColumnCount();
  39.       let showTitle = `${sheet.tag()}-${sheet.name()}`;
  40.       setSheetShowTitle(summarySheet, showTitle, toRangeBeginRowIndex, colCount);
  41.       let fromRange = [new GC.Spread.Sheets.Range(fromRangeRowIndex, 0, rowCount-fromRangeRowIndex, colCount)];
  42.       let toRanges = [new GC.Spread.Sheets.Range(toRangeBeginRowIndex+1, 0, rowCount-fromRangeRowIndex, colCount)];
  43.       if (sheet.tag() === "Common") {
  44.         fromRange = commonSheetFromRange(sheet, rowCount, colCount)
  45.       }
  46.       spread.commandManager().execute({
  47.         cmd: "clipboardPaste",
  48.         sheetName: summarySheet.name(),
  49.         fromSheet: sheet,
  50.         fromRanges: fromRange,
  51.         pastedRanges: toRanges,
  52.         isCutting: false,
  53.         clipboardText: "",
  54.         pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.valuesAndFormatting,
  55.       });
  56.       toRangeBeginRowIndex += (rowCount - fromRangeRowIndex);
  57.     }
  58.   }
  59.   summarySheet.setRowCount(toRangeBeginRowIndex + 3)
  60.   spread.resumePaint();
  61. }

  62. function setSheetShowTitle(summarySheet, showTitle, toRangeBeginRowIndex, colCount) {
  63.   summarySheet.addSpan(toRangeBeginRowIndex, 0, 1, colCount);
  64.   summarySheet.setValue(toRangeBeginRowIndex, 0, showTitle);
  65. }

  66. function commonSheetFromRange(commonSheet, rowCount, colCount) {
  67.   let beginCol = !commonSheet.getColumnVisible(0) ? 1 : 0;
  68.   let fromRange = [new GC.Spread.Sheets.Range(0, beginCol, rowCount, colCount-beginCol)];
  69.   return fromRange;
  70. }

  71. /**
  72. * 通过创建临时spread表单
  73. * @param {*} spread
  74. */
  75. export function printSheets(spread) {
  76.   let printIndex = spread.getSheetCount()-1;
  77.   let printSheet = spread.sheets[printIndex];
  78.   console.log(printSheet.name());
  79.   try {
  80.     let printInfo = printSheet.printInfo();
  81.     printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(GC.Spread.Sheets.Print.PaperKind.a4));
  82.     printInfo.centering(GC.Spread.Sheets.Print.PrintCentering.horizontal)
  83.     printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);
  84.     printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);
  85.     // printInfo.zoomFactor(1.2);
  86.     // printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(800, 1200));
  87.     // printInfo.bestFitColumns(true);
  88.     // printInfo.bestFitRows(true);
  89.     spread.print(printIndex);
  90.   } catch (error) {
  91.     console.log("print err:", error);
  92.   }
  93.   finally {
  94.     // spread.removeSheet(printIndex)
  95.   }
  96. }
复制代码


调用printInfo.js进行打印:
    print() {
      let spread = this.$store.state.spread;
      let summarySheet = createSummarySheet(spread, 11);
      copySheetsDataToSummarySheet(spread, summarySheet, true);
      printSheets(spread)
    },



image.png332910155.png

3 个回复

倒序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-15 18:27:50
推荐
请问你的浏览器版本是Chrome95的吗?此问题是由chrome升级引起的,猜测可能是chrome的bug。
现提供一个解决方案,您可以参考测试下:

在项目中添加以下代码,
// 通过监听BeforePrint事件,在打印前执行下方代码逻辑:
  1. spread.bind(GC.Spread.Sheets.Events.BeforePrint, function (type, args) {
  2.       var iframe = args.iframe;
  3.       var printFn = iframe.contentWindow.print;
  4.      iframe.contentWindow.print = function () {
  5.           setTimeout( function () {
  6.                 printFn.apply( null , arguments);
  7.           }, 10);
  8.     }
  9. });
复制代码


回复 使用道具 举报
13732977034
初级会员   /  发表于:2021-11-16 09:35:04
板凳
Derrick.Jiao 发表于 2021-11-15 18:27
请问你的浏览器版本是Chrome95的吗?此问题是由chrome升级引起的,猜测可能是chrome的bug。
现提供一个解 ...

查了一下发现是这样的,谢谢
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-16 10:21:47
地板
13732977034 发表于 2021-11-16 09:35
查了一下发现是这样的,谢谢

不用客气,那这边就结贴了,有新问题欢迎开新帖交流~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部