Odczyt pliku Excel za pomocą węzła.js

Ok więc używam modułu FileUploader aby wgrać mój plik z angular do mojego REST API:

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

Jest to przesyłane do następującej funkcji 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);
                });
        })

Teraz moim celem jest odczytanie pliku excel, a następnie dodanie każdego wiersza do mojej bazy danych.

Jednak nie jestem pewien, jak mogę odczytać plik z Node.js debugowałem mój serwer i nie mogłem znaleźć pliku w dowolnym miejscu, ale api jest wywoływane z mojej Angular aplikacji

Czy ktoś może mnie popchnąć we właściwym kierunku? :)
Author: pnuts, 2015-03-04

4 answers

Istnieje kilka różnych bibliotek, które przetwarzają pliki Excela (.xlsx). Wymienię dwa projekty, które uważam za interesujące i warte obejrzenia.

Node-xlsx

EXCEL parser i builder. To rodzaj opakowania dla popularnego projektu JS-XLSX, który jest czystą implementacją javascript ze specyfikacji Office Open XML.

node-strona projektu xlsx

Przykład parsowania pliku

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

Czytaj, manipuluj i zapisuj dane i style arkusza kalkulacyjnego do XLSX i JSON. To aktywny projekt. W momencie pisania ostatniego commita było 9 godzin temu. Sam tego nie testowałem, ale api wygląda na rozbudowane z wieloma możliwościami.

strona projektu exceljs

Przykład kodu:

// 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());
 54
Author: aludvigsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-05 15:50:29

Możesz również użyć modułu węzła o nazwie js-xlsx

1) Moduł instalacyjny
npm install xlsx

2) moduł importu + fragment kodu

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);
 21
Author: Charitha Goonewardena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-05 20:22:25

Zainstaluj exceljs i użyj następującego kodu,

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);
    }
});
 1
Author: Codemaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-29 07:08:19

Zainstaluj moduł węzła 'spread_sheet', będzie on zarówno dodawać, jak i pobierać wiersz z lokalnego arkusza kalkulacyjnego

 0
Author: Pranjal Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-03 13:11:58