BND 发表于 2024-4-20 10:41:44

GC7.1.0加载部分sjs文件生成ssjson后样式异常

本帖最后由 Richard.Huang 于 2024-5-29 15:19 编辑

产品:GcExcel
版本:V7.1.0
调研编号:DOCXLS-10234
LastReview:2024/05/29
该问题已经在V7.1.2中得到修复,可以通过升级版本来解决该问题

https://gcdn.grapecity.com.cn/showtopic-216998-1-1.html
之前反馈这个问题处理新增的模板是可以解决,那些历史保存的sjs文件样式还有有问题
麻烦分析下这些sjs有什么问题

BND 发表于 2024-4-20 10:45:15

SjsOpenOptions options = new SjsOpenOptions();
options.setIncludeFormulas(true);
options.setIncludeStyles(true);
workbook.open(sjsFileInputStream, options);
workbook.setName(uniqueId);
workbook.setCulture(Locale.CHINESE);
String ssjson = workbook.toJson();
upload ssjson...
downloadssjson...

按照这个精简版流程依然可以复现

Ellia.Duan 发表于 2024-4-22 11:29:16

您好,请问以上问题也是在linux机器上可以复现,在windows上无法复现?

BND 发表于 2024-4-22 14:45:08

本帖最后由 BND 于 2024-4-22 15:06 编辑

Ellia.Duan 发表于 2024-4-22 11:29
您好,请问以上问题也是在linux机器上可以复现,在windows上无法复现?
是的 只在linux环境复现了
workbook.setCulture(Locale.CHINESE);
在GC7.1.0版本按照之前给的方法测试这行去掉重新执行测试
发现生成的ssjson放到SpreadJS样式正常了
但是引来了额外的问题:
都是相同的workbook对象的情况下,
workbook导出excel文件样式依然含有$符号

BND 发表于 2024-4-22 14:55:20

本帖最后由 BND 于 2024-4-22 15:13 编辑






以上两个问题未不同的Culture结果,默认未设置Culture的结果打印是 "en_US"

同时也排查下引出的两个问题

Ellia.Duan 发表于 2024-4-22 15:14:26

本帖最后由 Ellia.Duan 于 2024-4-22 15:16 编辑

您好,在SpreadJS中导入这个文件”默认未设置Culture结果.ssjson“观察到行次列 没有显示$符号,这一步与您预期一致。
但是当我导出未Excel时,发现行次列 仍然没有显示$符号,与您结果不一致。
如下动图所示:




希望您提供下您出现问题Ms Excel的版本,以及是否是英文版本。

BND 发表于 2024-4-22 15:30:20

本帖最后由 BND 于 2024-4-22 15:33 编辑

Ellia.Duan 发表于 2024-4-22 15:14
您好,在SpreadJS中导入这个文件”默认未设置Culture结果.ssjson“观察到行次列 没有显示$符号,这一步与您 ...
你好,上面描述的导出的excel表格存在"$"符号是指:
在java中生成完ssjson后,
继续执行: 使用同一workbook生成excel文件
对应代码为:
OutputStream os = new ByteArrayOutputStream();
workbook.save(os);
结果发现生成的文件中含有 "$"符号,与同一对象workbook生成的ssjson对象格式不符

无论使用wps还是ms打开都是一样的
对应文件导出如下:

Ellia.Duan 发表于 2024-4-22 16:27:05

问题收到,我将深入调研下此问题
DOCXLS-10234

BND 发表于 2024-4-24 10:38:49

Ellia.Duan 发表于 2024-4-22 16:27
问题收到,我将深入调研下此问题
DOCXLS-10234

请问有进展了吗

Ellia.Duan 发表于 2024-4-24 13:33:21

您好,经过调研,这种奇怪的行为是由不正确的用 Workbook.setCulture 法引起的。
[*]如果要使用中国文化,则区域设置必须为 Locale.CHINA,而不是Locale.CHINESE
[*]该 Workbook.Culture 属性仅为 init。它必须在工作簿实例的初始化代码中设置。
下面是更新的代码:Workbook workbook = new Workbook();
// 1. Culture is init-only
// 2. Use Locale.CHINA for Simplified Chinese
workbook.setCulture(Locale.CHINA);
SjsOpenOptions options = new SjsOpenOptions();
options.setIncludeFormulas(true);
options.setIncludeStyles(true);
workbook.open("The path to input.sjs", options);
// 3. Avoid memory leak
try (FileOutputStream fs = new FileOutputStream("The path to output.ssjson")) {
    workbook.toJson(fs);
}

页: [1] 2 3
查看完整版本: GC7.1.0加载部分sjs文件生成ssjson后样式异常