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? :)
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.
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.
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
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.
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());
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);
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);
}
});
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...');
});