Exceljs: «Мы обнаружили проблему с некоторым контентом в» filename.xlsx’.»

#javascript #node.js #exceljs

Вопрос:

Я пытаюсь отобразить файл excel в табличном формате с помощью Exceljs, но перед открытием файла я получаю это предупреждение:

We found a problem with some content in ’test.xlsx’. Do you want us to try to recover as much as we can? If you trust the source of this workbook, click Yes.

Если я нажму «Да», он «восстановит» файл, и все будет в порядке, но я всегда получаю это предупреждение перед открытием.

Это происходит только тогда, когда я делаю более одной вкладки, потому что одна работает нормально.

 import Excel from 'exceljs'

const tabs = {
  'FIRST TAB': [
    { URL: 'https://google.com', FOO: 10 },
    { URL: 'https://apple.com', FOO: 12.5 }
  ],
  'SECOND TAB': [
    { URL: 'https://google.com', FOO: 10 },
    { URL: 'https://apple.com', FOO: 22.5 }
  ]
}

;(async () => {

  const workbook = new Excel.Workbook()
  let worksheet = {}

  for (const [label, tab] of Object.entries(tabs))  {

    worksheet = workbook.addWorksheet(label)
    worksheet.state = 'visible'

    const columns = Object.keys(tab[0]).map((items) => ({
      name: items,
      filterButton: true
    }))

    const rows = tab.map((entry) => Object.values(entry))

    workbook.getWorksheet(label).addTable({
      name: label,
      ref: 'A1',
      headerRow: true,
      columns,
      rows
    })
  }

  // Write to excel
  await workbook.xlsx.writeFile(`test.xlsx`)
})()
 

Ответ №1:

Проблема вызвана пробелом в имени таблицы.

Одним из способов исправить это было бы заменить пробел символом подчеркивания, что на самом деле делает Excel, когда он «исправляет» файл.

     workbook.getWorksheet(label).addTable({
      name: label.replace(' ', '_'),
      ref: 'A1',
      headerRow: true,
      columns,
      rows
    })