详解使用Node.js 将txt文件转为Excel文件

发布时间 - 2026-01-11 02:11:46    点击率:

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

不过既然是费时费力又枯燥的工作,自然就应该交给代码去解决。毕竟,我坚信任何的科学技术就是为了让人类偷懒而存在的。那么就先切入正题,先上GitHub的项目地址。欢迎批评指点。

GitHub项目:report-maker

项目分析

既然准备要上代码了,作为一个狂热的前端爱好者,自然首选Node.js了。这一个项目主要的目的就是将txt文件中的内容按照一定的规则转化为固定格式的表格并导出为Excel。那么重点就可以分为下面两步了。

  1. Excel文件的生成
  2. 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代码示例)