请选择 进入手机版 | 继续访问电脑版
王公子-_-
初级会员   /  发表于:2025-12-29 19:41  /   查看:79  /  回复:4
1金币
  1. hideReportSheetTabs() {
  2.     const reportSheetCnt = this.workbook.getSheetTabCount();
  3.     for (let index = 0; index < reportSheetCnt; index++) {
  4.         const reportSheet = this.workbook.getSheetTab(index);
  5.         reportSheet.visible(GC.Spread.Sheets.SheetTabVisible.veryHidden);
  6.     }
  7.     }
复制代码
同样的代码在spread组件中生效,但是在designer中设置不生效,是designer设计器中的用法与spread不同么

4 个回复

Wilson.Zhang
超级版主   /  发表于:2025-12-30 08:38:01
沙发
您好!您的代码逻辑是正确的,所使用的API也正确,我参考这个代码在18.2.3版本测试,就ReportSheet的预览模式和设计模式,都可以通过这段代码控制显示和隐藏,如下动图所示:


建议您从代码上下文中debug排查下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
王公子-_-
初级会员   /  发表于:2025-12-30 11:12:32
板凳
Wilson.Zhang 发表于 2025-12-30 08:38
您好!您的代码逻辑是正确的,所使用的API也正确,我参考这个代码在18.2.3版本测试,就ReportSheet的预览模 ...

好的 我把代码只留下文件处理的部分
  1.       this.workbook.suspendPaint();
  2.       this.workbook.fromJSON(templateContent, {
  3.         doNotRecalculateAfterLoad: true
  4.       });

  5.       this.workbook.options.highlightInvalidData = true; // 当单元格中的数据无效时,单元格中会显示一个红色的圆圈
  6.       this.workbook.options.allowCopyPasteExcelStyle = false;
  7.       this.removeEvaluationSheet();
  8.       this.hideReportSheetTabs(); // 隐藏报表模版sheet
  9.       this.workbook.resumePaint();
复制代码
其他地方都注释掉了,确实看到刚加载的文件sheetTab被隐藏了,大概3-5秒后又展示了,我继续定位一下自己的代码
回复 使用道具 举报
王公子-_-
初级会员   /  发表于:2025-12-30 15:16:58
地板
本帖最后由 王公子-_- 于 2025-12-30 16:17 编辑
Wilson.Zhang 发表于 2025-12-30 08:38
您好!您的代码逻辑是正确的,所使用的API也正确,我参考这个代码在18.2.3版本测试,就ReportSheet的预览模 ...

目前是找到问题是哪里导致的了但是原理不清楚,是为其他普通sheet设置了条件格式、数据验证、公式等操作,去掉这个操作就一直隐藏
  1. this.workbook.suspendPaint();
  2. this.workbook.fromJSON(templateContent, {
  3.     doNotRecalculateAfterLoad: true
  4. });

  5. this.workbook.options.highlightInvalidData = true; // 当单元格中的数据无效时,单元格中会显示一个红色的圆圈
  6. this.workbook.options.allowCopyPasteExcelStyle = false;

  7. const sheetCount = this.workbook.getSheetCount();
  8. const activeIndex = this.workbook.getActiveSheetIndex();
  9. if (-1 !== activeIndex) {
  10.     this.initActiveSheet(this.workbook.getActiveSheet());
  11. }
  12. for (let sheetIndex = 0; sheetIndex < sheetCount; sheetIndex++) {
  13.     if (activeIndex === sheetIndex) {
  14.        continue;
  15.     }
  16.     const sheet = this.workbook.getSheet(sheetIndex);
  17.     this.initActiveSheet(sheet);
  18. }
  19. // 隐藏报表模版sheet
  20. const reportSheetCnt = this.workbook.getSheetTabCount();
  21. for (let index = 0; index < reportSheetCnt; index++) {
  22.     const reportSheet = this.workbook.getSheetTab(index);
  23.     reportSheet.visible(GC.Spread.Sheets.SheetTabVisible.veryHidden);
  24. }
  25. this.workbook.resumePaint();
复制代码
  1. initActiveSheet(sheet) {
  2.     if (!sheet) {
  3.         return;
  4.     }
  5.     const sheetTag = sheet.tag();
  6.     sheet.options.isProtected = false;
  7.     sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values;

  8.     if (sheet.isReportSheetPaginatedWorksheet || (sheetTag && sheetTag.isReportSheetPaginatedWorksheet)) {
  9.         return; // 报表分页sheet不处理数据源等
  10.     }
  11.     const source = new GC.Spread.Sheets.Bindings.CellBindingSource(this.dataJson);
  12.     // setSheetValidation(sheet, this.documentInfo, this.structFieldsMap);
复制代码
目前有哪些已知的操作比如设置条件格式、数据验证、公式等会影响sheet的显示/隐藏么,如果没有我继续定位我的代码吧
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-12-30 17:31:47
5#
王公子-_- 发表于 2025-12-30 15:16
目前是找到问题是哪里导致的了但是原理不清楚,是为其他普通sheet设置了条件格式、数据验证、公式等操作 ...

条件格式、数据验证、公式等一般来说在sheet内部的单元格上发挥效用,没有直接影响sheet的可见性,您可以排查下代码中这些内容和sheet可见性的关联是什么。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部