利用sheet.js解析excel文件


 來源於:https://www.cnblogs.com/GoTing/p/13725612.html

今天用的是Sheet.js的xlsx.core.min.js

官方文檔地址:https://github.com/SheetJS/sheetjs

主要功能

  • 解析符合格式的數據
  • 導出符合格式的數據
  • 利用中間層操作數據

讀取文件的方法

    • XLSX.read(data, read_options)://讀取data並解析。
    • XLSX.readFile(filename, read_options)://讀取filename文件並解析。
  • read_options
    • type:
      • base64: 以base64方式讀取;

      • binary: BinaryString格式(byte n is data.charCodeAt(n))

      • string: UTF8編碼的字符串;

      • buffer: nodejs Buffer;

      • array: Uint8Array,8位無符號數組;

      • file: 文件的路徑(僅nodejs下支持);

 

worksheet轉換數據格式

  • XLSX.utils.sheet_to_csv(worksheet):將表格數據轉化為csv格式。
  • XLSX.utils.sheet_to_txt(worksheet):將表格數據轉化為生成由utf16編碼的txt格式。
  • XLSX.utils.sheet_to_html(worksheet):將表格轉化為html文件。
  • XLSX.utils.sheet_to_json(worksheet): 將表格數據轉化為json格式。

表格操作

  • XLSX.utils.aoa_to_sheet(Array[][]):將二維數組轉化為worksheet對象。
  • XLSX.utils.json_to_sheet(Object):將js對象轉化為worksheet對象。
  • XLSX.utils.table_to_sheet(HTML):將DOM節點轉化為worksheet對象(一般為table元素、tr元素和th元素)。
  • XLSX.utils.sheet_add_aoa(worksheet, Array[][]):將二維數組中的數據添加到已有的worksheet中。
  • XLSX.utils.sheet_add_json(worksheet, Object):將js對象中的數據添加到已有的worksheet中。
  • XLSX.utils.book_append_sheet(workbook, worksheet, sheetname):將worksheet對象添加到workbook中, 並命名為sheetname

寫入數據,導出文件

SheetJS通過三種方法寫入數據, 這兩種方法均會對數字、字符串、nullundefined、日期等類型進行自動解析:

  • XLSX.write(workbook, write_options)
    •   按照workbook中的數據轉化為文件所需要的格式, 但不生成文件。
    •   第一個參數:workbook對象, 第二個參數:設置對象(對生成文件格式的一些設置)
    •        場景:需要通過異步請求來修改服務器上的文件
  • XLSX.writeFile(workbook, filename[, write_options])
    •   按照workbook對象生成文件。若在瀏覽器端, 會自動下載該文件。在Node端, 會自動生成該文件並保存到本地。
    •        第一個參數:workbook對象, 第二個參數:生成文件的文件名,第三個參數:可選,設置對象(對生成文件格式的一些設置)
  • XLSX.writeFileAsync(filename, workbook, o, cb): 按照workbook對象生成文件。當o執行完畢后, 調用cb回調函數。
    有關write_options的內容詳見write_options

 

 

 

 

今天完成的任務是這樣的

1.選擇文件 前端解析出excel文檔內容 (只針對第一行為表頭的表格,多個表只取第一個表)

根據解析的數據 和字段一一匹配,用於批量更新操作

 

 

 

 js代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 解析選擇的表格
             excelFn(file) {
                 const  fileReader =  new  FileReader();
                 var  that =  this ;
                 fileReader.onload = (ev) => {
                     const  data = ev.target.result;
                     // 讀取整個文件數據
                     const  workbook = XLSX.read(data, {
                         type:  'binary' ,
                     })
                         // 取第一張表
                     const  wsname = workbook.SheetNames[0]                                                  // 獲取到名為wsname的表
                                           // let worksheet = workbook.Sheets[wsname];
                     var  outArray = [], outTitArray = [];
                                             // 生成json表格內容
                     const  ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname])
                                            // 輸出表格對應位置是什么值
                     // const ws1 = XLSX.utils.sheet_to_slk(workbook.Sheets[wsname])
                                            // 生成HTML輸出
                     // const ws2 = XLSX.utils.sheet_to_html(workbook.Sheets[wsname])
                                             // 生成分隔符分隔值輸出
                     // const ws3 = XLSX.utils.sheet_to_csv(workbook.Sheets[wsname])
                                             // 生成公式列表(具有值回退)
                     // const ws4 = XLSX.utils.sheet_to_formulae(workbook.Sheets[wsname])
                                             // 生成UTF16格式的文本
                     // const ws5 = XLSX.utils.sheet_to_txt(workbook.Sheets[wsname])
                     //判斷是否為空表
                     if  (ws.length < 1) {
                         common.nameEroor($( '#excelBtn' ),  '表格內容為空' )
                     else  {
                                                   //獲取處理過的數據
                         ws.forEach((item, index) => {
                             for  ( var  itemName  in  item) {
                                 var  obj = {};
                                 obj.name = itemName;
                                 obj.value = item[itemName]
                                 outArray.push(obj);
                                 
                             }
                         })
 
                         console.log(outArray)
                         that.matchView(outArray);
                         outExcel = outArray;
                     }
                 }
                 fileReader.readAsBinaryString(file)
             },                                                                               

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM