请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

chess3cake
金牌服务用户   /  发表于:2025-5-6 11:11  /   查看:72  /  回复:7
使用gcexcel版本 8.0.5


使用代码如下
  1. Workbook workbook = new Workbook();
  2.         workbook.open("test.sjs", new SjsOpenOptions());
  3.         workbook.addDataSource("TEST",new LinkedHashMap<>());
  4.         workbook.processTemplate();
  5.         workbook.save("test.sjs", new SjsSaveOptions());
复制代码


报错如下
  1. Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.grapecity.documents.excel.IWorksheet.getName()" because the return value of "com.grapecity.documents.excel.Workbook.getActiveSheet()" is null
  2.         at com.grapecity.documents.excel.Workbook.processTemplate(Unknown Source)
  3.         at com.grapecity.documents.excel.Workbook.processTemplate(Unknown Source)
  4.         at Main.main(Main.java:19)
复制代码



使用的原始文件,文件中含有spreadjs报表(reportsheet)功能
test.zip (42.39 KB, 下载次数: 2)

7 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-5-6 12:26:41
沙发
GcExcel不支持SpreadJS的reportSheet 功能。
https://www.grapecity.com.cn/developer/grapecitydocuments/excel-java/docs/LimitationList/spreadjs/addon/reportsheet
请具体查看这篇文章。

但是,在SpreadJS导出为sjs时,我们可以将reportsheet 转为普通sheet

  1.   let report = spread.getActiveSheetTab()
  2.             report.renderMode("Preview");
  3.             let reportWorksheet = report.toWorksheet();
  4.             spread.addSheet(0)
  5.             let sheet = spread.getSheet(0)
  6.             sheet.fromJSON(reportWorksheet.toJSON())
  7.             sheet.name(report.name() + "_preview")
  8.             report.renderMode('Design')
复制代码
新增普通sheet后,可以将reportsheet  删除。
回复 使用道具 举报
chess3cake
金牌服务用户   /  发表于:2025-5-6 14:23:46
板凳
Ellia.Duan 发表于 2025-5-6 12:26
GcExcel不支持SpreadJS的reportSheet 功能。
https://www.grapecity.com.cn/developer/grapecitydocuments ...

gcexcel在进行处理时是否应该忽略这些不支持的spreadjs插件?我们的预期场景是同一个workbook中同时存在普通sheet(使用gc模板语法处理)+ReportSheet(gc不处理)
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-5-6 15:17:46
地板
本帖最后由 Ellia.Duan 于 2025-5-6 15:23 编辑

非常感谢您的反馈,我们深入调研下。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-5-6 15:46:59
5#
本帖最后由 Ellia.Duan 于 2025-5-6 15:50 编辑

您好,由于您提供的test.sjs 没有模板语言,以及没有给出new LinkedHashMap<>())定义。
所以,我做了一个简单的数据模拟了下,步骤如下:
1、修改模板,不删除reportsheet

image.png935254821.png
2、在GcExcel中执行下面的代码:
image.png854104308.png
没有报错。
3、在Designer中导入test5.sjs ,结果如下:
image.png365328063.png
即可以在reportsheet 基础上,进行模板数据源绑定。
测试版本:8.0.5

所以,如果要进一步排查,需要给出您的模板语言的sjs文件,以及数据源。

以及,是否与https://gcdn.grapecity.com.cn/showtopic-235808-1-1.html 一样?

回复 使用道具 举报
chess3cake
金牌服务用户   /  发表于:2025-5-8 14:43:01
6#
Ellia.Duan 发表于 2025-5-6 15:46
您好,由于您提供的test.sjs 没有模板语言,以及没有给出new LinkedHashMap())定义。
所以,我做了一个简 ...

1.  与被引用的帖子是不同的问题
2. 这个问题应该只发生在reportsheet是activesheet的时候
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-5-8 18:14:42
7#
本帖最后由 Ellia.Duan 于 2025-5-9 09:19 编辑

您好,将reportsheet置为active时,我这边会报错空指针
image.png658932189.png

我需要深入调研下此问题,有进展会及时联系您。
以及,您可以在导出sjs的时候,先将activeSheet置为其他sheet  ,先规避此问题。 DOCXLS-12209
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:7 天前
8#
您好,出现此问题的原因是:


重构的模板没有考虑SpreadJS特有类型的Sheet(TableSheet、GanttSheet等),所以当不同的含有特有类型Sheet的模板进行扩展时,可能会出现不同的错误。

如之前提到的,将reportsheet 选中,设置为activeSheet(保存为test2.sjs)会导致扩展过程中抛出NullException。

而如果reportsheet 不选中(保存为test3.sjs),这时候不抛异常,但是实际Sheet的顺序还是发生了改变。
image.png478171386.png

我尝试在test3.sjs文件中再追加一个ReportSheet,进行扩展又会抛出IndexOutOfBoundsException。
所以此问题与https://gcdn.grapecity.com.cn/showtopic-235808-1-1.html此贴的问题一致。我将关闭这个帖子,继续在之前的帖子中跟进。


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部