如何在 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);
});
我的目标是在 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);
});