React 全面解析excel文件
更新時間:2022年09月15日 09:31:34 作者:摸魚第一人
這篇文章主要介紹了React 全面解析excel文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
React解析excel文件
首先安裝安裝xlsx插件
yarn add xlsx
使用xlsx解析
? ? /**
? ? ?* 上傳文件并解析成json
? ? ?*/
? ? const HandleImportFile = (info) => {
? ? ? ? let files = info.file;
? ? ? ? // 獲取文件名稱
? ? ? ? let name = files.name
? ? ? ? // 獲取文件后綴
? ? ? ? let suffix = name.substr(name.lastIndexOf("."));
? ? ? ? let reader = new FileReader();
? ? ? ? reader.onload = (event) => {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? // 判斷文件類型是否正確
? ? ? ? ? ? ? ? if (".xls" != suffix && ".xlsx" != suffix) {
? ? ? ? ? ? ? ? ? ? message.error("選擇Excel格式的文件導入!");
? ? ? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? let { result } = event.target;
? ? ? ? ? ? ? ? // 讀取文件
? ? ? ? ? ? ? ? let workbook = XLSX.read(result, { type: 'binary' });
? ? ? ? ? ? ? ? let data = [];
? ? ? ? ? ? ? ? // 循環(huán)文件中的每個表
? ? ? ? ? ? ? ? for (let sheet in workbook.Sheets) {
? ? ? ? ? ? ? ? ? ? if (workbook.Sheets.hasOwnProperty(sheet)) {
? ? ? ? ? ? ? ? ? ? ? ? // 將獲取到表中的數(shù)據(jù)轉(zhuǎn)化為json格式
? ? ? ? ? ? ? ? ? ? ? ? data = data.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? console.log('data:', data);
? ? ? ? ? ? } catch (e) {
? ? ? ? ? ? ? ? message.error('文件類型不正確!');
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? reader.readAsBinaryString(files);
? ? ? ? setIsLoading(false);
? ? }使用antd的Upload組件上傳文件
?<Upload
? ? accept=".xls , .xlsx"
? ? maxCount={1}
? ? showUploadList={false}
? ? customRequest={HandleImportFile}
? >
? ?<Button icon={<UploadOutlined />} type="primary">上傳文件</Button>
?</Upload>React上傳excel預覽
import React from 'react';
import * as XLSX from 'xlsx';
import {message, Table, Upload} from 'antd';
const { Dragger } = Upload;
export class UploadFile extends React.Component {
state = {
tableData: [],
tableHeader: []
};
toReturn = () => {
this.props.close();
};
toSubmit = () => {
const _this = this;
console.log(_this.state.tableData);
};
render() {
return (
<div>
<Dragger name="file"
accept=".xls,.xlsx" maxCount={1}
beforeUpload={function () {
return false;
}}
onChange={this.uploadFilesChange.bind(this)}
showUploadList={false}>
<p className="ant-upload-text">
<span>點擊上傳文件</span>
或者拖拽上傳
</p>
</Dragger>
<Table
columns={this.state.tableHeader}
dataSource={this.state.tableData}
style={{marginTop: '20px'}}
pagination={false}
/>
</div>
);
}
uploadFilesChange(file) {
// 通過FileReader對象讀取文件
const fileReader = new FileReader();
// 以二進制方式打開文件
fileReader.readAsBinaryString(file.file);
fileReader.onload = event => {
try {
const {result} = event.target;
// 以二進制流方式讀取得到整份excel表格對象
const workbook = XLSX.read(result, {type: 'binary'});
// 存儲獲取到的數(shù)據(jù)
let data = {};
// 遍歷每張工作表進行讀取(這里默認只讀取第一張表)
for(const sheet in workbook.Sheets) {
let tempData = [];
// esline-disable-next-line
if(workbook.Sheets.hasOwnProperty(sheet)) {
// 利用 sheet_to_json 方法將 excel 轉(zhuǎn)成 json 數(shù)據(jù)
console.log(sheet);
data[sheet] = tempData.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
}
}
const excelData = data.Sheet1;
const excelHeader = [];
// 獲取表頭
for(const headerAttr in excelData[0]) {
const header = {
title: headerAttr,
dataIndex: headerAttr,
key: headerAttr
};
excelHeader.push(header);
}
// 最終獲取到并且格式化后的 json 數(shù)據(jù)
this.setState({
tableData: excelData,
tableHeader: excelHeader,
});
console.log(this.state);
} catch(e) {
// 這里可以拋出文件類型錯誤不正確的相關提示
console.log(e);
message.error('文件類型不正確!');
}
};
}
}
export default UploadFile;
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
利用React Router4實現(xiàn)的服務端直出渲染(SSR)
這篇文章主要介紹了利用React Router4實現(xiàn)的服務端直出渲染(SSR),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
react實現(xiàn)同頁面三級跳轉(zhuǎn)路由布局
這篇文章主要為大家詳細介紹了react實現(xiàn)同頁面三級跳轉(zhuǎn)路由布局,一個路由小案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09
react實現(xiàn)一個優(yōu)雅的圖片占位模塊組件詳解
這篇文章主要給大家介紹了關于react如何實現(xiàn)一個還算優(yōu)雅的占位模塊圖片組件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-10-10
ReactHooks批量更新state及獲取路由參數(shù)示例解析
這篇文章主要介紹了React Hooks如何實現(xiàn)批量更新state以及獲取路由參數(shù)的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
基于Cloud?Studio構建React完成點餐H5頁面(騰訊云?Cloud?Studio?實戰(zhàn)訓練營)
最近也是有機會參與到了騰訊云舉辦的騰訊云Cloud Studio實戰(zhàn)訓練營,借此了解了騰訊云Cloud?Studio產(chǎn)品,下面就來使用騰訊云Cloud?Studio做一個實戰(zhàn)案例來深入了解該產(chǎn)品的優(yōu)越性吧,感興趣的朋友跟隨小編一起看看吧2023-08-08

