国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

React實(shí)現導入導出Excel文件

發(fā)布時(shí)間:2021-08-17 12:16 來(lái)源: 閱讀:0 作者:HearLing 欄目: JavaScript 歡迎投稿:712375056

目錄

      表示層

      這里我是使用的是antd的Upload上傳組件

      引用antd部分代碼

      import { Button,Table,Upload } from 'antd';
      
      <Upload {...props} fileList={state.fileList}>
          <Button type="primary" >Excel導入</Button>
      </Upload>
      
      <Button type="primary" onClick={handleExport}>Excel導出</Button>
      
      

      業(yè)務(wù)層

      首先分析一下工作:

      • 導入Excel工作:用戶(hù)上傳Excel表格,將表格內容轉換為json對象方便后端處理,后端將數據存儲數據庫;
      • 導出Excel工作:獲取后端json格式數據,前端將數據轉換為sheet工作薄對象,生成的對象轉換為Excel表格下載導出;

      下面就是技術(shù)層面的細節

      核心插件xlsx

      安裝xlsx:npm install xlsx --save-dev

      主要介紹用到的核心api:

      • XLSX.read(data,type) // 解析Excel數據
      • workbook.Sheets[workbook.SheetNames[0]] // 取到workbook對象中的第一個(gè)sheet表,規定用戶(hù)只有一個(gè)sheets,不理解workbook的下面有解釋
      • XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], {header:1,defval:''})// 將工作簿對象轉換為JSON對象數組,注意defval不設置‘'則默認值為empty
      • XLSX.utils.json_to_sheet(json) // 將json對象轉換為工作簿對象
      // workbook 理解:
      {
          SheetNames: ['sheet1', 'sheet2'],
          Sheets: {
              // worksheet
              'sheet1': {
                  // cell
                  'A1': { ... },
                  // cell
                  'A2': { ... },
                  ...
              },
              // worksheet
              'sheet2': {
                  // cell
                  'A1': { ... },
                  // cell
                  'A2': { ... },
                  ...
              }
          }
      }
      

      excel 導入

      核心代碼 :

      const f = file;
      const reader = new FileReader();
      reader.onload = function (e) {
          try{
              const datas = e.target.result;
              const workbook = XLSX.read(datas, {type: "binary",}); //解析datas
              const first_worksheet = workbook.Sheets[workbook.SheetNames[0]]; //是工作簿中的工作表的第一個(gè)sheet
              const jsonArr = XLSX.utils.sheet_to_json(first_worksheet, {header: 1,defval:''}); //將工作簿對象轉換為JSON對象數組
              handleImpotedJson(jsonArr)// 數組處理
              message.success('Excel上傳解析成功!')
          }catch(e){
            message.error('文件類(lèi)型不正確!或文件解析錯誤')
          } 
      };
      reader.readAsBinaryString(f);
      

      理解:

      • FileReader對象實(shí)例化file對象在onload事件里進(jìn)行處理
      • XLSX.read 解析data
      • XLSX.utils.sheet_to_json(first_worksheet, {header: 1,defval:''}) 將解析出的工作簿對象轉化為JSON對象

      excel 導出

      核心代碼:

      const downloadExcel = () =>{
          const json = handleExportedJson(data)
          const sheet = XLSX.utils.json_to_sheet(json);
          openDownloadDialog(sheet2blob(sheet,"Sheet1"), "下載文件.xls")
      }
      const handleExportedJson = (array) =>{...}  // 處理Json數據
      const openDownloadDialog = (url, saveName) =>{...} // 打開(kāi)下載
      const sheet2blob = (sheet, sheetName) =>{...} // 轉成blob類(lèi)型
      

      理解:

      • 得到處理后的json格式數據
      • XLSX.utils.json_to_sheet(json) 轉換成sheet工作簿對象
      • sheet2blob(sheet,saveName) 將工作簿對象轉換成 blob
      • openDownloadDialog 創(chuàng )建blob地址通過(guò)<a>標簽實(shí)現下載動(dòng)作

      excel 導出插件(js-export-excel)

      之前為啥沒(méi)放自實(shí)現的代碼,那不是因為發(fā)現有好用的插件嘛,代碼很簡(jiǎn)單。

      核心代碼:

      // 直接導出文件
      let dataTable = [];  //excel文件中的數據內容
      let option = {};  //option代表的就是excel文件
      dataTable  = data;  //數據源
      option.fileName = "下載文件";  //excel文件名稱(chēng)
      console.log("data===",dataTable)
      option.datas = [
          {
              sheetData: dataTable,  //excel文件中的數據源
              sheetName: 'Sheet1',  //excel文件中sheet頁(yè)名稱(chēng)
              sheetFilter: ['id', 'name', 'belong', 'step','tag'],  //excel文件中需顯示的列數據
              sheetHeader: ['項目id', '項目名稱(chēng)', '所屬公司', '項目階段','項目標簽'],  //excel文件中每列的表頭名稱(chēng)
          }
      ]
      let toExcel = new ExportJsonExcel(option);  //生成excel文件
      toExcel.saveExcel();  //下載excel文件
      

      上為這個(gè)插件的基本用法,還支持導出Blob,支持壓縮等,詳細見(jiàn)官網(wǎng)
      解釋核心 option:

      • fileName 下載文件名(默認:download)
      • datas 數據:
      /*多個(gè)sheet*/
      /*每個(gè)sheet為一個(gè)object */
      [{
          sheetData:[], // 數據
          sheetName:'', // (非必需)sheet名字,默認為sheet1
          sheetFilter:[], //(非必需)列過(guò)濾(只有在 data 為 object 下起作用)
          sheetHeader:[] // 第一行,標題
          columnWidths: [] //(非必需)列寬,需與列順序對應
      }]
      
      

      瀏覽器支持:ie 10+ 我測試下來(lái)demo在chrom、Safari、IE下都是能用的。

      實(shí)現效果

      還有不懂得可以看

      結語(yǔ)

      到此這篇關(guān)于React實(shí)現導入導出Excel文件的文章就介紹到這了,更多相關(guān)React 導入導出Excel 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

      免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

      色翁荡熄又大又硬又粗又视频| 免费人成在线观看成人片| 呦系列视频一区二区三区| 亚洲国产精品ⅴa在线播放| 国产成人亚洲综合青青| 欲色影视天天一区二区三区色香欲|