使用ExcelJS快速处理Node.js爬虫数据

什么是ExcelJS

ExcelJS是一个用于处理Excel文件的JavaScript库。它可以让你使用JavaScript创建、读取和修改Excel文件。

以下是ExcelJS的一些主要特点:

  • 支持xlsx、xlsm、xlsb、xls格式的Excel文件。
  • 可以创建和修改工作表、单元格、行和列。
  • 可以设置单元格样式、字体、背景颜色等。
  • 可以设置工作表的打印选项。
  • 可以将Excel文件保存到本地或者下载到浏览器中。
  • 支持流式写入大型Excel文件,以避免内存限制问题。

我们使用ExcelJS可以轻松地将数据转换为Excel文件,并且可以通过代码自动化地创建和修改Excel文件。

ExcelJS的基本使用

安装ExcelJS

在命令行中使用命令来安装Excel.js

npm install exceljs

创建工作簿

Excel.js库提供了创建新的工作簿、打开已有的工作簿以及保存工作簿的方法。

首先我们需要引入Excel.js库:

const ExcelJS = require('exceljs');

接着,我们可以使用以下代码创建一个新的工作簿:

const workbook = new ExcelJS.Workbook();

这个代码将会创建一个空的工作簿。我们可以通过以下代码添加一个新的工作表:

const worksheet = workbook.addWorksheet('Sheet1');

这个代码将会在工作簿中添加一个名为’Sheet1’的新工作表。我们也可以使用以下代码获取已有的工作表:

const worksheet = workbook.getWorksheet('Sheet1');

这个代码将会获取名为’Sheet1’的工作表。如果工作簿中不存在这个工作表,那么这个代码将会返回undefined。

在创建新的工作表时,我们可以指定一些选项来控制新工作表的行数、列数、列宽和行高等,例如:

const options = {pageSetup: {paperSize: 9, orientation: 'landscape'},properties: {tabColor: {argb:'FFC0000'}}
};
const worksheet = workbook.addWorksheet('Sheet1', options);

这个代码将会创建一个名为’Sheet1’的新工作表,并设置纸张大小为’A4’、方向为’横向’,以及选项卡颜色为橙色。

除此之外,我们还可以使用以下代码删除一个已有的工作表:

workbook.removeWorksheet(worksheet);

这个代码将会删除名为’Sheet1’的工作表。需要注意的是,如果工作簿中只剩下一个工作表,那么这个工作表是不能被删除的。

最后我们需要使用以下代码保存工作簿:

workbook.xlsx.writeFile('example.xlsx').then(function() {console.log('文件已保存');});

这个代码将会把工作簿保存为’example.xlsx’文件。需要注意的是,Excel.js库支持保存为多种格式,包括.xlsx、.xls、.csv等。

操作单元格

Excel.js库提供了一系列方法来操作单元格,例如获取单元格、设置单元格值、合并单元格和设置单元格样式等

首先我们可以使用以下代码创建一个新的工作簿和工作表:

const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('Sheet1');

获取单元格

我们可以使用以下代码获取一个单元格:

const cell = worksheet.getCell('A1');

这个代码将会获取’Sheet1’工作表中的A1单元格。我们也可以使用以下代码获取一个单元格的行和列:

const cell = worksheet.getRow(1).getCell(1);

这个代码将会获取’Sheet1’工作表中的A1单元格。

设置单元格值

然后我们可以使用以下代码设置一个单元格的值:

worksheet.getCell('A1').value = 'Hello, World!';

这个代码将会在’Sheet1’工作表中的A1单元格设置值为’Hello, World!’

Excel.js库支持各种数据类型,包括字符串、数字、日期和布尔值等。

合并单元格

我们可以使用以下代码合并一个区域内的单元格:

worksheet.mergeCells('B2:C3');

这个代码将会合并’Sheet1’工作表中B2到C3区域内的所有单元格。

需要注意的是,合并单元格时,只有左上角的单元格保留了原有的值,其他单元格的值都被清空了。

设置单元格样式

我们可以使用以下代码设置一个单元格的样式:

worksheet.getCell('A1').font = {bold: true};
worksheet.getCell('A1').fill = {type: 'pattern', pattern: 'solid', fgColor: {argb: 'FFFF0000'}};
worksheet.getCell('A1').border = {top: {style: 'thin'}, left: {style: 'thin'}, bottom: {style: 'thin'}, right: {style: 'thin'}};
worksheet.getCell('A1').alignment = {horizontal: 'center', vertical: 'middle'};

这个代码将会设置’Sheet1’工作表中的A1单元格的字体加粗、背景颜色为红色、边框为实线细边框、水平居中和垂直居中。

读取和写入数据

读取工作表中的数据

我们可以使用以下代码读取工作表中的数据:

worksheet.eachRow({ includeEmpty: false }, function(row, rowNumber) {console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values));
});

上述代码将会遍历’Sheet1’工作表中的每一行并打印出每一行的值,这里我们使用了includeEmpty选项来忽略空行。

除此之外,我们还可以使用以下代码获取’Sheet1’工作表中的A1单元格的值:

const cell = worksheet.getCell('A1');
console.log(cell.value);

写入数据到工作表中

我们可以使用以下代码将数据写入到工作表中:

worksheet.getColumn('A').values = [1, 2, 3, 4, 5];

这个代码将会在’Sheet1’工作表中的A列写入1到5这五个数字。

除此之外,我们还可以使用以下代码将一个对象数组写入到工作表中:

const data = [{ name: 'John', age: 30 },{ name: 'Jane', age: 25 },{ name: 'Jim', age: 40 }
];
worksheet.addRows(data);

这个代码将会在’Sheet1’工作表中添加三行数据,每一行包括’name’和’age’两个字段

处理行和列

获取行和列

我们可以使用以下代码获取工作表中的行和列:

const row = worksheet.getRow(1);
const column = worksheet.getColumn('A');

这个代码将会获取’Sheet1’工作表中的第一行和第一列。

我们也可以使用以下代码获取指定区域内的行和列:

const rows = worksheet.getRows(1, 5);
const columns = worksheet.getColumns('A', 'C');

这个代码将会获取’Sheet1’工作表中第1到5行和A到C列。

添加行和列

我们可以使用以下代码添加新的行和列:

const row = worksheet.addRow([1, 2, 3, 4, 5]);
const column = worksheet.addColumn(['A', 'B', 'C', 'D', 'E']);

这个代码将会在’Sheet1’工作表中添加一行和一列,并分别设置它们的值为1到5和A到E。

删除行和列

我们可以使用以下代码删除指定的行和列:

worksheet.spliceRows(1, 5);
worksheet.spliceColumns('A', 2);

这个代码将会删除’Sheet1’工作表中第1到5行和A到B列。

设置行高和列宽

我们可以使用以下代码设置指定行的高度和指定列的宽度:

worksheet.getRow(1).height = 30;
worksheet.getColumn('A').width = 20;

这个代码将会设置’Sheet1’工作表中第一行的高度为30像素,第一列的宽度为20字符。

隐藏行和列

我们可以使用以下代码隐藏工作表中的行和列:

worksheet.getRow(1).hidden = true;
worksheet.getColumn('A').hidden = true;

这个代码将会隐藏’Sheet1’工作表中第一行和第一列。

冻结窗格

我们可以使用以下代码冻结工作表中的窗格:

worksheet.views = [{state: 'frozen', xSplit: 1, ySplit: 1}
];

这个代码将会冻结’Sheet1’工作表中第一行和第一列。

需要注意的是,xSplit和ySplit选项指定了冻结窗格的位置,它们的值从1开始。

导入和导出数据

Excel.js库提供了一系列方法来导入和导出Excel文件中的数据,例如从文件读取Excel数据、将数据写入到Excel文件中以及将Excel文件转换为其他格式等。

从文件读取Excel数据

const workbook = new ExcelJS.Workbook();
workbook.xlsx.readFile('path/to/file.xlsx').then(function() {const worksheet = workbook.getWorksheet('Sheet1');worksheet.eachRow({ includeEmpty: false }, function(row, rowNumber) {console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values));});});

这个代码将会从’path/to/file.xlsx’文件中读取数据,并打印出’Sheet1’工作表中每一行的值。

将数据写入到Excel文件中

const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('Sheet1');worksheet.addRow([1, 2, 3, 4, 5]);
worksheet.addRow(['A', 'B', 'C', 'D', 'E']);workbook.xlsx.writeFile('path/to/file.xlsx').then(function() {console.log('File is written successfully!');});

这个代码将会创建一个新的工作簿和工作表,然后向’Sheet1’工作表中添加两行数据,最后它将会将这个工作簿写入到’path/to/file.xlsx’文件中。

将Excel文件转换为其他格式

const workbook = new ExcelJS.Workbook();
workbook.xlsx.readFile('path/to/file.xlsx').then(function() {workbook.csv.writeFile('path/to/file.csv').then(function() {console.log('CSV file is written successfully!');});});

这个代码将会从’path/to/file.xlsx’文件中读取数据,并将其转换为CSV格式,然后它将会将这个CSV文件写入到’path/to/file.csv’文件中。除此之外,Excel.js库还支持将Excel文件转换为JSON、HTML、PDF等各种格式。

ExcelJS实战

我们之前曾经爬过掘金小册的所有数据并且存到了本地的JSON文件里

没有学过的同学可以看一下这一篇Node.js 爬虫只会 Cheerio?来试试 Puppeteer!

这里我们直接来看生成的JSON文件:

在这里插入图片描述

我们这里就来把这些数据全部写入 Excel 表并导出文件

相信大家有了前面对ExcelJS的了解,这里的代码就非常简单了

首先我们新建一个 excel 工作簿,然后创建一个新的工作表,我们给这个工作表添加自定义表头,接下来就是把数据写入excel表并且设置一些单元格的样式,最后我们将工作簿保存然后导出Excel文件

具体实现请看下面的代码:

const ExcelJS = require('exceljs');
const bookData = require('../juejin/xiaoce.json')// 新建一个 excel 工作簿
const workbook = new ExcelJS.Workbook();// 创建一个新的工作表
const worksheet = workbook.addWorksheet('Sheet1');// 添加表头
worksheet.columns = [{ header: '小册名称', key: 'title', width: 45 }, // 设置列宽{ header: '小册简介', key: 'desc', width: 120 }, // 设置列宽{ header: '小册作者', key: 'author', width: 16 }, // 设置列宽{ header: '小册价格', key: 'price', width: 18 }, // 设置列宽
];// 添加数据
worksheet.addRows(bookData);// 第一行字体加粗加大
worksheet.getRow(1).font = {bold: true,size: 14
};// 第一行单元格居中
worksheet.getRow(1).alignment = {vertical: 'middle',horizontal: 'center'
};// 第一列单元格居中
worksheet.getColumn(1).alignment = {vertical: 'middle',horizontal: 'center'
};// 第三列单元格居中
worksheet.getColumn(3).alignment = {vertical: 'middle',horizontal: 'center'
};// 第四列单元格居中
worksheet.getColumn(4).alignment = {vertical: 'middle',horizontal: 'center'
};// 将工作簿保存到文件
workbook.xlsx.writeFile('juejinBook.xlsx').then(() => {console.log('Excel文件已保存');}).catch((error) => {console.log('保存Excel文件时出错:', error);});

运行程序,不出意外的话控制台会出现“Excel文件已保存”,我们发现目录下确实多了一个excel文件:

在这里插入图片描述

然后我们来打开生成的Excel文件,看看里面是不是我们要的json文件里爬取到的数据:

在这里插入图片描述

没有问题!所有的小册数据全部写入了excel文件,并且单元格的样式也是我们想要的。

总结

Excel.js是一个强大的JavaScript库,它提供了一系列方法来处理Excel文件,例如创建和编辑工作簿、读取和写入数据、处理行和列、设置样式、导入和导出数据等。

使用Excel.js,我们可以轻松地创建和编辑Excel文件,以及从Excel文件中读取和写入数据。

在使用Excel.js时,我们需要注意以下几点:

  • Excel.js库需要安装并引入到我们的项目中。
  • 我们需要创建一个新的工作簿和工作表来存储数据。
  • 我们可以使用一系列方法来读取和写入工作表中的数据,例如eachRow()、getCell()、addRow()、addColumn()等。
  • 我们可以使用一系列方法来处理工作表中的行和列,例如getRow()、getColumn()、addRow()、addColumn()、spliceRows()、spliceColumns()等。
  • 我们可以使用一系列方法来设置工作表中的行和列的样式,例如设置行高和列宽、设置单元格边框和背景色等。
  • 我们可以使用一系列方法来导入和导出Excel文件中的数据,例如从文件读取Excel数据、将数据写入到Excel文件中以及将Excel文件转换为其他格式等。

最后我们还带大家写了一个Excel.js的实战项目来生成了爬取到的掘金小册Excel文件

如果想深入了解ExcelJS,请查看官方文档:https://github.com/exceljs/exceljs/blob/master/README_zh.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/77353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode:67. 二进制求和

题目: 函数原型: char * addBinary(char * a, char * b) 思路: 二进制相加,首先我们考虑先将字符串逆序。由此要写一个逆序函数reserve。字符串逆序后,从前往后相加,以较长的字符串的长度为标准长度n&#…

可视化大屏设计模板 | 主题皮肤(报表UI设计)

下载使用可视化大屏设计模板,减少重复性操作,提高报表制作效率的同时也确保了报表风格一致,凸显关键数据信息。 软件:奥威BI系统,又称奥威BI数据可视化工具 所属功能板块:主题皮肤上传下载(数…

Python实现机器学习(下)— 数据预处理、模型训练和模型评估

前言:Hello大家好,我是小哥谈。本门课程将介绍人工智能相关概念,重点讲解机器学习原理机器基本算法(监督学习及非监督学习)。使用python,结合sklearn、Pycharm进行编程,介绍iris(鸢尾…

Excel学习 WPS版

Excel学习 1.界面基础1.1 方格移动快捷键1.2 自动适配文字长度1.3 跨栏置中1.4 多个单元格同宽度:1.5 下拉框选择1.6 打印预览1.7 绘制边框1.8 冻结一行多行表头1.9 分割视图 2.日期相关2.1 今日日期快捷键2.2 月份提取 3.数学公式3.1 自动增长3.2 排序3.3 筛选3.4 …

数据结构——排序算法——冒泡排序

冒泡排序1 void swap(vector<int> arr, int i, int j) {int temp arr[i];arr[i] arr[j];arr[j] temp;}void bubbleSort1(vector<int> arr) {for (int i 0; i < arr.size() - 1; i){for (int j 0; j < arr.size() - 1 - i; j){if (arr[j] > arr[j 1…

【Unity编辑器扩展】| 顶部菜单栏扩展 MenuItem

前言【Unity编辑器扩展】 | 顶部菜单栏扩展 MenuItem一、创建多级菜单二、创建可使用快捷键的菜单项三、调节菜单显示顺序和可选择性四、创建可被勾选的菜单项五、右键菜单扩展5.1 Hierarchy 右键菜单5.2 Project 右键菜单5.3 Inspector 组件右键菜单六、AddComponentMenu 特性…

人工智能:神经细胞模型到神经网络模型

人工智能领域中的重要流派之一是&#xff1a;从神经细胞模型&#xff08;Neural Cell Model&#xff09;到神经网络模型&#xff08;Neural Network Model&#xff09;。 一、神经细胞模型 第一个人工神经细胞模型是“MP”模型&#xff0c;它是由麦卡洛克、匹茨合作&#xff0…

Java-华为真题-预定酒店

需求&#xff1a; 放暑假了&#xff0c;小王决定到某旅游景点游玩&#xff0c;他在网上搜索到了各种价位的酒店&#xff08;长度为n的数组A&#xff09;&#xff0c;他的心理价位是x元&#xff0c;请帮他筛选出k个最接近x元的酒店&#xff08;n>k>0&#xff09;&#xff…

通常用哪些软件做数据可视化大屏?

一般就两种&#xff0c;一种是可视化大屏编辑软件&#xff0c;另一种则是BI系统&#xff08;BI数据可视化工具&#xff09;。考虑到数据来源多、数据量大以及数据分析效率、直观易懂性等实实在在的客观问题&#xff0c;建议采用BI系统来制作数据可视化大屏。 BI系统做可视化大…

【SpringMVC】JSR 303与interceptor拦截器快速入门

目录 一、JSR303 1、什么是JSR 303&#xff1f; 2、为什么要使用JSR 303&#xff1f; 3、JSR 303常用注解 3.1、常用的JSR 303注解 3.2、Validated与Valid区别 3.2.1、Validated 3.2.2、Valid 3.2.3、区别 4、使用案例 4.1、导入依赖 4.2、配置校验规则 4.3、编写…

Matlab图像处理-彩色图像基础

光谱 在17世纪60年代&#xff0c;人们普遍认为白光是一种没有其他颜色的纯色光&#xff0c;而彩色光是有某种缘故发生变化的光。为了验证这个假设&#xff0c;牛顿让一束阳光通过一面三棱镜&#xff0c;光线在墙上被分解成了八种不同的颜色&#xff0c;即&#xff1a;红、橙、…

vue基础知识九:动态给vue的data添加一个新的属性时会发生什么?怎样解决?

一、直接添加属性的问题 我们从一个例子开始 定义一个p标签&#xff0c;通过v-for指令进行遍历 然后给botton标签绑定点击事件&#xff0c;我们预期点击按钮时&#xff0c;数据新增一个属性&#xff0c;界面也 新增一行 <p v-for"(value,key) in item" :key&q…

python基于GDAL的多线程高速批量重采样、对齐栅格、对齐行列数,并无损压缩

在自己写代码处理遥感数据进行波段计算&#xff0c;或者基于遥感等空间数据进行机器学习、深度学习时&#xff0c;一般都需要各图层行列数一致。在QGIS中有“对齐栅格”工具可以完成该任务&#xff0c;但是QGIS中没有提供批量操作的接口&#xff0c;在数据比较多时&#xff0c;…

eslint写jsx报错

eslint写jsx报错 ChatGPT提示 在写JSX时&#xff0c;ESLint可能会报出一些语法错误&#xff0c;这些错误通常是由于ESLint默认配置中不支持JSX语法导致的。为了解决这些错误&#xff0c;我们需要在ESLint配置文件中启用对JSX语法的支持。 首先&#xff0c;需要安装eslint-pl…

时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化

时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化 目录 时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 EWT经验小波变换 包含频谱相关系数 可直接运行 Matlab代码 1.可自由设置分量个数&…

SpringBoot整合Easy-ES操作演示文档

文章目录 SpringBoot整合Easy-ES操作演示文档1 概述及特性1.1 官网1.2 主要特性 2 整合配置2.1 导入POM2.2 Yaml配置2.3 EsMapperScan 注解扫描2.4 配置Entity2.5 配置Mapper 3 基础操作3.1 批量保存3.2 数据更新3.3 数据删除3.4 组合查询3.5 高亮查询3.6 统计查询 4 整合异常4…

prize_p1

文章目录 解题过程代码审计思路问题解决数组绕过preg_match__destruct的触发修改phar文件以及签名phar://支持的后缀 题解方法一&#xff08;数组绕过&#xff09;方法二&#xff08;gzip绕过&#xff09; 解题过程 源代码 <META http-equiv"Content-Type" conte…

AI文本创作在百度App发文的实践

作者 | 内容生态端团队 导读 大语言模型&#xff08;LLM&#xff09;指包含数百亿&#xff08;或更多&#xff09;参数的语言模型&#xff0c;这些模型通常在大规模数据集上进行训练&#xff0c;以提高其性能和泛化能力。在内容创作工具接入文心一言AI能力后&#xff0c;可以为…

论文复现--lightweight-human-pose-estimation-3d-demo.pytorch(单视角多人3D实时动作捕捉DEMO)

分类&#xff1a;动作捕捉 github地址&#xff1a;https://github.com/Daniil-Osokin/lightweight-human-pose-estimation-3d-demo.pytorch 所需环境&#xff1a; Windows10&#xff0c;conda 4.13.0&#xff1b; 目录 conda环境配置安装Pytorch全家桶安装TensorRT&#xff08;…

C++设计模式_05_Observer 观察者模式

接上篇&#xff0c;本篇将会介绍C设计模式中的Observer 观察者模式&#xff0c;和前2篇模板方法Template Method及Strategy 策略模式一样&#xff0c;仍属于“组件协作”模式。Observer 在某些领域也叫做 Event 。 文章目录 1. 动机&#xff08; Motivation&#xff09;2. 代码…