2016-07-28 6 views
1

Ich bin fest, ich arbeite in einem mittleren Stapel und ich habe eine Anforderung in meinem Projekt, um Daten in vorhandenen Mikros schreiben validierte Excel-Blatt zu schreiben. Ich mache viel google, aber ich fand kein Knoten oder Winkelmodul, die meine Anforderung erfüllen. Jeder hat mir die Option gegeben, eine neue Datei zu erstellen. Es ist wirklich seltsamWie schreibe ich in bestehende Excel-Datei mit eckigen oder Knoten js

unten meine Anforderung Schritt für Schritt

  1. ich ein Mikro haben ermöglichen Excel (XLSM)
  2. Jetzt muss ich es öffnen und einige Daten in Winkel- oder Knoten js schreiben .
  3. Danach war es für den Benutzer zum Download bereit.

Bitte helfen Sie mir jemand

Antwort

0

Aktuelle Office-Datei ist Zip-Archiv mit XML-Dateien. So können Sie in Node.js Daten z. node-zip, geändert durch z.B. xml2js und gezippt zurück.

1

Die SheetJS API ermöglicht es Ihnen, Microsoft Excel (.xls/.xlsx) und Opendocument (ODS-) Formate JSON-Stream oder Dateien und Import/Export von/zu MongoDB oder MongooseJS konvertieren. Studiere einfach die einfache und einfache API.

In Github finden Sie die Dokumentation, Tutorials und Codebeispiele.

Site:http://sheetjs.com/

Projekt:https://github.com/SheetJS/js-xlsx

Interactive Demo:http://oss.sheetjs.com/js-xlsx/

das Codebeispiel unten verwenden, aber kurz vor dem Lauf npm install xlsx und das Stück Code gestellt Öffnen Sie die .xlsm-Datei: var workbook = XLSX.readFile('test.xlsx');.

/* require XLSX */ 
var XLSX = require('xlsx') 

function datenum(v, date1904) { 
    if(date1904) v+=1462; 
    var epoch = Date.parse(v); 
    return (epoch - new Date(Date.UTC(1899, 11, 30)))/(24 * 60 * 60 * 1000); 
} 

function sheet_from_array_of_arrays(data, opts) { 
    var ws = {}; 
    var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }}; 
    for(var R = 0; R != data.length; ++R) { 
     for(var C = 0; C != data[R].length; ++C) { 
      if(range.s.r > R) range.s.r = R; 
      if(range.s.c > C) range.s.c = C; 
      if(range.e.r < R) range.e.r = R; 
      if(range.e.c < C) range.e.c = C; 
      var cell = {v: data[R][C] }; 
      if(cell.v == null) continue; 
      var cell_ref = XLSX.utils.encode_cell({c:C,r:R}); 

      if(typeof cell.v === 'number') cell.t = 'n'; 
      else if(typeof cell.v === 'boolean') cell.t = 'b'; 
      else if(cell.v instanceof Date) { 
       cell.t = 'n'; cell.z = XLSX.SSF._table[14]; 
       cell.v = datenum(cell.v); 
      } 
      else cell.t = 's'; 

      ws[cell_ref] = cell; 
     } 
    } 
    if(range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); 
    return ws; 
} 

/* original data */ 
var data = [[1,2,3],[true, false, null, "sheetjs"],["foo","bar",new Date("2014-02-19T14:30Z"), "0.3"], ["baz", null, "qux"]] 
var ws_name = "SheetJS"; 

function Workbook() { 
    if(!(this instanceof Workbook)) return new Workbook(); 
    this.SheetNames = []; 
    this.Sheets = {}; 
} 

var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); 

/* add worksheet to workbook */ 
wb.SheetNames.push(ws_name); 
wb.Sheets[ws_name] = ws; 

/* write file */ 
XLSX.writeFile(wb, 'test.xlsx'); 
+0

Danke, aber das ist jedes Mal erstellt eine neue .xls/.xlsx. Meine Anforderung besteht darin, Daten in vorhandene micro Embedded Excel (.xlsm) -Datei anzufügen. Eigentlich habe ich ein Excel, also wollte ich nur Daten darin schreiben. Bitte schlagen Sie noch mehr vor ?? – user6589630

+0

Ja, Sie können! Lesen Sie die Dokumentation. Sie können die XLSM-Datei öffnen und die Zellen des Arbeitsblatts einer Arbeitsmappe aktualisieren und die Datei schreiben. Ich werde ein Code-Beispiel in meiner Antwort oben veröffentlichen. –

Verwandte Themen