webentwicklung-frage-antwort-db.com.de

Excel-Datei mit node.js lesen

Okay, ich verwende das Modul FileUploader, um meine Datei aus dem Winkel in meinen REST API hochzuladen:

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

Dies wird an die folgende POST-Funktion gesendet:

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

Jetzt ist es mein Ziel, die Excel-Datei zu lesen und dann jede Zeile zu meiner Datenbank hinzuzufügen.

Ich bin jedoch nicht ganz sicher, wie ich die Datei von Node.js lesen kann. Ich habe meinen Server debuggt und konnte die Datei nirgends finden, aber die API wird von meiner Angular-Anwendung aufgerufen

Kann jemand mich in die richtige Richtung schieben? :)

28
Marc Rasmussen

Es gibt einige verschiedene Bibliotheken, die das Parsen von Excel-Dateien (.xlsx) durchführen. Ich werde zwei Projekte auflisten, die ich interessant finde und die einen Blick wert sind.

Node-xlsx

Excel Parser und Builder. Es ist eine Art Wrapper für ein beliebtes Projekt JS-XLSX, bei dem es sich um eine reine JavaScript-Implementierung aus der Office Open XML-Spezifikation handelt. 

node-xlsx Projektseite 

Beispiel zum Analysieren einer Datei

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

Lesen, bearbeiten und schreiben Sie Tabellenkalkulationsdaten und -stile in XLSX und JSON. Es ist ein aktives Projekt. Zum Zeitpunkt des Schreibens war das letzte Commit vor 9 Stunden. Ich habe das nicht selbst getestet, aber die API sieht umfangreich aus und bietet viele Möglichkeiten.

exceljs Projektseite 

Code-Beispiel:

// 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());
55
aludvigsen

Sie können auch dieses Knotenmodul mit dem Namen js-xlsx .__ verwenden.

1) Installieren Sie das Modul
npm install xlsx

2) Importieren Sie das Modul + Code-Snippet

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

installieren Sie Exceljs und verwenden Sie den folgenden Code,

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

Nützlicher Link

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...');
    });
0
Mani kiran