最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端讀取與導(dǎo)出XLSX文件的完整指南

 更新時(shí)間:2025年12月19日 09:53:50   作者:小明記賬簿  
在實(shí)際業(yè)務(wù)場景中,我們經(jīng)常需要處理Excel文件的導(dǎo)入導(dǎo)出,本文將以React+Ant Design項(xiàng)目為例,演示如何通過xlsx庫實(shí)現(xiàn)XLSX文件的讀取與導(dǎo)出,需要的朋友可以參考下

一、前言

在實(shí)際業(yè)務(wù)場景中,我們經(jīng)常需要處理Excel文件的導(dǎo)入導(dǎo)出。本文將以React+Ant Design項(xiàng)目為例,演示如何通過xlsx庫實(shí)現(xiàn)以下功能:

  1. 讀取本地XLSX文件并解析為表格數(shù)據(jù)
  2. 將表格數(shù)據(jù)導(dǎo)出為XLSX文件

二、技術(shù)棧

  • React: 構(gòu)建用戶界面
  • Ant Design: UI組件庫
  • xlsx (SheetJS): Excel文件處理庫

三、準(zhǔn)備工作

1. 創(chuàng)建React項(xiàng)目

npx create-react-app antd-xlsx --template typescript
cd antd-xlsx

2. 安裝依賴

npm install antd @ant-design/icons xlsx

3. 目錄結(jié)構(gòu)

src/
├── components/
│   └── XlsxHandler.tsx
├── App.tsx
├── index.tsx

四、核心實(shí)現(xiàn)

1. 文件讀取模塊

import React, { useState } from 'react';
import { Upload, Table, Button } from 'antd';
import * as XLSX from 'xlsx';
import { InboxOutlined } from '@ant-design/icons';

const XlsxHandler = () => {
  const [dataSource, setDataSource] = useState<any[]>([]);
  const [headers, setHeaders] = useState<string[]>([]);

  // 文件讀取處理
  const handleFileChange = (info: any) => {
    const file = info.file;
    if (!file) return;
    
    // 校驗(yàn)文件類型
    const isXlsx = file.name.endsWith('.xlsx') || file.name.endsWith('.xls');
    if (!isXlsx) {
      info.status = 'error';
      info.response = '請(qǐng)選擇正確的Excel文件';
      return;
    }

    const reader = new FileReader();
    reader.onload = (e: any) => {
      const binaryStr = e.target.result;
      const workbook = XLSX.read(binaryStr, { type: 'binary' });
      const firstSheetName = workbook.SheetNames[0];
      const sheet = workbook.Sheets[firstSheetName];
      
      // 提取表頭
      const jsonData = XLSX.utils.sheet_to_json(sheet);
      if (jsonData.length > 0) {
        setHeaders(Object.keys(jsonData[0]))
        setDataSource(jsonData);
      }
    };
    reader.readAsBinaryString(file);
  };

  // 數(shù)據(jù)導(dǎo)出功能
  const exportToExcel = () => {
    const ws = XLSX.utils.json_to_sheet(dataSource);
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, 'ExportedData');
    
    XLSX.writeFile(wb, `export_${Date.now()}.xlsx`);
  };

  return (
    <div style={{ padding: 20 }}>
      <Upload 
        beforeUpload={handleFileChange} 
        showUploadList={false}
        maxCount={1}
        accept=".xlsx,.xls"
      >
        <Button icon={<InboxOutlined />}>選擇Excel文件</Button>
      </Upload>

      {headers.length > 0 && (
        <Table 
          dataSource={dataSource} 
          rowKey="id" 
          pagination={{ pageSize: 10 }} 
          style={{ marginTop: 20 }}
        >
          {headers.map((header) => (
            <Table.Column key={header} title={header} dataIndex={header} />
          ))}
        </Table>
      )}

      <Button 
        type="primary" 
        onClick={exportToExcel} 
        disabled={!headers.length} 
        style={{ marginTop: 20 }}
        icon={<DownloadOutlined />}
      >
        導(dǎo)出當(dāng)前數(shù)據(jù)
      </Button>
    </div>
  );
};

export default XlsxHandler;

2. 主應(yīng)用集成

import React from 'react';
import './App.css';
import { ConfigProvider } from 'antd';
import XlsxHandler from './components/XlsxHandler';
import { DownloadOutlined } from '@ant-design/icons';

function App() {
  return (
    <ConfigProvider>
      <div className="App">
        <h1>Excel文件處理示例</h1>
        <XlsxHandler />
      </div>
    </ConfigProvider>
  );
}

export default App;

五、技術(shù)要點(diǎn)解析

1. 文件讀取流程

  1. 使用HTML5的File API獲取文件對(duì)象
  2. 通過FileReader讀取二進(jìn)制內(nèi)容
  3. 使用SheetJS解析二進(jìn)制流生成工作簿
  4. 提取第一個(gè)工作表的數(shù)據(jù)
  5. 轉(zhuǎn)換為JSON格式渲染表格

2. 數(shù)據(jù)導(dǎo)出流程

  1. 將JSON數(shù)據(jù)轉(zhuǎn)換為工作表
  2. 創(chuàng)建新的工作簿并添加工作表
  3. 使用writeFile方法生成Excel文件

3. 關(guān)鍵技術(shù)點(diǎn)

  • 二進(jìn)制處理:必須使用readAsBinaryString方法讀取文件
  • 鍵值映射:JSON字段名對(duì)應(yīng)Excel列名
  • 類型校驗(yàn):嚴(yán)格校驗(yàn)文件擴(kuò)展名防止格式錯(cuò)誤
  • 內(nèi)存優(yōu)化:及時(shí)釋放FileReader實(shí)例避免內(nèi)存泄漏

六、常見問題排查

問題現(xiàn)象解決方案
文件讀取失敗確保使用readAsBinaryString而非readAsArrayBuffer
中文亂碼設(shè)置工作簿編碼為utf-8
IE瀏覽器兼容添加polyfill支持FileReader API
大數(shù)據(jù)量卡頓采用Web Workers進(jìn)行異步處理

七、擴(kuò)展方向

  1. 支持多工作表選擇
  2. 自定義導(dǎo)出模板
  3. 在線預(yù)覽Excel內(nèi)容
  4. 復(fù)雜公式計(jì)算支持

到此這篇關(guān)于前端讀取與導(dǎo)出XLSX文件的完整指南的文章就介紹到這了,更多相關(guān)前端讀取與導(dǎo)出XLSX內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)元素漸入漸出動(dòng)畫效果封裝方法

    微信小程序?qū)崿F(xiàn)元素漸入漸出動(dòng)畫效果封裝方法

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)元素漸入漸出動(dòng)畫效果封裝方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 聊聊鑒權(quán)那些事(推薦)

    聊聊鑒權(quán)那些事(推薦)

    這篇文章主要介紹了聊聊鑒權(quán)那些事(推薦),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 前端算法題解leetcode114二叉樹展開為鏈表

    前端算法題解leetcode114二叉樹展開為鏈表

    這篇文章主要為大家介紹了前端算法題解leetcode114二叉樹展開為鏈表,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • JS+CSS實(shí)現(xiàn)的經(jīng)典tab選項(xiàng)卡效果代碼

    JS+CSS實(shí)現(xiàn)的經(jīng)典tab選項(xiàng)卡效果代碼

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)的經(jīng)典tab選項(xiàng)卡效果代碼,通過簡單的鼠標(biāo)事件觸發(fā)js函數(shù)實(shí)現(xiàn)針對(duì)頁面元素的遍歷與樣式變換功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • TypeScript中的類型斷言和非空斷言的使用方法

    TypeScript中的類型斷言和非空斷言的使用方法

    類型斷言是一種方式,可以手動(dòng)指定變量的類型,非空斷言是一種類型斷言的特殊形式,這篇文章主要給大家介紹TypeScript 中的類型斷言和非空斷言的使用方法,需要的朋友可以參考下
    2023-07-07
  • JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個(gè)技巧

    JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個(gè)技巧

    這篇文章主要介紹了JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個(gè)技巧,JavaScript引擎是執(zhí)行 JavaScript 代碼的程序或解釋器。JavaScript引擎可以實(shí)現(xiàn)為標(biāo)準(zhǔn)解釋器,或者以某種形式將JavaScript編譯為字節(jié)碼的即時(shí)編譯器。,需要的朋友可以參考下
    2019-06-06
  • JS中利用swiper實(shí)現(xiàn)3d翻轉(zhuǎn)幻燈片實(shí)例代碼

    JS中利用swiper實(shí)現(xiàn)3d翻轉(zhuǎn)幻燈片實(shí)例代碼

    大家都知道Swiper(Swiper master)是目前應(yīng)用較廣泛的移動(dòng)端網(wǎng)頁觸摸內(nèi)容滑動(dòng)js插件。下面這篇文章主要給大家介紹了在JS中利用swiper實(shí)現(xiàn)3d翻轉(zhuǎn)幻燈片的相關(guān)資料,文中給出了完整的示例代碼供大家參考學(xué)習(xí),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • JS實(shí)現(xiàn)購物車基本功能

    JS實(shí)現(xiàn)購物車基本功能

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)購物車基本功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • JS實(shí)現(xiàn)顯示帶倒影的圖片橫排居中放大展示特效實(shí)例【測(cè)試可用】

    JS實(shí)現(xiàn)顯示帶倒影的圖片橫排居中放大展示特效實(shí)例【測(cè)試可用】

    這篇文章主要介紹了JS實(shí)現(xiàn)顯示帶倒影的圖片橫排居中放大展示功能,可實(shí)現(xiàn)點(diǎn)擊圖片及點(diǎn)擊左右按鈕滑動(dòng)切換的效果,涉及javascript針對(duì)鼠標(biāo)事件的響應(yīng)及頁面元素動(dòng)態(tài)操作相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • element-ui 時(shí)間選擇器限制范圍的實(shí)現(xiàn)(隨動(dòng))

    element-ui 時(shí)間選擇器限制范圍的實(shí)現(xiàn)(隨動(dòng))

    這篇文章主要介紹了element-ui 時(shí)間選擇器限制范圍(隨動(dòng)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01

最新評(píng)論

屯门区| 冀州市| 安龙县| 山东省| 高清| 余姚市| 耿马| 保亭| 云南省| 武胜县| 河南省| 凤城市| 社会| 铜陵市| 光泽县| 惠安县| 平罗县| 鲁甸县| 鄂托克旗| 涡阳县| 类乌齐县| 揭西县| 屏边| 屏山县| 永靖县| 江油市| 吉木萨尔县| 永平县| 忻州市| 顺平县| 绥棱县| 亚东县| 比如县| 宝鸡市| 莱州市| 千阳县| 平潭县| 浦县| 益阳市| 闽侯县| 嘉义县|