日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

使用 js-xlsx 处理 Excel 文件

發布時間:2023/12/13 综合教程 24 生活家
生活随笔 收集整理的這篇文章主要介紹了 使用 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 }來獲取單元格,RC分別代表從 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

總結

以上是生活随笔為你收集整理的使用 js-xlsx 处理 Excel 文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。