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

news2024/12/24 1:18:37

什么是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.coloradmin.cn/o/1003666.html

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

相关文章

C++之构造函数初始化列表()与{}区别(一百九十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

物资管理系统数据分析报告

目 录 1.需求分析 1.1系统目标与要求 1.2系统分析 1.3业务流程图 2.系统逻辑方案 2.1数据流程图(DFD): 2.2数据字典(简称DD) 3系统总体结构设计 3.1软件系统总体结构设计 3.2数据存储的总体设计…

【Spark的五种Join策略解析】

join基本流程 Spark将参与Join的两张表抽象为流式遍历表(streamIter)和查找表(buildIter),通常streamIter为大表,buildIter为小表,我们不用担心哪个表为streamIter,哪个表为buildIter,这个spark会根据join语句自动帮我…

硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

前言 不管面试 Java 、C/C、Python 等开发岗位, TCP 的知识点可以说是的必问的了。 任 TCP 虐我千百遍,我仍待 TCP 如初恋。 遥想小林当年校招时常因 TCP 面试题被刷,真是又爱又狠…. 过去不会没关系,今天就让我们来消除这份恐…

hadoop运行WordCount时,Input path does not exist错误原因

修改配置文件core-site.xml 为如下所示 vim /usr/local/hadoop/etc/hadoop/core-site.xmlxml文件改为 <configuration></configuration>如果将core-site.xml文件变动为原来的内容&#xff0c;则程序将不再去hdfs://localhost:9000下寻找input文件&#xff0c;而是…

解决uniapp局部页面(scrollview)下拉刷新出现不能复位的问题

问题所在&#xff1a;&#xff08;困扰了我一天&#xff09; 局部页面自定义刷新出现下拉页面不能复位的问题 看下解决后的效果 废话不多说直接上代码 <view class"content"><scroll-view class"section" :style"{height:300px}" :re…

IDEA设置方法分割线

IDEA设置方法分割线 最近在学习视频教程的时候&#xff0c;总是能看到一些大佬用的IDEA与自己的仿佛不是一个软件&#xff01; 如下图&#xff1a; 看到一些老师用IDEA时&#xff0c;方法上都会有一条横线。感觉这样很方便&#xff0c;于是乎自己设置了一下。现在分享给大家&…

react处理跨域

如果是新建的react项目&#xff0c;没有将webpack的配置文件释放出来的话&#xff0c;请先运行 npm run eject 根目录会出现config文件夹&#xff0c;找到path.js就可以看到proxy的配置&#xff0c;默认读取的是src/setupProxy.js 那么我们可以在src目录下新建setupProxy.js…

快解析内网穿透如何帮你轻松实现外网远程连接?

外网相信大家多少了解一点&#xff0c;其实就是连接不同地区局域网&#xff0c;或者是城域网计算机通信的远程网&#xff0c;因此被称为广域网或者公网。在这个互联网信息时代&#xff0c;很多用户还是不知道怎么连接外网&#xff1f;外网远程桌面连接的步骤是怎样的&#xff1…

【Samba】win 11 不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接

win11 遇到不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接 原因 之前使用两个用户登录过&#xff0c;没有释放 解决方案1 1、打开cmd命令窗口&#xff1a; net use * /del /y 命令中断开所有连接. 2、重新登录 解决方案2 删除后重启

【Linux问题】日期校准

问题 请求阿里云对象存储返回 The difference between the reguest time and the current time is too large. 规定时间和当前时间之间的差异太大。 由于虚拟机出现问题导致服务器时间不准 正常的服务器时间 异常的服务器时间 设置一下时间就好 校准时间 安装 yum insta…

winscope怎么实现user版本上导出方案设计探讨-千里马android framework车载车机手机系统开发

背景 在马哥给讲解怎么用winscope来分析各种闪黑&#xff0c;黑屏等问题后&#xff0c;很多买课的同学都开始使用这个工具用于实际公司的项目了&#xff0c;但是很多同学又开始发现有一个问题&#xff0c;那就发现在user版本的手机设备上发现无法抓取相关的winscope&#xff0…

在 CentOS 7 上安装中文字体

在 CentOS 7 上安装中文字体 1. 安装中文字体包&#xff1a;2. 配置字体&#xff1a;3. 更新字体缓存&#xff1a; 在 CentOS 7 上安装中文字体可以按照以下步骤进行&#xff1a; 1. 安装中文字体包&#xff1a; sudo yum install -y fontconfig sudo yum install -y cjkuni-…

MobaXterm-Chinese中文版本安装及简单使用

项目原地址&#xff1a; https://mobaxterm.mobatek.net/download.html 1.开源中文版 项目地址&#xff1a; https://github.com/RipplePiam/MobaXterm-Chinese-Simplified?loginfrom_csdn 本仓库旨在对 MobaXterm Home Edition &#xff08;Portable edition&#xff09; 进…

新闻轮播图

一、效果图 二、vue中html部分 <div class"swiper-container" ref"swiperDom"><div class"swiper-wrapper"><div class"swiper-slide" v-for"(item,index) in newsImageList" :key"index"><…

【语义分割 01】Open MMLab介绍

1 Tutorial https://github.com/TommyZihao/MMSegmentation_Tutorials https://github.com/TommyZihao/Train_Custom_Dataset https://github.com/TommyZihao/aidlux_tutorial OpenMMLab是一个由中国开发者主导的具有世界影响力的人工智能计算机视觉开源算法体系, 至今已经开…

剪辑的视频太大怎么办?一分钟学会压缩视频

当我们剪辑视频时&#xff0c;常常会遇到视频文件过大&#xff0c;导致传输不变、存储空间不足等问题&#xff0c;那么如何解决这个问题呢&#xff1f;下面就给大家分享几个压缩视频文件大小的方法&#xff0c;轻松解决剪辑视频太大的问题~ 一、使用视频压缩工具 这边给大家分…

树型结构和二叉树的概念及特性

目录 1. 树型结构 1.1 树的概念 1.2重要专有名词概念 1.3 树的表示形式 1.4 树的应用 ​编辑 2. 二叉树 2.1 概念 2.2 两种特殊的二叉树 2.3 二叉树的性质 3.有关二叉树性质的练习题 1. 树型结构 1.1 树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n …

CAD ObjectArx 二次开发 创建工具栏实现点击button出现抽屉式菜单

实现在CAD中创建工具栏并添加菜单命令&#xff0c;如下图 参照文章&#xff1a; cad—菜单&#xff0c;工具栏&#xff0c;屏幕菜单&#xff0c;增强工具栏 主要实现路径是通过创建一个可停靠窗口&#xff0c;并在其中创建toolbutton并给button点击事件添加命令&#xff0c;将…

【EI会议征稿】2023年第五届光电材料与器件国际学术会议(ICOMD 2023)

2023年第五届光电材料与器件国际学术会议&#xff08;ICOMD 2023&#xff09; 2023 5th International Conference on Optoelectronic Materials and Devices (ICOMD 2023) 第五届光电材料与器件国际学术会议&#xff08;ICOMD 2023&#xff09;将于2023年11月17-19日在中国重…