Чтение и запись файла xlsm с использованием пакета exceljs npm - PullRequest
0 голосов
/ 19 октября 2018

У меня есть файл xlsm с несколькими данными, и мне нужно записать некоторые данные и создать новый файл xlsm во время автоматизации.С кодом ниже файл создается, но он становится поврежденным и не может открыться.Размер файла уменьшается, например, с 8 КБ до 7 КБ.Не уверен, что пропускается при записи файла.

var Excel = require('exceljs');
var workbook = new Excel.Workbook();

workbook.xlsx.readFile('Book.xlsm')
.then(function () {
var worksheet = workbook.getWorksheet(1);
var row = worksheet.getRow(1);
console.log(row.getCell(1).value + " - First value"); // Get A1 value
row.getCell(3).value = "c"; //Set value to A3
row.commit();
return workbook.xlsx.writeFile('new.xlsm');
})

Примечание: только что создал Book.xlsm с некоторыми столбцами значений a, b и значениями 1,2.Попытка установить A3 с 'c' и сохранить как new.xlsm

Если есть какой-либо другой пакет npm, у которого нет этой проблемы, также было бы здорово.

1 Ответ

0 голосов
/ 28 июня 2019

Я думаю, что в настоящее время exeljs не подходит для работы с xlsm файлами.Более надежный пакет для этого случая: xlsx .

Вот небольшой фрагмент кода, который продемонстрирует чтение существующего файла xlsm, добавление в него дополнительных данных и записьновый xlsm файл.Вы можете проверить это в среде NodeJS.

Обратите внимание, что при работе с файлами xlsm вы передаете опцию bookVBA: true методу readFile, который по умолчанию равен false.Подробнее см. параметры синтаксического анализа .

const XLSX = require('xlsx');

try {

    const workbook = XLSX.readFile('./test.xlsm', { bookVBA: true });
    let worksheet = workbook.Sheets['Sheet1'];
    XLSX.utils.sheet_add_aoa(worksheet, [
        ['text in A1', 'text in B1', 5000],
        ['text in A2', 'text in B2', 'text in C2'],
        [null, new Date(), 'text in C3', 'text in D3']
    ]);
    XLSX.writeFile(workbook, './output.xlsm');
    console.log('Completed ...');

} catch (error) {
    console.log(error.message);
    console.log(error.stack);
}

Подробнее см. поддерживаемые выходные форматы .

...