js-xlsx - 获取 Excel 工作表的特定行

Sai*_*sri 4 javascript excel xlsx node.js js-xlsx

我有一个 Excel 工作表,有 500 行。我正在尝试获取从 101 到 200 的行。

我在谷歌中搜索过,我找到了一个获取起始行的示例,例如1到100或1到1000,甚至1到任何数字。

但我还没有找到任何代码来获取从第 m 行到第 n 行的行(这里“m”和“n”可以是任何数字,例如 m=101 到 n=200)

下面是我发现获取前 100 行的代码:

  let workbook = XLSX.readFile('./files/uploaded_files/testfile.xlsx', {sheetRows: 100})
  const wsname = workbook.SheetNames[0];
  const ws = workbook.Sheets[wsname];
  var exceldata = XLSX.utils.sheet_to_json(ws);
Run Code Online (Sandbox Code Playgroud)

即使有任何其他模块可以获取之间的行,我想知道是否有任何?

Rob*_*zie 5

使用一个较小的例子:

在此输入图像描述

有几种选择:

您可以使用当前的方法和从例如slice返回的数组sheet_to_json

// option 1
const maxRow = 6;
const minRow = 3;
const wb = XLSX.readFile("./Book1.xlsx", {sheetRows: maxRow});
const ws = wb.Sheets[wb.SheetNames[0]];
let data = XLSX.utils.sheet_to_json(ws);
data = data.slice(minRow <= 2 ? 0 : minRow - 2);
console.log(data);
Run Code Online (Sandbox Code Playgroud)

考虑minRow - 2到 1 行是标题,另外 1 行是包含第 3 行,而不是排除它。这会产生:

[
  { a: 4, b: 5, c: 6 },
  { a: 7, b: 8, c: 9 },
  { a: 10, b: 11, c: 12 },
  { a: 13, b: 14, c: 15 }
]
Run Code Online (Sandbox Code Playgroud)

另一种选择是结合使用rangeheader(请参阅此处)选项。range允许您控制所考虑的范围sheet_to_jsonheader用于定义对象输出数组中使用的键。

您可以在导入整个文件后使用它,也可以继续使用该sheetRows选项,例如:

// option 2
const importRange = "A3:F6";
const headers = ["a", "b", "c"];
const wb = XLSX.readFile("./Book1.xlsx"); // not using sheetRows
const ws = wb.Sheets[wb.SheetNames[0]];
const data = XLSX.utils.sheet_to_json(ws, {range: importRange, header: headers});
console.log(data);
Run Code Online (Sandbox Code Playgroud)

其产生:

[
  { a: 4, b: 5, c: 6 },
  { a: 7, b: 8, c: 9 },
  { a: 10, b: 11, c: 12 },
  { a: 13, b: 14, c: 15 }
]
Run Code Online (Sandbox Code Playgroud)

请注意,如果省略该headers选项,则输出为:

[
  { '4': 7, '5': 8, '6': 9 },
  { '4': 10, '5': 11, '6': 12 },
  { '4': 13, '5': 14, '6': 15 }
]
Run Code Online (Sandbox Code Playgroud)

因为第 3 行中的值成为新的默认标头(我认为您可能不想要它)。

最后,如果您事先不知道标头,您可以先获取一个数组数组,然后再计算出标头:

// option 3
const importRange = "A3:F6";
const headers = 1; 
const wb = XLSX.readFile("./Book1.xlsx"); // not using sheetRows
const ws = wb.Sheets[wb.SheetNames[0]];
const data = XLSX.utils.sheet_to_json(ws, {range: importRange, header: headers});
console.log(data);
Run Code Online (Sandbox Code Playgroud)

其产生:

[ 
  [ 4, 5, 6 ],
  [ 7, 8, 9 ],
  [ 10, 11, 12 ],
  [ 13, 14, 15 ] 
]
Run Code Online (Sandbox Code Playgroud)