使用 js-xlsx 處理 Excel 文件


SheetJS js-xlsx 是目前關注度最高的處理 Excel 的 JavaScript 庫。支持 XLS/XLSX/CSV/ODS 等多種表格格式,功能強大,但文檔看起來有點累。本文主要是介紹下 js-xlsx 的基本概念和操作。

基本概念

workbook
工作簿
worksheet
工作表
cell
單元格
A1 標記
引用單元格時所使用的地址格式(如:A1、C7)

基本用法

讀取文件

import XLSX from 'xlsx'; const wb = XLSX.readFile('path/to/file.xlsx'); // 返回 workbook

workbook 對象結構如下:

{ SheetNames: ['Sheet1', 'Sheet2'], Sheets: { 'Sheet1': { ... }, 'Sheet2': { ... } }, Props: { ... }, .... } 

獲取工作表

根據表名獲取對應的工作表

const ws = wb.Sheets[workbook.SheetNames[0]]; // 返回 worksheet

worksheet 對象結構如下:

{ '!ref': 'A1:C7', A1: { ... }, B1: { ... }, .... } 

其中 worksheet['!ref'] 是工作表的有效范圍(基於 A-1)。

獲取單元格

通過 worksheet[address_of_cell] 獲取單元格,也就是通過 A1 標記的鍵名來獲取單元格:

const cell = wb['C7'];

或者通過地址對象 { r: R, c: C } 來獲取單元格,R 和 C 分別代表從 0 開始的行和列的索引。

// XLSX.utils 中的 encode_cell/decode_cell 方法可以轉換單元格地址 const cell = wb[XLSX.utils.encode_cell({ r: 7, c: 2 })]; // 等同於 wb['C7']

cell 對象結構如下:

{ v: 'C7SKY', w: 'C7SKY', t: 's', .... } 

編輯單元格

cell.v = '小影志'; delete cell.w;

需要注意的是,內建的導出工具會優先嘗試使用 w 的值,所以如果之后要使用導出功能,在修改值時應該同時刪除 w 按鍵或設置為 undefined

刪除行/刪除列

js-xlsx 並沒有提供刪除行/刪除列的功能,所以需要我們自行實現:

function encodeCell(r, c) { return XLSX.utils.encode_cell({ r, c }); } function deleteRow(ws, index) { const range = XLSX.utils.decode_range(ws['!ref']); for (let row = index; row < range.e.r; row++) { for (let col = range.s.c; col <= range.e.c; col++) { ws[encodeCell(row, col)] = ws[encodeCell(row + 1, col)]; } } range.e.r--; ws['!ref'] = XLSX.utils.encode_range(range.s, range.e); } function deleteCol(ws, index) { const range = XLSX.utils.decode_range(ws['!ref']); for (let col = index; col < range.e.c; col++) { for (let row = range.s.r; row <= range.e.r; row++) { ws[encodeCell(row, col)] = ws[encodeCell(row, col + 1)]; } } range.e.c--; ws['!ref'] = XLSX.utils.encode_range(range.s, range.e); }

XLSX.utils 中的 encode_range / decode_range 方法用來轉換單元格范圍(A2:C7 相當於 {s:{c:0, r:1}, e:{c:2, r:6}})。

保存/導出

通過 XLSX.writeFile(wb, filename) 就可以生成新的表格文件:

XLSX.writeFile(wb, 'output.xlsx');

而 XLSX.utils.sheet_to_* 則提供了多種導出格式(csv/txt/html/json/formulae),以下是導出 JSON 文件的代碼:

const data = XLSX.utils.sheet_to_json(ws); fs.writeFileSync('path/to/export.json', JSON.stringify(data, null, 4));

最后,附上 js-xlsx 的 GitHub 倉庫地址 SheetJS/js-xlsx 和 SheetJS 官網

 

轉自 https://c7sky.com/parse-spreadsheet-with-js-xlsx-in-node-js.html


免責聲明!

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



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