Exceljs:“我们发现‘filename.xlsx’中的某些内容存在问题。”

Álv*_*aro 5 javascript node.js exceljs

我正在尝试使用 Exceljs 以表格式呈现 Excel 文件,但在打开文件之前收到此警告:

\n

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

\n

如果我单击“是”,它会“恢复”文件并且一切都很完美,但我总是在打开之前收到该警告。

\n

仅当我执行多个选项卡时才会发生这种情况,因为单个选项卡工作正常。

\n
import Excel from 'exceljs'\n\nconst tabs = {\n  'FIRST TAB': [\n    { URL: 'https://google.com', FOO: 10 },\n    { URL: 'https://apple.com', FOO: 12.5 }\n  ],\n  'SECOND TAB': [\n    { URL: 'https://google.com', FOO: 10 },\n    { URL: 'https://apple.com', FOO: 22.5 }\n  ]\n}\n\n;(async () => {\n\n  const workbook = new Excel.Workbook()\n  let worksheet = {}\n\n  for (const [label, tab] of Object.entries(tabs))  {\n\n    worksheet = workbook.addWorksheet(label)\n    worksheet.state = 'visible'\n\n    const columns = Object.keys(tab[0]).map((items) => ({\n      name: items,\n      filterButton: true\n    }))\n\n    const rows = tab.map((entry) => Object.values(entry))\n\n    workbook.getWorksheet(label).addTable({\n      name: label,\n      ref: 'A1',\n      headerRow: true,\n      columns,\n      rows\n    })\n  }\n\n  // Write to excel\n  await workbook.xlsx.writeFile(`test.xlsx`)\n})()\n
Run Code Online (Sandbox Code Playgroud)\n

nor*_*rie 4

该问题是由表名中的空格引起的。

修复此问题的一种方法是用下划线替换空格,这实际上是 Excel 在“修复”文件时所做的操作。

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