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

React+Ant Design前端實(shí)現(xiàn)讀取與導(dǎo)出Excel文件

 更新時(shí)間:2025年08月18日 10:26:54   作者:小小愿望  
在實(shí)際業(yè)務(wù)場景中,我們經(jīng)常需要處理 Excel 文件的導(dǎo)入導(dǎo)出,本文將以 React + Ant Design 項(xiàng)目為例,演示如何通過 xlsx 庫實(shí)現(xiàn)以下功能,希望對大家有所幫助

一、前言

在實(shí)際業(yè)務(wù)場景中,我們經(jīng)常需要處理 Excel 文件的導(dǎo)入導(dǎo)出。無論是數(shù)據(jù)填報(bào)、報(bào)表生成還是數(shù)據(jù)分析,Excel 作為一種廣泛使用的電子表格格式,與前端應(yīng)用的結(jié)合愈發(fā)緊密。本文將以 React + Ant Design 項(xiàng)目為例,演示如何通過 xlsx 庫實(shí)現(xiàn)以下功能:

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

二、技術(shù)棧

React: 構(gòu)建用戶界面,憑借其高效的渲染機(jī)制和豐富的生態(tài)系統(tǒng),成為現(xiàn)代 Web 開發(fā)的熱門選擇。

Ant Design: UI 組件庫,提供了一套美觀且易用的 UI 組件,大大加快了開發(fā)速度。

xlsx (SheetJS): Excel 文件處理庫,功能強(qiáng)大,支持多種 Excel 操作,如讀寫、格式化等。

三、準(zhǔn)備工作

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

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

此命令會創(chuàng)建一個(gè)基于 TypeScript 的 React 項(xiàng)目,并為后續(xù)開發(fā)做好準(zhǔn)備。

2. 安裝依賴

npm install antd @ant-design/icons xlsx

安裝所需的依賴包,包括 Ant Design 組件庫、圖標(biāo)庫以及用于處理 Excel 文件的 xlsx 庫。

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

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

合理的目錄結(jié)構(gòu)有助于項(xiàng)目的組織和維護(hù)。

四、核心實(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 = '請選擇正確的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. 文件讀取流程

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

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

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

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

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

到此這篇關(guān)于React+Ant Design前端實(shí)現(xiàn)讀取與導(dǎo)出Excel文件的文章就介紹到這了,更多相關(guān)React讀取與導(dǎo)出Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • react路由配置方式詳解

    react路由配置方式詳解

    本篇文章主要介紹了react路由配置方式詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 淺析history 和 react-router 的實(shí)現(xiàn)原理

    淺析history 和 react-router 的實(shí)現(xiàn)原理

    react-router 版本更新非???但是它的底層實(shí)現(xiàn)原理確是萬變不離其中,在本文中會從前端路由出發(fā)到 react-router 原理總結(jié)與分享,本文對history 和 react-router實(shí)現(xiàn)原理講解的非常詳細(xì),需要的朋友跟隨小編一起看看吧
    2023-08-08
  • React組件三大核心屬性State?props?Refs介紹

    React組件三大核心屬性State?props?Refs介紹

    組件實(shí)例的三大核心屬性是:State、Props、Refs。類組件中這三大屬性都存在。函數(shù)式組件中訪問不到?this,也就不存在組件實(shí)例這種說法,但由于它的特殊性(函數(shù)可以接收參數(shù)),所以存在Props這種屬性
    2023-02-02
  • React組件重構(gòu)之嵌套+繼承及高階組件詳解

    React組件重構(gòu)之嵌套+繼承及高階組件詳解

    這篇文章主要給大家介紹了關(guān)于React組件重構(gòu)之嵌套+繼承及高階組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 詳解如何在React中優(yōu)雅的使用addEventListener

    詳解如何在React中優(yōu)雅的使用addEventListener

    這篇文章主要為大家詳細(xì)介紹了如何在React中優(yōu)雅的使用addEventListener,文中的示例代碼簡潔易懂,對大家學(xué)習(xí)React有一定的幫助,需要的可以參考一下
    2023-01-01
  • 淺談React?Refs?使用場景及核心要點(diǎn)

    淺談React?Refs?使用場景及核心要點(diǎn)

    本文主要介紹了React?Refs?使用場景及核心要點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 記一個(gè)React.memo引起的bug

    記一個(gè)React.memo引起的bug

    memo可以自己決定是否更新,但它是一個(gè)函數(shù)組件而非一個(gè)類,本文主要介紹了React.memo引起的bug,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-03-03
  • React如何自定義輪播圖Carousel組件

    React如何自定義輪播圖Carousel組件

    這篇文章主要介紹了React如何自定義輪播圖Carousel組件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • React Store及store持久化的使用教程

    React Store及store持久化的使用教程

    這篇文章主要介紹了React Store及store持久化的使用教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • React tsx生成隨機(jī)驗(yàn)證碼

    React tsx生成隨機(jī)驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了React tsx生成隨機(jī)驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評論

日土县| 龙井市| 天柱县| 闸北区| 宣威市| 蒲江县| 元阳县| 仁化县| 彭水| 莲花县| 缙云县| 绥化市| 五原县| 舒兰市| 化隆| 巴南区| 平原县| 通城县| 湄潭县| 通化县| 礼泉县| 高要市| 苍梧县| 玉林市| 东丽区| 武冈市| 嘉兴市| 双牌县| 光山县| 望江县| 惠水县| 武安市| 缙云县| 同德县| 柘城县| 金昌市| 高清| 永新县| 贺州市| 江孜县| 章丘市|