如何在 Node 中遍历 excel 文档

How to loop through excel docs in Node

我的目标是在 Node 项目中创建一个脚本,它将循环遍历 spreadsheets 的目录,从单元格中提取一个值,并将该值添加到新的 spread 中的新行sheet...我无法理解其中的逻辑

在我的根目录中,我有一个名为“Timesheets”的文件夹,其中有一个名为“2021”的文件夹,这是我存储所有时间sheets 的地方。每次 sheet 被命名为一周的日期跨度(例如:6 月 14 日至 18 日)。每次sheet 都有一个标记为一周总小时数的单元格(单元格 D12),这是我唯一关心的单元格。

我正在使用节点包 'xlsx' 和 'fs'。下面的代码将给我 timesheet 目录中所有文件的名称,但我正在努力确定如何处理这些数据。我是 Node 的新手,所以任何指导将不胜感激。

阅读-timesheets.js

const xlsx = require("xlsx");
const fs = require("fs");
const jsontoxml = require("jsontoxml");

var directory_name = "./Timesheets/2021";

let filenames = fs.readdirSync(directory_name);
  
console.log("\nFilenames in directory:");
filenames.forEach((file) => {

    console.log(file);

    //var workbook = xlsx.readFile(file);
});

结果如下:

Filenames in directory:
April12th-16th.xlsx
April19th-23rd.xlsx
April26th-30th.xlsx
April5th-9th.xlsx
Feb15th-19th.xlsx
Feb1st-5th.xlsx
Feb22nd-26th.xlsx
Feb8th-12th.xlsx
jan11th-15th.xlsx
jan18th-22nd.xlsx
Jan25th-29th.xlsx
jan4th-8th.xlsx
June14th-18th.xlsx
June7th-11th.xlsx
March15th-19th.xlsx
March1st-5th.xlsx
March22nd-26th.xlsx
March29th-April2nd.xlsx
March8th-12th.xlsx
May10th-14th.xlsx
May17th-21st.xlsx
May24th-28th.xlsx
May31st-June4th.xlsx
May3rd-7th.xlsx

但是当我尝试打开文件(通过工作簿变量)时,我收到一条错误消息:

Filenames in directory:
April12th-16th.xlsx
internal/fs/utils.js:314
    throw err;
    ^

Error: ENOENT: no such file or directory, open 'April12th-16th.xlsx'
    at Object.openSync (fs.js:498:3)
    at Object.readFileSync (fs.js:394:35)
    at read_binary (C:\dev\git\excel-parser\node_modules\xlsx\xlsx.js:2730:44)
    at readSync (C:\dev\git\excel-parser\node_modules\xlsx\xlsx.js:21018:69)
    at Object.readFileSync (C:\dev\git\excel-parser\node_modules\xlsx\xlsx.js:21046:9)
    at C:\dev\git\excel-parser\read-timesheets.js:14:25
    at Array.forEach (<anonymous>)
    at Object.<anonymous> (C:\dev\git\excel-parser\read-timesheets.js:10:11)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) {
  errno: -4058,
  syscall: 'open',
  code: 'ENOENT',
  path: 'April12th-16th.xlsx'
}

我如何循环遍历这些文件,提取一个值,并使用这些信息创建一个新的点差sheet?最终,这将在纳税季节对我有所帮助,因为我是一家公司的承包商,我的工作时间每周根据这些时间 sheets 计算。一旦我能够将总小时数放在一个 sheet

上,数学就会很简单

您必须将目录名附加到 forEach 中的文件名,因为 xlsx 文件不直接靠近脚本。

Node 带有用于处理路径的实用程序

const xlsx = require("xlsx");
const fs = require("fs");
const jsontoxml = require("jsontoxml");
const path = require('path');

var directory_name = "./Timesheets/2021";

let filenames = fs.readdirSync(directory_name);
  
console.log("\nFilenames in directory:");
filenames.forEach((file) => {
    const _file = path.resolve(directory_name, file);
    console.log(_file);

    var workbook = xlsx.readFile(_file);
});