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

问题描述 投票:0回答:3

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

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`)
})()
javascript node.js exceljs
3个回答
5
投票

问题是表名中有空格导致的。

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

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

2
投票

对我来说,这是由于单元格的内容是长度 >=32768 的字符串引起的。我必须将字符串修剪到 32767 字节。


0
投票

我通过将“ysplit”值设置为 1 解决了这个问题。旧值是“0” 工作表.views =[ { 状态:“冻结”, x分割:0, y 分割:1 } ];

© www.soinside.com 2019 - 2024. All rights reserved.