所以我有這個應用程序,我使用FileUploader上傳一個csv文件。但是現在我的要求是也允許excel文件。問題在於FileUploader在讀取垃圾時不支持excel。這是我在分析基於這個例子中的Excel文件試圖http://oss.sheetjs.com/js-xlsx/如何上傳SAPUI5中的Excel文件?
代碼:
var fileUpload = this.getView().byId("fileUploader");
var domRef = fileUpload.getFocusDomRef();
var file = domRef.files[0];
var XLSX = new ExcelPlus();
XLSX.createFile(["CT_MAIN"]);
var reader = new FileReader();
reader.onload = function(e) {
var strCSV = e.target.result;
var arr = String.fromCharCode.apply(null, new
Uint8Array(strCSV));
// var arr = fixData(strCSV);
console.log('data');
console.log(arr);
var workbook = XLSX.read(arr, {type : 'base64'});
console.log('output');
console.log(workbook);
//var output = toCsv(workbook);
//each one of the rows in the csv file
//var rows = arr;//strCSV.split("\n");
var rows = arr.split("\n");
.....
};
//reader.readAsText(file);
reader.readAsArrayBuffer(file);
//reader.readAsBinaryString(file);
如果我上傳使用此代碼一切正常csv文件。如果我使用一個Excel文件,我得到以下
[1] [CONTENT_TYPES] .XML¢[1]([1]←」ËNÃ0E÷HüCä-Jܲ@5í,ÇQ> AA「ƪc[žiiÿž‰ ûB¡J7±IU {2ñÍh²nm¶,Æ»R
我是什麼做錯了,或者我在這裏錯過了什麼?
編輯:做了var workbook = XLSX.read(arr,{type:'base64'});我爲兩種文件類型都得到了空值。上面的垃圾日誌來自console.log(arr);
謝謝您的回答,我想通了,您的評論之前,我用以下 reader.readAsArrayBuffer(文件); 然後在onload函數中 var arr = String.fromCharCode.apply(null,new Uint8Array(strCSV)); 代碼的其餘部分與您的代碼看起來相同,區別在於我使用'base64'而不是'binary'。 – polaris