赞
踩
git地址: https://gitee.com/nulicainiao/analyzing-excel-csv.git
1.下载引入 使用xlsx.js 插件 及 cptable.js文件
import XLSX from './xlsx' import cptable from './cptable.full' function fixdata(data) { //文件流转BinaryString var o = "", l = 0, w = 10240; for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w))); o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w))); return o; } export default function importf(file, onResult) {//导入 var wb;//读取完成的数据 var rABS = false; //是否将文件读取为二进制字符串 var isCSV; if (!file) return; let fileObj = file; var reader = new FileReader(); reader.onload = (e) => { var data = e.target.result; wb = null; if (isCSV) { data = new Uint8Array(data); let f = isUTF8(data); // document.getElementById("ff").innerHTML = "是CSV文件,编码" + (f ? "是" : "不是") + "UTF-8"; if (f) { //data = e.target.result; readCsvUtf8(fileObj, onResult) return false } else { let str = cptable.utils.decode(936, data); wb = XLSX.read(str, { type: "string" }); } }else{ // document.getElementById("ff").innerHTML ="不是CSV文件" } if (!wb) { wb = rABS|| isCSV ? XLSX.read(Buffer.toString(fixdata(data), 'base64'), { type: 'base64' }) : XLSX.read(data, { type: 'binary' }); } let result = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]],{header:1,defval:''}) let tableHeadTemp = result.shift() let tableBody = result.map((item)=> { const obj = {} tableHeadTemp.map((v,i)=> { obj[v] = item[i] }) return obj }) let tableHead = tableHeadTemp.map(item=> ({ prop: item, label: item, visible: true })) onResult({tableHead, tableBody}) //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字 //wb.Sheets[Sheet名]获取第一个Sheet的数据 // document.getElementById("demo").innerHTML = JSON.stringify(); }; isCSV = fileObj.name.split(".").reverse()[0] == "csv";//判断是否是 CSV if (rABS || isCSV) { reader.readAsArrayBuffer(fileObj); } else { reader.readAsBinaryString(fileObj); } file = null } function readCsvUtf8(file, onResult) { const reader = new FileReader(); reader.onload = function () { const data = reader.result; let wb = XLSX.read(data, { type: "string" }); const result = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]],{header:1,defval:''}) let tableHeadTemp = result.shift() let tableBody = result.map((item)=> { const obj = {} tableHeadTemp.map((v,i)=> { obj[v] = item[i] }) return obj }) let tableHead = tableHeadTemp.map(item=> ({ prop: item, label: item, visible: true })) onResult({tableHead, tableBody}) }; reader.readAsText(file); } function isUTF8(bytes) { var i = 0; while (i < bytes.length) { if ((// ASCII bytes[i] == 0x09 || bytes[i] == 0x0A || bytes[i] == 0x0D || (0x20 <= bytes[i] && bytes[i] <= 0x7E) ) ) { i += 1; continue; } if ((// non-overlong 2-byte (0xC2 <= bytes[i] && bytes[i] <= 0xDF) && (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) ) ) { i += 2; continue; } if ((// excluding overlongs bytes[i] == 0xE0 && (0xA0 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) && (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) ) || (// straight 3-byte ((0xE1 <= bytes[i] && bytes[i] <= 0xEC) || bytes[i] == 0xEE || bytes[i] == 0xEF) && (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) && (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) ) || (// excluding surrogates bytes[i] == 0xED && (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x9F) && (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) ) ) { i += 3; continue; } if ((// planes 1-3 bytes[i] == 0xF0 && (0x90 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) && (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) && (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF) ) || (// planes 4-15 (0xF1 <= bytes[i] && bytes[i] <= 0xF3) && (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) && (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) && (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF) ) || (// plane 16 bytes[i] == 0xF4 && (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x8F) && (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) && (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF) ) ) { i += 4; continue; } return false; } return true; } ···
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。