angularjs 使用node.js阅读Excel文件

nr9pn0ug  于 2023-03-28  发布在  Angular
关注(0)|答案(7)|浏览(174)

好的,我使用FileUploader模块将文件从angular上传到REST API

var uploader = $scope.uploader = new FileUploader({
    url: api.getUrl('uploadCompetence',null)
});

这将发送到以下POST函数:

router.route('/api/uploadCompetence')
        .post(function (req, res) {

        // This is where i want to read the file

            var competence = Competence.build(req.body.location);
            competence.add(function (success) {
                    res.json({message: 'quote created!'});
                },
                function (err) {
                    res.status(err).send(err);
                });
        })

现在,我的目标是读取excel文件,然后将每行添加到数据库中。
但是,我不太确定如何从Node.js读取文件,我已经调试了我的服务器,除了从Angular应用程序调用API之外,在任何地方都找不到文件。
有没有人能把我推向正确的方向?:)

tzdcorbm

tzdcorbm1#

有几个不同的库可以解析Excel文件(.xlsx)。我将列出两个我觉得有趣和值得研究的项目。

Node-xlsx

Excel解析器和构建器。它是一个流行项目 * JS-XLSX * 的 Package 器,该项目是Office Open XML规范中的纯JavaScript实现。

  • 一个月一次 *

解析文件的示例

var xlsx = require('node-xlsx');

var obj = xlsx.parse(__dirname + '/myFile.xlsx'); // parses a file

var obj = xlsx.parse(fs.readFileSync(__dirname + '/myFile.xlsx')); // parses a buffer

ExcelJS

读取,操作和写入电子表格数据和样式到XLSX和JSON。这是一个活跃的项目。在写最新的提交是9小时前。我还没有测试过这个自己,但API看起来很广泛,有很多可能性。

  • 一对一 *

代码示例:

// read from a file
var workbook = new Excel.Workbook();
workbook.xlsx.readFile(filename)
    .then(function() {
        // use workbook
    });

// pipe from stream
var workbook = new Excel.Workbook();
stream.pipe(workbook.xlsx.createInputStream());
7uzetpgm

7uzetpgm2#

您还可以使用这个名为js-xlsx的节点模块
1)安装模块
npm install xlsx
2)导入模块+代码段

var XLSX = require('xlsx')
var workbook = XLSX.readFile('Master.xlsx');
var sheet_name_list = workbook.SheetNames;
var xlData = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
console.log(xlData);
vsmadaxz

vsmadaxz3#

安装exceljs并使用以下代码,

var Excel = require('exceljs');

var wb = new Excel.Workbook();
var path = require('path');
var filePath = path.resolve(__dirname,'sample.xlsx');

wb.xlsx.readFile(filePath).then(function(){

    var sh = wb.getWorksheet("Sheet1");

    sh.getRow(1).getCell(2).value = 32;
    wb.xlsx.writeFile("sample2.xlsx");
    console.log("Row-3 | Cell-2 - "+sh.getRow(3).getCell(2).value);

    console.log(sh.rowCount);
    //Get all the rows data [1st and 2nd column]
    for (i = 1; i <= sh.rowCount; i++) {
        console.log(sh.getRow(i).getCell(1).value);
        console.log(sh.getRow(i).getCell(2).value);
    }
});
1cklez4t

1cklez4t4#

可以使用**read-excel-filenpm。
其中,您可以指定
JSON Schema**,将XLSX转换为JSON格式。

const readXlsxFile = require('read-excel-file/node');

const schema = {
    'Segment': {
        prop: 'Segment',
        type: String
    },
    'Country': {
        prop: 'Country',
        type: String
    },
    'Product': {
        prop: 'Product',
        type: String
    }
}

readXlsxFile('sample.xlsx', { schema }).then(({ rows, errors }) => {
    console.log(rows);
});
nom7f22z

nom7f22z5#

有用链接
https://ciphertrick.com/read-excel-files-convert-json-node-js/

var express = require('express'); 
    var app = express(); 
    var bodyParser = require('body-parser');
    var multer = require('multer');
    var xlstojson = require("xls-to-json-lc");
    var xlsxtojson = require("xlsx-to-json-lc");
    app.use(bodyParser.json());
    var storage = multer.diskStorage({ //multers disk storage settings
        destination: function (req, file, cb) {
            cb(null, './uploads/')
        },
        filename: function (req, file, cb) {
            var datetimestamp = Date.now();
            cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1])
        }
    });
    var upload = multer({ //multer settings
                    storage: storage,
                    fileFilter : function(req, file, callback) { //file filter
                        if (['xls', 'xlsx'].indexOf(file.originalname.split('.')[file.originalname.split('.').length-1]) === -1) {
                            return callback(new Error('Wrong extension type'));
                        }
                        callback(null, true);
                    }
                }).single('file');
    /** API path that will upload the files */
    app.post('/upload', function(req, res) {
        var exceltojson;
        upload(req,res,function(err){
            if(err){
                 res.json({error_code:1,err_desc:err});
                 return;
            }
            /** Multer gives us file info in req.file object */
            if(!req.file){
                res.json({error_code:1,err_desc:"No file passed"});
                return;
            }
            /** Check the extension of the incoming file and 
             *  use the appropriate module
             */
            if(req.file.originalname.split('.')[req.file.originalname.split('.').length-1] === 'xlsx'){
                exceltojson = xlsxtojson;
            } else {
                exceltojson = xlstojson;
            }
            try {
                exceltojson({
                    input: req.file.path,
                    output: null, //since we don't need output.json
                    lowerCaseHeaders:true
                }, function(err,result){
                    if(err) {
                        return res.json({error_code:1,err_desc:err, data: null});
                    } 
                    res.json({error_code:0,err_desc:null, data: result});
                });
            } catch (e){
                res.json({error_code:1,err_desc:"Corupted excel file"});
            }
        })
    }); 
    app.get('/',function(req,res){
        res.sendFile(__dirname + "/index.html");
    });
    app.listen('3000', function(){
        console.log('running on 3000...');
    });
alen0pnh

alen0pnh6#

**在NodeJs中读取excel文件的方法如下:**安装并导入xlsx。

const xlsx = require('xlsx');

写一个读取文件的方法:

export const readExcelFile = async (path, filePath) => {
    try {
        const file = xlsx.readFile(`${path}/${filePath}`);
        let data = []
        const sheets = file.SheetNames
        for (let i = 0; i < sheets.length; i++) {
            const temp = xlsx.utils.sheet_to_json(
                file.Sheets[file.SheetNames[i]])
            temp.forEach((res) => {
                data.push(res)
            })
        }
        return data;
    }
    catch (err) {
        console.log(err);
    }
};

使用方法:

const result = await readExcelFile(PATH_DOWNLOADED_FILE, sourceFileName);
console.log(`Result: ${JSON.stringify(result)}`);
cu6pst1q

cu6pst1q7#

安装'spread_sheet'节点模块,它将从本地电子表格中添加和获取行

相关问题