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);
            }
        });
    });
});

解释

  1. 修复拼写错误:将 funtion 改为 function
  2. 添加错误处理:在 xlsList 函数中增加错误处理,确保在读取目录失败时能打印错误信息。
  3. 筛选XLS文件:在 xlsList 函数中增加对 .xls 文件的检查,避免处理其他类型的文件。
  4. 测试调用:增加一个测试调用来验证 getXlsData 函数是否正常工作。
  5. 输出优化:在 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 文件。同时,你也实现了两个函数:getXlsDataxlsList 来分别处理单个文件的读取和文件列表的生成。

问题可能是由于 excel-parser.xls 文件的支持不够或者配置不正确导致的。此外,代码中有一个拼写错误,funtion 应该是 function

示例代码修正

  1. 修正拼写错误

    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);
        });
    };
    
  2. 修正遍历文件列表时的语法错误

    xlsList(function(xlss){
        xlss.forEach(function(xls){  // 注意这里需要删除多余的括号
            getXlsData(xls, function(err, ret){
                if (!ret) {
                    console.log(xls);
                }
                console.log(ret);
            });
        });
    });
    
  3. 检查 excel-parser 的安装: 确保你已经安装了 excel-parser,如果还没有安装,可以使用以下命令安装:

    npm install excel-parser
    

其他建议

  • 确认你的 .xls 文件格式是否与 excel-parser 支持的格式一致。
  • 使用更健壮的错误处理机制,例如捕获可能的异常并打印日志。
  • 如果 excel-parser 不支持 .xls 文件,可以考虑使用其他库,如 xlsxexceljs,它们对 .xlsx 文件有更好的支持。

希望这些修改能解决你的问题!如果还有其他疑问或错误,请提供更多的错误信息以便进一步诊断。

回到顶部