Nodejs操作xls文件遇到的问题 求帮助
Nodejs操作xls文件遇到的问题 求帮助
代码如下:
var excelParser = require('excel-parser');
var path = require('path');
var fs = require('fs');
var prefix = path.join(__dirname,'./resource/');
var getXlsData = funtion (xls,callback){
excelParser.parse({
inFile: xls,
worksheet: 4,
skipEmpty: true,
searchFor: {
type:'loose'
}
},function(err, records){
if(err){
return callback(err,null);
}
//delete records[0];
return callback(null, records);
});
}
// 单独调用getXlsData函数,结果正常,获得一个二位数组值。
getXlsData('/home/test.xls', function(err, ret){
console.log(err);
console.log(ret);
})
// 获得xls文件路径数组
var xlsList = function(callback){
var xls = [];
fs.readdir(prefix, function(err,files){
if(err) process.exit(0);
files.forEach(function(file){
xls.push(path.join(prefix, file, file.concat('.xls')));
});
callback(xls);
})
}
//
xlsList(function(xlss){
xlss.forEach(function(xls)){
getXlsData(xls, function(err, ret){
if(!ret){
console.log(xls)
}
console.log(ret);
});
});
});
3 回复
根据你提供的代码片段,看起来你在使用 excel-parser
库来处理 XLS 文件。然而,代码中存在一些问题,比如拼写错误、逻辑不完整等。以下是修正后的代码,并附上简要的解释。
修正后的代码
var excelParser = require('excel-parser');
var path = require('path');
var fs = require('fs');
var prefix = path.join(__dirname, './resource/');
// 定义获取XLS数据的函数
var getXlsData = function(xls, callback) {
excelParser.parse({
inFile: xls,
worksheet: 4,
skipEmpty: true,
searchFor: {
type: 'loose'
}
}, function(err, records) {
if (err) {
return callback(err, null);
}
return callback(null, records);
});
};
// 测试单独调用getXlsData函数
getXlsData(path.join(prefix, 'test.xls'), function(err, ret) {
console.log("测试输出:", err, ret);
});
// 获取XLS文件路径数组
var xlsList = function(callback) {
var xls = [];
fs.readdir(prefix, function(err, files) {
if (err) {
console.error("读取目录失败:", err);
return;
}
files.forEach(function(file) {
if (file.endsWith('.xls')) { // 确保只处理XLS文件
xls.push(path.join(prefix, file));
}
});
callback(xls);
});
};
// 遍历所有XLS文件并获取数据
xlsList(function(xlss) {
xlss.forEach(function(xls) {
getXlsData(xls, function(err, ret) {
if (!ret) {
console.log("未找到数据:", xls);
} else {
console.log("成功获取数据:", ret);
}
});
});
});
解释
- 修复拼写错误:将
funtion
改为function
。 - 添加错误处理:在
xlsList
函数中增加错误处理,确保在读取目录失败时能打印错误信息。 - 筛选XLS文件:在
xlsList
函数中增加对.xls
文件的检查,避免处理其他类型的文件。 - 测试调用:增加一个测试调用来验证
getXlsData
函数是否正常工作。 - 输出优化:在
getXlsData
的回调中,增加了对ret
的检查,以便更好地显示结果。
这样修改后,你的代码应该能够正确地读取和解析指定目录下的所有 XLS 文件。
不知道为啥,循环去读取xls文件,就会报错:{ [Error: ENOENT, open ‘/tmp/temp114610-16284-lm488k/convert.csv’] errno: 34, code: ‘ENOENT’, path: ‘/tmp/temp114610-16284-lm488k/convert.csv’ }; 单独去读xls文件是可以的!
从你提供的代码来看,你在使用 excel-parser
这个库来读取 .xls
文件。同时,你也实现了两个函数:getXlsData
和 xlsList
来分别处理单个文件的读取和文件列表的生成。
问题可能是由于 excel-parser
对 .xls
文件的支持不够或者配置不正确导致的。此外,代码中有一个拼写错误,funtion
应该是 function
。
示例代码修正
-
修正拼写错误:
var getXlsData = function (xls, callback) { excelParser.parse({ inFile: xls, worksheet: 4, skipEmpty: true, searchFor: { type: 'loose' } }, function (err, records) { if (err) { return callback(err, null); } return callback(null, records); }); };
-
修正遍历文件列表时的语法错误:
xlsList(function(xlss){ xlss.forEach(function(xls){ // 注意这里需要删除多余的括号 getXlsData(xls, function(err, ret){ if (!ret) { console.log(xls); } console.log(ret); }); }); });
-
检查
excel-parser
的安装: 确保你已经安装了excel-parser
,如果还没有安装,可以使用以下命令安装:npm install excel-parser
其他建议
- 确认你的
.xls
文件格式是否与excel-parser
支持的格式一致。 - 使用更健壮的错误处理机制,例如捕获可能的异常并打印日志。
- 如果
excel-parser
不支持.xls
文件,可以考虑使用其他库,如xlsx
或exceljs
,它们对.xlsx
文件有更好的支持。
希望这些修改能解决你的问题!如果还有其他疑问或错误,请提供更多的错误信息以便进一步诊断。