今天用的是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通過三種方法寫入數據, 這兩種方法均會對數字、字符串、null和undefined、日期等類型進行自動解析:
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代碼:
// 解析選擇的表格
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)
},
