Tôi có thể đọc tệp Excel qua FileReader
nhưng nó xuất ra văn bản cũng như các ký tự lạ với nó. Tôi cần đọcxls
hàng theo tệp, đọc dữ liệu trong mỗi cột và chuyển đổi nó thành JSON.
Làm thế nào để đọc xls tập tin theo hàng?
Tôi có thể đọc tệp Excel qua FileReader
nhưng nó xuất ra văn bản cũng như các ký tự lạ với nó. Tôi cần đọcxls
hàng theo tệp, đọc dữ liệu trong mỗi cột và chuyển đổi nó thành JSON.
Làm thế nào để đọc xls tập tin theo hàng?
Câu trả lời:
Hàm bên dưới chuyển đổi dữ liệu bảng Excel (định dạng XLSX) thành JSON. bạn có thể thêm lời hứa cho chức năng.
<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>
Bài viết dưới đây có mã cho định dạng XLS Excel sang mã javascript?
jszip.js
kịch bản trước đó xlsx.js
.
Câu hỏi cũ, nhưng tôi cần lưu ý rằng nhiệm vụ chung của việc phân tích tệp XLS từ javascript là tẻ nhạt và khó khăn nhưng không phải là không thể.
Tôi có các trình phân tích cú pháp cơ bản được triển khai trong JS thuần túy:
Cả hai trang đều là trình phân tích cú pháp XLS / XLSX dựa trên API tệp (bạn có thể kéo thả tệp của mình xuống và nó sẽ in ra dữ liệu trong các ô trong danh sách được phân tách bằng dấu phẩy). Bạn cũng có thể tạo các đối tượng JSON (giả sử hàng đầu tiên là hàng tiêu đề).
Bộ kiểm tra http://oss.sheetjs.com/ hiển thị phiên bản sử dụng XHR để nhận và phân tích tệp.
excel file
tại đây và bạn có thể lấy dữ liệu ở JSON
định dạng 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>
Đây là sự kết hợp của các Stackoverflow
bài viết sau :
Chúc may mắn...
Mã này có thể giúp bạn
Hầu hết thời gian jszip.js không hoạt động, vì vậy hãy bao gồm xlsx.full.min.js trong mã js của bạn.
<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]);
};
Nếu bạn muốn cách đơn giản nhất và nhỏ nhất để đọc tệp * .xlsx trong trình duyệt thì thư viện này có thể thực hiện:
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.
})
})
Trong ví dụ trên data
là dữ liệu chuỗi thô. Nó có thể được phân tích cú pháp thành JSON với một lược đồ nghiêm ngặt bằng cách chuyển schema
đối số. Xem tài liệu API để biết ví dụ về điều đó.
Tài liệu API: http://npmjs.com/package/read-excel-file
Cảm ơn bạn đã trả lời ở trên, tôi nghĩ rằng phạm vi (câu trả lời) đã hoàn thành nhưng tôi muốn thêm một "cách phản ứng" cho bất cứ ai sử dụng phản ứng.
Tạo một tệp có tên là 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)}/>
);
}
}
Sau đó, bạn có thể sử dụng thành phần trong phương thức kết xuất như:
import ImportData from './importData.js';
import React, {Component} from 'react';
class ParentComponent extends Component{
render(){
return (<importData/>);
}
}
<ImportData/>
sẽ thiết lập dữ liệu trạng thái riêng của mình, bạn có thể truy cập dữ liệu Excel trong "thành phần cha mẹ" bằng cách làm theo này :
<ImportData/>
thay vì <importData/>
. Tôi còn khá mới với React nhưng tôi tin rằng tên thành phần luôn được viết hoa. Trong mọi trường hợp, đó là tên được sử dụng khi nhập trong ví dụ.
<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>
Nếu bạn đang tự hỏi làm thế nào để đọc một tập tin từ máy chủ thì mã này có thể hữu ích.
Những hạn chế :
<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>
bao gồm xslx.js, xlsx.full.min.js, jszip.js
thêm một trình xử lý sự kiện onchange vào đầu vào tệp
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 là một định dạng độc quyền nhị phân được sử dụng bởi Microsoft. Phân tích cú pháp XLS bằng ngôn ngữ phía máy chủ là rất khó nếu không sử dụng một số thư viện cụ thể hoặc Office Interop. Làm điều này với javascript là nhiệm vụ bất khả thi. Nhờ API tệp HTML5, bạn có thể đọc nội dung nhị phân của nó nhưng để phân tích và giải thích nó, bạn sẽ cần đi sâu vào các thông số kỹ thuật của định dạng XLS . Bắt đầu từ Office 2007, Microsoft chấp nhận các định dạng tệp Open XML ( xslx
đối với Excel) là một tiêu chuẩn.
var excel = new 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");
khi bạn có tờ. Bạn có thể sử dụng các hàm VBA như bạn làm trong Excel.