Ich kann Excel-Dateien über lesen, FileReader
aber es gibt sowohl Text als auch seltsame Zeichen aus. Ich muss lesenxls
Datei zeilenweise lesen, Daten in jeder Spalte lesen und in JSON konvertieren.
Wie lese ich xls Datei Zeile für Zeile?
Ich kann Excel-Dateien über lesen, FileReader
aber es gibt sowohl Text als auch seltsame Zeichen aus. Ich muss lesenxls
Datei zeilenweise lesen, Daten in jeder Spalte lesen und in JSON konvertieren.
Wie lese ich xls Datei Zeile für Zeile?
Antworten:
Die folgende Funktion konvertiert die Excel-Daten (XLSX-Format) in JSON. Sie können der Funktion ein Versprechen hinzufügen.
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
<script>
var ExcelToJSON = function() {
this.parseExcel = function(file) {
var reader = new FileReader();
reader.onload = function(e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type: 'binary'
});
workbook.SheetNames.forEach(function(sheetName) {
// Here is your object
var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
var json_object = JSON.stringify(XL_row_object);
console.log(json_object);
})
};
reader.onerror = function(ex) {
console.log(ex);
};
reader.readAsBinaryString(file);
};
};
</script>
Hat der folgende Beitrag den Code für XLS-Format Excel zu JSON Javascript-Code?
jszip.js
Skript deklarieren xlsx.js
.
Alte Frage, aber ich sollte beachten, dass die allgemeine Aufgabe, XLS-Dateien aus Javascript zu analysieren, mühsam und schwierig, aber nicht unmöglich ist.
Ich habe grundlegende Parser in reinem JS implementiert:
Beide Seiten sind HTML5-Datei-API-gesteuerte XLS / XLSX-Parser (Sie können Ihre Datei per Drag & Drop verschieben und die Daten in den Zellen in einer durch Kommas getrennten Liste ausdrucken). Sie können auch JSON-Objekte generieren (vorausgesetzt, die erste Zeile ist eine Kopfzeile).
Die Testsuite http://oss.sheetjs.com/ zeigt eine Version, die XHR zum Abrufen und Analysieren von Dateien verwendet.
excel file
hier hoch und Sie können die Daten im JSON
Format erhalten in console
:<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
<script>
var ExcelToJSON = function() {
this.parseExcel = function(file) {
var reader = new FileReader();
reader.onload = function(e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type: 'binary'
});
workbook.SheetNames.forEach(function(sheetName) {
// Here is your object
var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
var json_object = JSON.stringify(XL_row_object);
console.log(JSON.parse(json_object));
jQuery( '#xlx_json' ).val( json_object );
})
};
reader.onerror = function(ex) {
console.log(ex);
};
reader.readAsBinaryString(file);
};
};
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
var xl2json = new ExcelToJSON();
xl2json.parseExcel(files[0]);
}
</script>
<form enctype="multipart/form-data">
<input id="upload" type=file name="files[]">
</form>
<textarea class="form-control" rows=35 cols=120 id="xlx_json"></textarea>
<script>
document.getElementById('upload').addEventListener('change', handleFileSelect, false);
</script>
Dies ist eine Kombination der folgenden Stackoverflow
Beiträge:
Viel Glück...
Dieser Code kann Ihnen helfen
Meistens funktioniert jszip.js nicht. Fügen Sie daher xlsx.full.min.js in Ihren js-Code ein.
<input type="file" id="file" ng-model="csvFile"
onchange="angular.element(this).scope().ExcelExport(event)"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.8/xlsx.full.min.js">
</script>
$scope.ExcelExport= function (event) {
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
var fileData = reader.result;
var wb = XLSX.read(fileData, {type : 'binary'});
wb.SheetNames.forEach(function(sheetName){
var rowObj =XLSX.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);
var jsonObj = JSON.stringify(rowObj);
console.log(jsonObj)
})
};
reader.readAsBinaryString(input.files[0]);
};
Wenn Sie eine * .xlsx-Datei in einem Browser auf einfachste und kleinste Weise lesen möchten, kann diese Bibliothek Folgendes tun:
https://catamphetamine.github.io/read-excel-file/
<input type="file" id="input" />
import readXlsxFile from 'read-excel-file'
const input = document.getElementById('input')
input.addEventListener('change', () => {
readXlsxFile(input.files[0]).then((data) => {
// `data` is an array of rows
// each row being an array of cells.
})
})
Im obigen Beispiel data
handelt es sich um rohe Zeichenfolgendaten. Es kann mit einem strengen Schema durch Übergeben eines schema
Arguments in JSON analysiert werden . Ein Beispiel hierfür finden Sie in den API-Dokumenten.
API-Dokumente: http://npmjs.com/package/read-excel-file
Vielen Dank für die Antwort oben. Ich denke, der Umfang (der Antworten) ist abgeschlossen, aber ich möchte einen "Reaktionsweg" für jeden hinzufügen, der "Reagieren" verwendet.
Erstellen Sie eine Datei mit dem Namen importData.js:
import React, {Component} from 'react';
import XLSX from 'xlsx';
export default class ImportData extends Component{
constructor(props){
super(props);
this.state={
excelData:{}
}
}
excelToJson(reader){
var fileData = reader.result;
var wb = XLSX.read(fileData, {type : 'binary'});
var data = {};
wb.SheetNames.forEach(function(sheetName){
var rowObj =XLSX.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);
var rowString = JSON.stringify(rowObj);
data[sheetName] = rowString;
});
this.setState({excelData: data});
}
loadFileXLSX(event){
var input = event.target;
var reader = new FileReader();
reader.onload = this.excelToJson.bind(this,reader);
reader.readAsBinaryString(input.files[0]);
}
render(){
return (
<input type="file" onChange={this.loadFileXLSX.bind(this)}/>
);
}
}
Dann können Sie die Komponente in der Rendermethode wie folgt verwenden:
import ImportData from './importData.js';
import React, {Component} from 'react';
class ParentComponent extends Component{
render(){
return (<importData/>);
}
}
<ImportData/>
würde die Daten in ihren eigenen Zustand einstellen, können Sie Excel - Daten in der „Stammkomponente“ durch folgenden Zugriff auf diese :
<ImportData/>
statt sein <importData/>
. Ich bin ziemlich neu in React, aber ich glaube, dass Komponentennamen immer groß geschrieben werden. In jedem Fall ist dies der Name, der beim Importieren im Beispiel verwendet wird.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
<script>
var ExcelToJSON = function() {
this.parseExcel = function(file) {
var reader = new FileReader();
reader.onload = function(e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type: 'binary'
});
workbook.SheetNames.forEach(function(sheetName) {
// Here is your object
var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
var json_object = JSON.stringify(XL_row_object);
console.log(JSON.parse(json_object));
jQuery( '#xlx_json' ).val( json_object );
})
};
reader.onerror = function(ex) {
console.log(ex);
};
reader.readAsBinaryString(file);
};
};
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
var xl2json = new ExcelToJSON();
xl2json.parseExcel(files[0]);
}
</script>
<form enctype="multipart/form-data">
<input id="upload" type=file name="files[]">
</form>
<textarea class="form-control" rows=35 cols=120 id="xlx_json"></textarea>
<script>
document.getElementById('upload').addEventListener('change', handleFileSelect, false);
</script>
Wenn Sie sich jemals fragen, wie Sie eine Datei vom Server lesen können, kann dieser Code hilfreich sein.
Beschränkungen :
<Head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script lang="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.12.4/xlsx.core.min.js"></script>
</head>
<body>
<script>
/* set up XMLHttpRequest */
// replace it with your file path in local server
var url = "http://localhost/test.xlsx";
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";
oReq.onload = function(e) {
var arraybuffer = oReq.response;
/* convert data to binary string */
var data = new Uint8Array(arraybuffer);
var arr = new Array();
for (var i = 0; i != data.length; ++i) {
arr[i] = String.fromCharCode(data[i]);
}
var bstr = arr.join("");
var cfb = XLSX.read(bstr, { type: 'binary' });
cfb.SheetNames.forEach(function(sheetName, index) {
// Obtain The Current Row As CSV
var fieldsObjs = XLS.utils.sheet_to_json(cfb.Sheets[sheetName]);
fieldsObjs.map(function(field) {
$("#my_file_output").append('<input type="checkbox" value="' + field.Fields + '">' + field.Fields + '<br>');
});
});
}
oReq.send();
</script>
</body>
<div id="my_file_output">
</div>
</html>
Fügen Sie die Dateien xslx.js, xlsx.full.min.js und jszip.js hinzu
Fügen Sie der Dateieingabe einen Onchange-Ereignishandler hinzu
function showDataExcel(event)
{
var file = event.target.files[0];
var reader = new FileReader();
var excelData = [];
reader.onload = function (event) {
var data = event.target.result;
var workbook = XLSX.read(data, {
type: 'binary'
});
workbook.SheetNames.forEach(function (sheetName) {
// Here is your object
var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
for (var i = 0; i < XL_row_object.length; i++)
{
excelData.push(XL_row_object[i]["your column name"]);
}
var json_object = JSON.stringify(XL_row_object);
console.log(json_object);
alert(excelData);
})
};
reader.onerror = function (ex) {
console.log(ex);
};
reader.readAsBinaryString(file);
}
XLS ist ein binäres proprietäres Format, das von Microsoft verwendet wird. Das Parsen von XLS mit serverseitigen Sprachen ist sehr schwierig, ohne eine bestimmte Bibliothek oder Office Interop zu verwenden. Dies mit Javascript zu tun ist unmöglich. Dank der HTML5-Datei-API können Sie den binären Inhalt lesen. Um ihn jedoch zu analysieren und zu interpretieren, müssen Sie sich mit den Spezifikationen des XLS-Formats befassen . Ab Office 2007 hat Microsoft die Open XML- Dateiformate ( xslx
für Excel) übernommen, die ein Standard sind.
var excel = neues ActiveXObject ("Excel.Application"); var book = excel.Workbooks.Open (your_full_file_name_here.xls); var sheet = book.Sheets.Item (1); var value = sheet.Range ("A1");
wenn Sie das Blatt haben. Sie können VBA-Funktionen wie in Excel verwenden.