【问题标题】:NetSuite - Generating Excel with SuiteScript 2.0 keeps corrupting upon openingNetSuite - 使用 SuiteScript 2.0 生成 Excel 在打开时不断损坏
【发布时间】:2020-05-28 02:41:11
【问题描述】:

希望您能提供帮助。

我在 SuiteScript 2.0 中有一个预定脚本,它执行以下操作:

1) 从文件柜加载一个 XML 文件(代码如下 sn-p):

    var fileObj = FILEMODULE.load({id: fileId });

    if (fileObj.size < 10485760){
        log.debug('units to start with', RUNTIMEMODULE.getCurrentScript().getRemainingUsage());
        log.debug('file contents', fileObj.getContents());
        return fileObj.getContents();
    }

此 XML 文件用作生成 Excel 的模板。

2) 运行保存的搜索并在结果循环内调用函数来制定行和单元格:

    content += '<Row>'
    content +=  '<Cell ss:StyleID="s67"><Data ss:Type="String">' + data + '</Data></Cell>';

循环结束,我们用"&lt;/Row&gt;"关闭"&lt;Row&gt;"

3) 最后,我们将最后一段 HTML 代码添加到用于 Excel 文件内容的内容字符串中:

    content += '</Table></Worksheet></Workbook>';

4) 创建文件,并上传到文件柜

     var xlsFile = FILEMODULE.create({name: 'TEST.xls', fileType: 'EXCEL', contents: base64EncodedString});

     xlsFile.folder=1173; //folder name=XML Templates
     var fileID = xlsFile.save();   

但是....

5) 在没有数据的情况下打开,它工作正常(这证实了 XML 模板是好的)。

6) 从搜索中打开 2 行数据后,它工作正常。所有 26 列都打印在单元格中。

7) 在此之后,添加超过 2 行会导致损坏错误。文件拒绝打开。

我在网上使用 XML 美化工具检查了 xml 代码,老实说,第 1 行和第 2 行的代码,从第 3 行开始看起来并没有太大区别。

在 Notepad++ 上检查 excel 文件以检查 xml 代码,所有新行都注册为一行(而不是新行) - 请注意在第 169 行停止的屏幕截图...这可能是为什么吗?

任何有关诊断此问题的想法将不胜感激。

注意:初始模板是通过在 Excel 上以我想要的样式/格式创建标题,然后保存为“XML 电子表格”来构建的。

【问题讨论】:

    标签: excel netsuite suitescript2.0


    【解决方案1】:

    我们无法真正看到您所做的一切,因此调试很困难。

    有一件事是您应该转义所有数据。所以包括 N/xml 和 :

    content +=  '<Cell ss:StyleID="s67"><Data ss:Type="String">' + data + '</Data></Cell>';
    

    应该是:

    content +=  '<Cell ss:StyleID="s67"><Data ss:Type="String">' + xml.escape({xmlText:data}) + '</Data></Cell>';
    

    你说的是循环一行然后结束听起来你可能有

    <Row><Cell/><Cell/> //not closing the row for each row of search results. 
    <Row><Cell/><Cell/>
    <Row><Cell/><Cell/>
    ...
    </Row>
    

    为清楚起见,您可能希望在每行之后输出换行符。检查规范 XML 应该只允许换行,但由于这是一种 MS 格式,他们可能需要 CRLF。

    所以对于每一行:

    content += '</Row>\n';
    

    【讨论】:

    • 您能详细说明“CRLF”是什么意思吗?
    • 循环似乎正在正确打印 xml,因为前两行已成功显示在 Excel 文件中。当搜索结果大于 2 时,整个文件都会损坏。
    • CRLF 是回车/换行。 \r\n\n 是 XML 的标准。我还在示例中添加了转义数据。
    • 优秀的@bkknights - 会试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多