国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Node.js利用js-xlsx處理Excel文件的方法詳解

2024-05-06 15:14:50
字體:
供稿:網(wǎng)友

簡介

本文介紹用 Node.js 中的 js-xlsx 庫來處理 Excel 文件。

js-xlsx 庫是目前 Github 上 star 數(shù)量最多的處理 Excel 的庫,功能強(qiáng)大,但上手難度稍大。文檔有些亂,不適合快速上手。

本文對 js-xlsx 庫進(jìn)行一定的總結(jié),并提供幾個實(shí)用的例子供讀者測試,學(xué)習(xí),交流。

安裝

$ npm install xlsx

一些概念

在使用這個庫之前,先介紹庫中的一些概念。

workbook 對象,指的是整份 Excel 文檔。我們在使用 js-xlsx 讀取 Excel 文檔之后就會獲得 workbook 對象。 worksheet 對象,指的是 Excel 文檔中的表。我們知道一份 Excel 文檔中可以包含很多張表,而每張表對應(yīng)的就是 worksheet 對象。 cell 對象,指的就是 worksheet 中的單元格,一個單元格就是一個 cell 對象。

它們的關(guān)系如下:

// workbook{ SheetNames: ['sheet1', 'sheet2'], Sheets: { // worksheet 'sheet1': {  // cell  'A1': { ... },  // cell  'A2': { ... },  ... }, // worksheet 'sheet2': {  // cell  'A1': { ... },  // cell  'A2': { ... },  ... } }}

用法

基本用法

XLSX.readFile 打開 Excel 文件,返回 workbook 用 workbook.SheetNames 獲取表名 用 workbook.Sheets[xxx] 通過表名獲取表格 按自己的需求去處理表格 生成新的 Excel 文件

具體用法

讀取 Excel 文件

import XLSX from 'xlsx';const workbook = XLSX.readFile('someExcel.xlsx', opts);

獲取 Excel 文件中的表

// 獲取 Excel 中所有表名const sheetNames = workbook.SheetNames; // 返回 ['sheet1', 'sheet2']// 根據(jù)表名獲取對應(yīng)某張表const worksheet = workbook.Sheets[sheetNames[0]];

通過 worksheet[address] 來操作表格,以 ! 開頭的 key 是特殊的字段。

// 獲取 A1 單元格對象let a1 = worksheet['A1']; // 返回 { v: 'hello', t: 's', ... }// 獲取 A1 中的值a1.v // 返回 'hello'// 獲取表的有效范圍worksheet['!ref'] // 返回 'A1:B20'worksheet['!range'] // 返回 range 對象,{ s: { r: 0, c: 0}, e: { r: 100, c: 2 } }// 獲取合并過的單元格worksheet['!merges'] // 返回一個包含 range 對象的列表,[ {s: { r: 0, c: 0 }, c: { r: 2, c: 1 } } ]

實(shí)戰(zhàn)

解析 Excel 生成 JSON

Tips 事實(shí)上,你可以直接通過 XLSX.utils.sheet_to_json(worksheet) 獲得同樣的結(jié)果

注意 本例子中假設(shè)表的第一行為字段名

const headers = {};const data = [];const keys = Object.keys(worksheet);keys // 過濾以 ! 開頭的 key .filter(k => k[0] !== '!') // 遍歷所有單元格 .forEach(k => {  // 如 A11 中的 A  let col = k.substring(0, 1);  // 如 A11 中的 11  let row = parseInt(k.substring(1));  // 當(dāng)前單元格的值  let value = worksheet[k].v;  // 保存字段名  if (row === 1) {   headers[col] = value;   return;  }  // 解析成 JSON  if (!data[row]) {   data[row] = {};  }  data[row][headers[col]] = value; });console.log(data); // [ { '姓名': 'test1', '年齡': 20 }, { '姓名': 'test2', '年齡': 10 } ... ]            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 景东| 肥乡县| 定结县| 定陶县| 汤原县| 徐州市| 府谷县| 屯门区| 鱼台县| 中卫市| 石林| 兰州市| 平塘县| 道孚县| 桃江县| 焦作市| 恭城| 平武县| 灯塔市| 南漳县| 仁寿县| 灵台县| 冷水江市| 车险| 衡水市| 丽水市| 六安市| 汉源县| 平果县| 扎鲁特旗| 沙洋县| 霍州市| 大厂| 凯里市| 烟台市| 玉龙| 文水县| 阿图什市| 陈巴尔虎旗| 蛟河市| 屏东市|