优米信息 发表于 2024-12-23 18:29:43

17.0.10 nameStyles里面的属性有' 单引号,导致无法直接存入数据库


Ellia.Duan 发表于 2024-12-23 18:29:44

您好,
可以参考下面的属性:includeUnusedNames
1、导出sjs:

spread.save(function (blob) {
                saveAs(blob, fileName);
                console.timeEnd("导出时间")
            }, e => {
                console.log('失败', e.errorMessage);
            }), {
                includeBindingSource: false,//保存时是否包括绑定源,默认为false
                includeStyles: true,//保存时是否包括样式,默认为true
                includeFormulas: true,//保存时是否包括公式,默认为true
                saveAsView: false,//保存时是否应用格式字符串,默认为false
                includeAutoMergedCells: false,//保存时是否包括自动合并的单元格,默认为false
                includeCalcModelCache: false,//是否包括额外的计算数据。使用这些数据打开文件时可能会更快,默认为false
                includeUnusedNames: true,//保存时是否包含未使用的自定义名称,默认为true
                includeEmptyRegionCells: true,//是否在使用的数据范围之外包括任何空单元格(无数据的单元格或仅样式的单元格),默认为true
                saveR1C1Formula: false,//是否在文件中保存r1c1公式,仅适用于sjs文件类型,默认false
            };2、导出excel文件


            spread.export(function (blob) {
                  saveAs(blob, fileName);
                  console.timeEnd("导出时间")
                }, e => {
                  console.log('失败', e.errorMessage);
                }, {
                  fileType: GC.Spread.Sheets.FileType.excel,
                  includeBindingSource: false, // 将工作簿转换为json时是否包含绑定源,默认false
                  includeStyles: true, // 工作簿转json时是否包含样式,默认true
                  includeFormulas: true, // 工作簿转json时是否包含公式,默认true
                  saveAsView: false, // 将工作簿转换为 json 时是否将格式字符串应用于导出值,默认 false
                  rowHeadersAsFrozenColumns: false, // 将工作簿转换为 json 时是否将行标题视为冻结列,默认 false
                  columnHeadersAsFrozenRows: false, // 将工作簿转换为 json 时是否将列标题视为冻结行,默认 false
                  includeAutoMergedCells: false, // 工作簿转json时是否包含自动合并的单元格,默认false
                  includeCalcModelCache: true, // 是否包含计算的额外数据。打开包含这些数据的文件时可以更快,默认 false。
                  includeUnusedNames: false, //保存时是否包含未使用的自定义名称,默认 true。

                }
            );

Wilson.Zhang 发表于 2024-12-24 08:54:42

您好!SpreadJS支持多种导出文件,何不选择存储这种通用文件类型保存文件内容?请教下您的存储需求场景。

优米信息 发表于 2024-12-24 09:11:34

Wilson.Zhang 发表于 2024-12-24 08:54
您好!SpreadJS支持多种导出文件,何不选择存储这种通用文件类型保存文件内容?请教下您的存储需求场景。

采用toJSON的形式将Json字符串存入mysql数据库中,之后再查出来通过fromJson回显,单引号是数据库里面的关键字,无法直接执行sql语句进行存储,需要转义一下

Wilson.Zhang 发表于 2024-12-24 12:01:44

优米信息 发表于 2024-12-24 09:11
采用toJSON的形式将Json字符串存入mysql数据库中,之后再查出来通过fromJson回显,单引号是数据库里面的 ...

您设置的字体是西文字体,西文字体名称可能包含多个单词,单词之间由空格间隔。
在namedStyles属性中,font属性值包含了字体样式、字号、字体名称等信息,各部分之间由空格间隔。字体样式、字号等均由单个单词表示,中文字体名称各字符串之间不需要空格间隔。如果不使用单引号对包围西文字体名称,那么其中的空格间隔将和font属性值各成分之间空格混淆,不利于序列化和反序列化。这是正常设计。

不建议您修改json数据中的内容,会存在一定风险。可以考虑将toJSON得到的json字符串封装进文件存储,在数据库中存储文件对应的存储路径。

优米信息 发表于 2024-12-25 12:02:20

Wilson.Zhang 发表于 2024-12-24 12:01
您设置的字体是西文字体,西文字体名称可能包含多个单词,单词之间由空格间隔。
在namedStyles属性中,f ...

nameStyles属性是什么时候添加进去的,为什么fromJson导出来的数据显示nameStyles有90多条,这些样式是否是多余的,或者有什么方法我可以设置成宋体的样式,从而避免西文字体之间的空格

Ellia.Duan 发表于 2024-12-25 12:29:39

本帖最后由 Ellia.Duan 于 2024-12-25 12:30 编辑

您好,关于您的问题,一一回答。
1、为什么fromJson导出来的数据显示nameStyles有90多条
nameStyles包括在SpreadJS中为工作簿,为sheet设置的自定义样式,还包括在excel中设置的样式,您可以通过nameStyles的name名称进行排查,看哪些单元格使用了这些样式。
2、如何避免多余的样式。
SpreadJS支持导出sjs ,excel的时候,可以选择是否包含未使用的名称,如下图所示。


3、或者有什么方法我可以设置成宋体的样式
spread.getNamedStyles().forEach(function (style) {
            style._fontFamily= "宋体";
    });
    spread.sheets.forEach((sheet) => {
      
      sheet.getNamedStyles().forEach(function (style) {
            style._fontFamily= "宋体";
      })

})可以参考上面的代码,按需对自定义样式设置fontFamily

优米信息 发表于 2024-12-25 14:11:52

Ellia.Duan 发表于 2024-12-25 12:29
您好,关于您的问题,一一回答。
1、为什么fromJson导出来的数据显示nameStyles有90多条
nameStyles包括 ...

(SpreadJS支持导出sjs ,excel的时候,可以选择是否包含未使用的名称, ) 这个有api可以调用吗
页: [1]
查看完整版本: 17.0.10 nameStyles里面的属性有' 单引号,导致无法直接存入数据库