详解使用Node.js 将txt文件转为Excel文件
发布时间 - 2026-01-11 02:11:46 点击率:次最近同事需要对一份报告进行整理,一共有80个报告约9000多行放在一个txt文件中。虽然每份报告的格式比较类似,但其中部分字段对应的数量依旧会有差别。所以真要靠人工来做,无疑会是一件费时费力的并且是很枯燥的工作。据说如果有了这个程序,可以减少60%的工作量!那么为了我以后的下午茶,自然应该去尝试一下不是么?

不过既然是费时费力又枯燥的工作,自然就应该交给代码去解决。毕竟,我坚信任何的科学技术就是为了让人类偷懒而存在的。那么就先切入正题,先上GitHub的项目地址。欢迎批评指点。
GitHub项目:report-maker
项目分析
既然准备要上代码了,作为一个狂热的前端爱好者,自然首选Node.js了。这一个项目主要的目的就是将txt文件中的内容按照一定的规则转化为固定格式的表格并导出为Excel。那么重点就可以分为下面两步了。
- Excel文件的生成
- txt内容的整理
1. Excel文件的生成
Excel文件自然是寻找可以依赖的模块了(毕竟我自己写不出来)。找了一圈,发现js-xlsx这一个模块。虽然看起来很复杂,但其实只要提供好表头和内容就可以,其余只是对于内容数据整理的固定模板。
相关教程可以参考下面这篇,讲的比较详细所以这里就不多做赘述了。
参考教程:使用node-xlsx进行excel文件的读写
2. txt内容的整理
解决了Excel导出的问题(不然就得换Py了呢),文档内容的整理便是这个项目最重要的问题了。最终整理的表格样式以及需要抽出的项目内容已经和同事确认过了。那么接下来就是如何整理了一个有着80个长短不一报告的文件了。
首先来看看文件的格式,整个文件的格式类似于下面这样。
Policy Name: policyName1 ……省略中间内容…… Policy Type: Standard (0) ……省略中间内容…… Client/HW/OS/Pri/CIT: Client1 Client/HW/OS/Pri/CIT: Client2 Client/HW/OS/Pri/CIT: Client3 Client/HW/OS/Pri/CIT: Client4 ……省略多个Client Include: /dir1 Include: /dir2 Include: /dir3 ……省略多个Include Schedule: Schedule1 Type: …… Schedule: Schedule2 Type: …… ……省略多个Schedule Policy Name: policyName2 ……省略中间内容…… ……
可以看出,每一个段落是以Policy Name为分界的。那么,利用fs.readFile将完整的文件读取进来,作为一个字符串使用split方法进行切割。具体代码如下:
fs.readFile(filePath, 'UTF-8', function (err, data) {
if (err) throw err;
// 对文件读取的数据进行处理,首先用 policyName 进行切割
var policyLists = data.split(config.splitRules.policyName);
if (policyLists[0] === '\r\n') {
policyLists.shift();
};
然后针对数组中每一个元素(一个段落)根据之前文件中所需要项目,使用正则表达式切提取出所需要的内容,然后将提取出的内容组成所需要的数据结构,具体代码如下。其中schedule项目中内容也并非在一行中,所以也同样使用上面的方法进行切割。而对于其他的项目,则通过正则表达式来进行内容的获取。
policyLists.forEach(function (policy) {
var policyData = policyFormatter(config.splitRules.policyName + policy);
excelData.push(policyData);
});
/**
* 对每一个policy进行整理 使其符合表格插入的形式
* @param {*} policy
* {
* policyName: String
* client: []]
* policyType: String
* include: []
* schedule[]
* scheduleResidence: String
* }
*
*/
function policyFormatter(policy) {
var policyNameMatcher = new RegExp(config.splitRules.policyName + "([\\s\\w\\d\\-]*)\\r\\n"),
clientMatcher = new RegExp(config.splitRules.client + "([\\s\\w\\d\\?\\-\\.]*)\\r\\n", "g"),
policyTypeMatcher = new RegExp(config.splitRules.policyType + "([\\s\\w\\d\\(\\)\\-]*)\\r\\n"),
includeMatcher = new RegExp(config.splitRules.include + "([\\s/\\w\\.\\\\:_\\?=\\\"\\*]*)\\r\\n", "g");
var scheduleLists = policy.split(config.splitRules.schedule).slice(1),
scheduleFormatLists = [],
scheduleResidenceMatcher = new RegExp(config.splitRules.scheduleResidence + "([\\s\\w\\d\\-\\(\\)]*)\\r\\n");
scheduleLists.forEach(function (schedule) {
var scheduleFormat = config.splitRules.schedule + schedule;
scheduleFormatLists.push(scheduleFormat);
});
// console.log(scheduleFormatLists);
var results = {
policyName: policy.match(policyNameMatcher)[1].trim(),
client: policy.match(clientMatcher) ? policy.match(clientMatcher).join('').trim() : '',
policyType: policy.match(policyTypeMatcher)[1].trim(),
include: policy.match(includeMatcher).join('').trim(),
schedule: scheduleFormatLists.join('').trim(),
scheduleResidence: scheduleLists[0].match(scheduleResidenceMatcher)[1].trim()
};
// console.dir(results);
return results;
}
主要逻辑处理完以后,把收集到的内容传给excel处理模块,导出成文件就能解决问题了。
不过似乎最终如果能导出为Word,似乎更好。看来还有新的改进空间还留着呢。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Node.js
# txt转Excel
# Node
# txt
# 转Excel
# 手把手教你用Node.js爬虫爬取网站数据的方法
# node.js读取Excel数据(下载图片)的方法示例
# Node.js利用js-xlsx处理Excel文件的方法详解
# Node.js实现Excel转JSON
# Nodejs实现爬虫抓取数据实例解析
# nodeJs爬虫获取数据简单实现代码
# nodejs爬虫抓取数据之编码问题
# nodejs爬虫抓取数据乱码问题总结
# Nodejs技巧之Exceljs表格操作用法示例
# 使用ExcelJS快速处理Node.js爬虫数据
# 多个
# 所需要
# 这一
# 作为一个
# 就可以
# 会有
# 放在
# 过了
# 就能
# 就不
# 最重要
# 数据结构
# 来看看
# 找了
# 正则表达式
# 使其
# 解决问题
# 就得
# 可以看出
# 来做
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
网站制作大概多少钱一个,做一个平台网站大概多少钱?
zabbix利用python脚本发送报警邮件的方法
如何在建站宝盒中设置产品搜索功能?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
如何在阿里云香港服务器快速搭建网站?
PHP 500报错的快速解决方法
如何快速搭建二级域名独立网站?
HTML 中动态设置元素 name 属性的正确语法详解
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
如何在橙子建站上传落地页?操作指南详解
JS弹性运动实现方法分析
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Android自定义listview布局实现上拉加载下拉刷新功能
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何选择PHP开源工具快速搭建网站?
Laravel如何使用withoutEvents方法临时禁用模型事件
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
微信小程序 require机制详解及实例代码
如何在不使用负向后查找的情况下匹配特定条件前的换行符
高端建站如何打造兼具美学与转化的品牌官网?
在Oracle关闭情况下如何修改spfile的参数
Laravel如何使用Telescope进行调试?(安装和使用教程)
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
长沙企业网站制作哪家好,长沙水业集团官方网站?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Android中AutoCompleteTextView自动提示
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
java中使用zxing批量生成二维码立牌
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Laravel如何配置任务调度?(Cron Job示例)
网易LOFTER官网链接 老福特网页版登录地址
如何用IIS7快速搭建并优化网站站点?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Laravel如何使用Blade模板引擎?(完整语法和示例)
lovemo网页版地址 lovemo官网手机登录
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何在云虚拟主机上快速搭建个人网站?
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel如何使用模型观察者?(Observer代码示例)

