NetSuite - создание Excel с помощью SuiteScript 2.0 продолжает искажаться при открытии - PullRequest
0 голосов
/ 26 мая 2020

Надеюсь, вы поможете.

У меня есть запланированный сценарий в SuiteScript 2.0, который выполняет следующие функции:

1) Загружает файл XML из файловой системы inet ( фрагмент кода ниже):

    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) Запускает сохраненный поиск и вызывает функцию внутри результата l oop, чтобы сформулировать строки и ячейки:

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

Конец l oop, мы закрываем "<Row>" на "</Row>"

3) Наконец, мы добавляем последний бит кода HTML в строку содержимого, используемую для содержимого файла Excel:

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

4) Создает файл и загружает в файл cab inet

     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) После этого добавление более двух строк вызывает ошибку повреждения. Файл отказывается открываться.

enter image description here

Я использовал XML инструменты для украшения в Интернете, чтобы проверить код xml и, честно говоря, код строки 1 и 2, действительно не сильно отличается от строки 3.

Проверка файла excel на Notepad ++ для проверки кода xml, все новые строки регистрируются как одна строка (в отличие от новой строки) - обратите внимание на снимок экрана, который заканчивается строкой 169 ... Может быть, именно поэтому?

enter image description here

Мы будем очень благодарны за любые идеи по диагностике.

Примечание. Первоначальный шаблон был создан путем создания заголовков в стиле / формате, который я хотел в Excel, с последующим сохранением как «XML Spreadsheet».

1 Ответ

0 голосов
/ 27 мая 2020

мы действительно не можем видеть все, что вы делаете, поэтому отладка является сложной задачей.

Одно дело - вам следует избегать всех ваших данных. Итак, включите 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>

Для ясности вы можете выводить перевод строки после каждой строки. Убедитесь, что SPE c XML должен разрешать только перевод строки, но поскольку это формат MS, они могут захотеть использовать CRLF вместо этого.

поэтому для каждой строки:

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