首页 > 编程语言 >用node读取Excel指定sheet并输出想要的数据结构

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

时间:2024-04-08 14:47:45浏览次数:16  
标签:node sheet 读取 worksheet 单元格 Excel const 属性

数据部门维护了一个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);

搞定。

标签:node,sheet,读取,worksheet,单元格,Excel,const,属性
From: https://www.cnblogs.com/junlinglife/p/18121092

相关文章

  • Lumos学习王佩丰Excel第二讲:单元格格式设置
    今天学会GIF录制了,分享知识会更简便一些,话不多说,开始吧~一、美化表格1、设置单元格格式的路径从菜单栏进入:选中区域(单元格)-右键“设置单元格格式”:2、合并单元格合并一行批量合并多行,选择跨越合并3、对齐方式对齐方式这边应该很好理解吧,就是文字在单元格中的具......
  • Lumos学习王佩丰Excel第一讲:认识Excel
    最近发现自己在操作excel的一些特殊功能时会有些不顺手,所以索性找了一个比较全的教程(王佩丰excel24讲)拿来学习,刚好形成文档笔记,分享给有需要但没有时间看视频的朋友们。整体笔记以王老师授课的知识点去记录,加入一些自己的理解和由于版本问题(我使用的是MicrosoftOffice家庭和......
  • WebUI测试-获取html页面表格数据并存到Excel中
    fromselenium.webdriver.supportimportexpected_conditionsasECimportpandasaspdtable=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,'table')))#表格元素rows=table.find_elements(By.CSS_SELECTOR,"tbody......
  • node.js 安装及配置环境变量只看此文
    转发:https://blog.csdn.net/u014212540/article/details/1302606791.node.js安装2.Node.js环境变量配置3.国内镜像网站配置4.npm、yarn、pnpm、nrm常用命令4.1nrm常用命令:4.2npm常用指令:4.3yarn常用命令:5.常规上传至npm公共注册表方法(npmpublish/yarnpublish)......
  • 多次复制Excel符合要求的数据行:Python批量实现
      本文介绍基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,并将所得结果保存为新的Excel表格文件的方法。  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件,在本文中我们就以.csv格式的文件为例;其中,如下图所......
  • 计算机毕业设计项目:springboot 智能答疑系统 96852(开题答辩+程序定制+全套文案 )上万套
    毕业论文(设计) 题   目springboot智能答疑系统学   院       XXXXX     专业班级   XXXXX学生姓名       XXXX    指导教师            XXXX          撰写日期:202 年 月 日目 录摘要......
  • 计算机毕业设计项目:新生儿疫苗接种管理系统 87023(开题答辩+程序定制+全套文案 )上万套
    PHP新生儿疫苗接种管理系统系   院XXXX学科门类XXX专   业 XXX班级XXX学   号XXX姓   名XXX指导教师XXX教师职称XXX摘 要新生儿计划免疫是根据危害儿童健康的一些传染病,利用安全有效的疫苗,按照规定的免疫程序进行预防接种,......
  • WPS Excel VBA 按条件(小区名称、部门名称)统计业主满意度调查表(二维表格)数据
    WPSExcelVBA按条件(小区名称、部门名称)统计业主满意度调查表(二维表格)数据Excel->开发工具->查看代码->插入模块'''''''''''''''''''''''''''''......
  • VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此
    解决方案:1.用get-ExecutionPolicy命令在vscode终端查询状态get-ExecutionPolicy返回Restricted说明状态是禁止的2.用set-ExecutionPolicyRemoteSigned命令更改状态即可set-ExecutionPolicyRemoteSigned此时再输入get-ExecutionPolicy,显示RemoteSigned即可正常执......
  • 导出多个文件到一个Excel中的不同sheets
    @ApiOperation(value="导出多个文件到一个Excel中的不同sheets",produces="application/octet-stream")@PostMapping("/exportMultipleExcel")publicvoidexportMultipleExcel(@RequestBodyDataCountVOdataCountVO,HttpServletResponseresponse)t......