首页 > 编程语言 >在浏览器和node中使用 GitHub的js-xlsx库进行Excel文件处理(一)

在浏览器和node中使用 GitHub的js-xlsx库进行Excel文件处理(一)

时间:2023-04-11 10:57:17浏览次数:40  
标签:node xlsx GitHub const todayDate worksheet Excel js

1.简介

js-xlsx 库是目前 Github 上 star 数量最多的处理 Excel 的库,功能强大,提供了各种对表格的操作,但是这个项目文档有些乱,提供的demo也只具备最基本的功能。

Demo地址: http://oss.sheetjs.com/js-xlsx
Github上源码地址: http://git.io/xlsx

支持解析的格式有:

Excel 2007+ XML Formats (XLSX/XLSM)
Excel 2007+ Binary Format (XLSB)
Excel 2003-2004 XML Format (XML “SpreadsheetML”)
Excel 97-2004 (XLS BIFF8)
Excel 5.0/95 (XLS BIFF5)
OpenDocument Spreadsheet (ODS)

支持输出格式有:

XLSX
CSV (and general DSV)
JSON and JS objects (various styles)

2.安装

1.在node环境中,加载xlsx的模块只包含基本的特性,如果需要用到一些不常见额外特性,得自己安装。

2.在浏览器中,可以添加js引用来使用这些额外的特性。比如:

<script src="dist/cpexcel.js"></script>
<script src="dist/ods.js"></script>

这些额外特性文件都包含在源码的dist/ directory文件夹里面。在这个文件夹里面,还有xlsx的各种版本核心代码,完整版,精简版,压缩版等。

3.xlsx.js使用了ES5的功能,比如Array和forEach等,为了兼容低版本的浏览器,使用了shim技术。在加载xlsx.js文件之前加载shim.js(在dist/ directory文件夹里面),还有xlsx只能解析xls,也就是97-03的excel表格,如果要解析xlsx,也就是03之后的excel表格,需要引入jszip.js文件,而且需要在xlsx之前加载。如下:

<script src="jszip.js"></script>
<script src="shim.js"></script>
<script src="xlsx.js"></script> 

 

名词解释:
workbook对象:指的是整份 Excel 文档。我们在使用 js-xlsx 读取 Excel 文档之后就会获得 workbook 对象。
worksheet 对象:指的是 Excel 文档中的表。我们知道一份 Excel 文档中可以包含很多张表,而每张表对应的就是 worksheet 对象。
cell 对象:指的就是 worksheet 中的单元格,一个单元格就是一个 cell 对象。

3.解析表格

接下来会一步步分析怎么解析操作表格。node环境、浏览器环境分开讲。

1) node环境中

1.安装xlsx模块,命令行窗口中输入:npm install xlsx

2.用 XLSX.readFile 打开 Excel 文件,返回 workbook

首先加载xlsx模块,然后使用readFile打开excel文件,特别需要注意路径问题,如果没有指明路径,

readFile默认打开excel文件的根路径是你安装node模块的位置(电脑里面node_modules文件的位置),而不是你项目源代码文件的路径。我的excel文件不在默认的根路径下,使用相对路径(注意斜杠方向啊):

这边我是放在项目内的某个文件夹内,由于我的文件是根据时间来生成的 所以加了一个日期参数

const todayDate = new Date()
        console.log(todayDate)
        const year = todayDate.getFullYear()
        let month = todayDate.getMonth()+1
        if(month<9){
            month='0'+month
        }
        const date = todayDate.getDate()
        const workbook1 = xlsx.readFile("./testdata/downloadResources/OPS_A_RealInfo-"+year+month+date+".csv")

3.用 workbook.SheetNames 获取表名,代码:

const sheetNames = workbook1.SheetNames
console.log('sheetNames',sheetNames)

console.log(sheetNames)打印如图所示:

 

 

4.用 workbook.Sheets[xxx] 通过表名获取表格,代码:

const worksheet = workbook1.Sheets[sheetNames[i]]
const worksheet = workbook1.Sheets[sheetNames[0]]
console.log(worksheet)

 

 可以看出,worksheet是一个对象,里面包含名称/值对,值对的值仍然是对象。

所以如果要遍历所有的数据,我们可以先forEach所有的表,再遍历表里面的所有的值

参考的源码:https://github.com/fortime/js-xlsx

 const sheet_name_list = workbook1.SheetNames;
        sheet_name_list.forEach(function(y) { /!* iterate through sheets *!/
            const worksheet = workbook1.Sheets[y];
            for (let z in worksheet) {
                /!* all keys that do not begin with "!" correspond to cell addresses *!/
                if(z[0] === '!') continue;
/* 带!的属性(比如!ref)是表格的特殊属性,用来输出表格的信息,不是表格的内容,所以去掉 */ // console.log(y + "!" + z + "=" + JSON.stringify(worksheet[z].v)); console.log(z,JSON.stringify(worksheet[z].v)); } });

输出的运行结果:

 

 

如果只是检验其中的某一些列的话,就只需要 打开指定的文件 并且对值进行assert校验

   async readExcelData() {
        const todayDate = new Date()
        const year = todayDate.getFullYear()
        let month = todayDate.getMonth()+1
        if(month<9){
            month='0'+month
        }
        const date = todayDate.getDate()
        const workbook1 = xlsx.readFile("./testdata/downloadResources/OPS_A_RealInfo-"+year+month+date+".csv")
        const sheetNames = workbook1.SheetNames;
        const worksheet= workbook1.Sheets[sheetNames[0]]
        const cell_C2 = worksheet['C2'].v
        const cell_C3 = worksheet['C3'].v
        const cell_H2 = worksheet['H2'].v
        const cell_H3 = worksheet['H3'].v
        assert.equal(cell_C2,'OPS-A1')
        assert.equal(cell_C3,'OPS-A1')
        assert.equal(cell_H2,'DC:62:94:19:4D:FD')
        assert.equal(cell_H3,'DC:62:94:19:4D:FD')
    }

 

如果要自动生成和处理excel表 可以参考这个文章

https://blog.csdn.net/guochunyang/article/details/108845980

 

 

 

 

 

标签:node,xlsx,GitHub,const,todayDate,worksheet,Excel,js
From: https://www.cnblogs.com/chenxiaomeng/p/17305459.html

相关文章

  • 全网最详细中英文ChatGPT-GPT-4示例文档-智能聊天机器人从0到1快速入门——官网推荐的
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 前端学习 node 快速入门 系列 —— 项目版权格式化
    其他章节请看:前端学习node快速入门系列项目版权格式化需求替换整个项目的版权信息,替换文件为.c和.h结尾。分析版权信息通常都在文件开头,通过是否有copyright来判断是替换版权还是新增版权实现通过node读取文件,过滤出.c、.h文件,然后用正则判断是替换版权还......
  • git配置代理连接github
    目前,不挂梯子git总是连接不到github,因而需要代理。查看当前全局配置:>gitconfig--global-l取消当前的代理端口:>gitconfig--global--unsethttp.proxy>gitconfig--global--unsethttps.proxy查看SSR的代理地址和端口,确定本机端口1080转发:配置代理端口......
  • xlsxwriter模块实现向Excel表写数据
    xlsxwriter模块实现向Excel表写数据导入第三方库importxlsxwriterasxw写数据#创建工作簿workbook=xw.Workbook(filename)#创建子表worksheet1=workbook.add_worksheet("sheet1")#激活表worksheet1.activate()#设置表头title=['序号','项目','数据&#......
  • Node.js安装
    一、安装1、安装包下载https://nodejs.org/download/release/v16.20.0/2、将node-v16.20.0-linux-x64.tar.gz上传至/opt/soft目录3、解压cd/opt/soft&&tar-zxvfnode-v16.20.0-linux-x64.tar.gz-C/opt/module/4、重命名cd/opt/module&&mvnode-v16.20.0-li......
  • Github使用教程
    1.注册Github账号注册Github账号的步骤打开Github官网(https://github.com/)。点击右上角的“Signup”按钮。输入用户名、邮箱地址和密码。选择账户类型,可以选择个人账户或组织账户。点击“Createaccount”按钮。验证邮箱地址,Github会向你的邮箱发送一封验证邮件,点击邮件......
  • git 配置多端多个账号(码云、github、gitlab)
    首先确认已安装Git,可以通过git–version命令可以查看当前安装的版本。为同一个电脑,配置多个git账号,其整体流程如下:清空默认的全局user.name和user.email为不同的git账户生成不同的ssh-key将以上的ssh-key分别添加到ssh-agent信任列表添加以上的公钥到自己的......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-食谱智能生成从0到1快速入门——官网推荐的48
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-文章大纲智能生成器从0到1快速入门——官网推
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 碉堡!“万物皆可分”标记模型上线「GitHub 热点速览」
    这周有个让人眼前一亮的图像识别模型segment-anything,它能精细地框出所有可见物体,它标记出的物体边界线清晰可见。如此出色的模型,自然获得了不少人的赞赏,开源没几天,就拿下了18k+的star,而上周开源不到48小时获得35k+star的推特推荐算法,本周也成功突破50k+关卡。依旧是......