如何使用节点 js 代码删除 excel 表单元格中的所有空格

How can I remove all the spaces in the cells of excelsheet using nodejs code

我有一个 excel sheet,每个单元格的内容之间有很多空格。我想让那个单元格不受影响,所以我想创建一个相同的副本并删除单元格内容的所有空间。是否可以从 nodejs 代码做?

您可以使用 npm 中的 xlsx 包来做到这一点。

通过节点复制文件

const fs = require('fs');
fs.copyFile('source.xlsx', 'newFile.xlsx', (err) => {
    if (err) throw err;
});

使用 xlsx 将文件读取为您喜欢的任何格式(代码简化):

XLSX = require('xlsx');
workbook = XLSX.read('newFile.xlsx', {type: 'binary'});
let worksheet = workbook.Sheets[workbook.SheetNames[0]];
initialData = XLSX.utils.sheet_to_json(worksheet);
console.log('initialData ')

现在您拥有复制文件的第一个工作表 JSON 并且可以执行您喜欢的任何更改。

在每个对象上使用例如 trim 后,您可以将 JSON 写回 Excel 文件

let workbook1 = XLSX.utils.book_new();
let worksheet1 = XLSX.utils.json_to_sheet();
XLSX.utils.book_append_sheet(workbook1, worksheet1, 'WorksheetName');
XLSX.writeFile(workbook1, 'newFile.xlsx');

第一步是可选的,因为您只在 JSON 内部工作,然后复制并编写一个新文件,但我在原始问题中提到了它。

如果您打算删除前导和尾随空格,则此函数应该 trim header 和所有单元格中的空格。

请在将其用于生产之前对其进行全面测试:

function trim_cells(ws) {
var range = XLSX.utils.decode_range(ws["!ref"]);
  for (var R = range.s.r; R <= range.e.r; ++R) {
    for (var C = range.s.c; C <= range.e.c; ++C) {
      var coord = XLSX.utils.encode_cell({ r: R, c: C }),
        cell = ws[coord];
      if (!cell || !cell.v) continue;
      // clean up raw value of string cells
      if (cell.t == "s") cell.v = cell.v.trim();
      // clean up formatted text
      if (cell.w) cell.w = cell.w.trim();
    }
  }
}

注意 - 以上解决方案可在 GitHub issue.

中找到

有关如何将 excel 工作表(作为参数传递)传递给上述函数的更多信息,请查看 official GitHub link.