стили не копируются из исходного файла Excel

#javascript #node.js #exceljs

#javascript #node.js #exceljs

Вопрос:

Я пытаюсь прочитать -> манипулировать -> создать excel. Я использую streams поддерживаемый exceljs модулем. большая часть из них работает нормально, но стили, похоже, не копируются. Ниже приведена моя соответствующая часть кода.

 const readerOptions = {
 sharedStrings: 'cache',
 hyperlinks: 'cache',
 worksheets: 'emit',
 styles: 'cache',
};
const writerOptions = {
  filename: fpath,
  useStyles: true,
  useSharedStrings: true
}
const workbook = new ExcelJS.stream.xlsx.WorkbookWriter(writerOptions)
const myworksheet = workbook.addWorksheet('Sheet 1');
const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader(sheet.path, readerOptions);
workbookReader.read();
workbookReader.on('worksheet', worksheet => {
  worksheet.on('row', row => {
    myworksheet.addRow(row.values).commit();
  });
});

workbookReader.on('end', async () => {
 await workbook.commit();
});
workbookReader.on('error', (err) => {
 console.log(err);
});
 

пожалуйста, смотрите прикрепленное изображение для справки. Слева находится исходный файл Excel, из которого я пытаюсь манипулировать и генерировать другой Excel, а справа — недавно созданный файл Excel из источника.

введите описание изображения здесь

Любая помощь в том, как это исправить, будет действительно отличной, спасибо.

Ответ №1:

Для тех, кто наткнулся на этот пост, приведенное ниже исправление сработало для меня.

 const readerOptions = {
sharedStrings: 'cache',
 hyperlinks: 'cache',
 worksheets: 'emit',
 styles: 'cache',
};
const writerOptions = {
 filename: fpath,
 useStyles: true,
 useSharedStrings: true
}
const workbook = new ExcelJS.stream.xlsx.WorkbookWriter(writerOptions)
const myworksheet = workbook.addWorksheet('Sheet 1');
const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader(sheet.path, readerOptions);
workbookReader.read();
workbookReader.on('worksheet', worksheet => {
 worksheet.on('row', row => {
  const r = myworksheet.addRow();
  Object.assign(r, row);
 });
});

workbookReader.on('end', async () => {
 await workbook.commit();
});
 

Это скопировало строки со всей правильной информацией о стиле. (Одна проблема, с которой я все еще сталкиваюсь, заключается в том, что это плохо работает со строками с объединенными ячейками)