用node读取Excel指定sheet并输出想要的数据结构

数据部门维护了一个Excel表格,前端显示需要其中一个sheet的数据,这个表老是更新,想着用node写一个程序,每次数据部门更新直接跑一遍。直接上代码:

复制代码
const XLSX = require('xlsx');
const path = require('path');
const fs = require('fs');

// 读取Excel文件
const excelFile = '要读取的Excel文件路径';
const sheetName = '指定sheet的名称';  // 指定读取的表格名称

// 构造Excel文件的绝对路径
const excelFilePath = path.resolve(__dirname, excelFile);

// 读取Excel文件内容
const workbook = XLSX.readFile(excelFilePath);

// 获取指定名称的表格
const worksheet = workbook.Sheets[sheetName];

// 在使用 xlsx 库读取 Excel 文件时,每个单元格的数据被存储在 worksheet 对象的属性中,属性名是单元格的坐标(例如 'A1'、'B2' 等)。这些属性的值是包含单元格数据的对象,而不是直接的数据值。
// 这样设计的目的是为了提供更多的灵活性和功能,使得可以轻松地访问单元格的内容、样式、公式等信息。每个单元格的数据对象中通常包含以下属性:
// v:单元格的值(value)。
// t:单元格的类型(type),可能是 's'(字符串)、'n'(数字)、'b'(布尔值)等。
// r:原始值(raw value)。
// h:HTML 格式的值(HTML value)。
// w:显示值(display value)。
// 因此,当你访问 worksheet 对象的属性时,实际上获取到的是一个包含单元格数据的对象,而不是直接的数据值。为了方便获取数据值,你需要从单元格数据对象中提取出对应的值属性(通常是 v 属性)。
// 如果你希望直接获取单元格的数据值而不是包含数据的对象,可以使用 v 属性来访问。
// 所以这里需要先获取表格的有数据的行数
const dataRange = worksheet['!ref'];

// 解析范围字符串,获取数据的起始行和结束行
const [startCell, endCell] = dataRange.split(':');
const startRow = parseInt(startCell.match(/\d+/)[0], 10);
const endRow = parseInt(endCell.match(/\d+/)[0], 10);

// 计算数据行数
const numRowsWithData = endRow - startRow + 1;

// 读取表格中的指定列数据
const selectedColumns = ['A', 'C', 'E'].map(col => {
    let arr = []
    for (let i = 0; i < numRowsWithData; i++) {
        arr.push(worksheet[col + '' + i] && worksheet[col + '' + i].v ? worksheet[col + '' + i].v : '')
    }
    return arr;
})

// 这里只是读取出来数据并放入数组,在这里还可以进行其他操作,整理成你想要的数据格式。

// 转化成json字符串
// JSON.stringify 第二个参数是可选的 如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为 null 或者未提供,则对象所有的属性都会被序列化。
// 第三个参数指定缩进用的空白字符串,用于美化输出。
const jsonData = JSON.stringify(selectedColumns, null, 2);

// 最后写入 JSON 文件
const outputFile = 'output.json';
fs.writeFileSync(outputFile, jsonData);
复制代码

搞定。

posted on   hanguahannibk  阅读(210)  评论(1编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示