nodejs读取excel内容批量替换并生成新的html和新excel对照文件
因为广告投放需要做一批对外投放下载页面,由于没有专门负责填充页面的编辑同学做,只能前端来做了,
拿到excel看了一下,需要生成200多个文件,一下子懵逼了。
这要是来回复制粘贴太low了
正好最新用nodejs做过抓取喜马拉雅mp3内容,感觉还挺方便。
于是写个nodejs批处理试试吧,经过几个小时,果然成功了,1秒生成,太爽了。
主要是依赖node-xlsx 模块读取和写入excel,
涉及核心代码如下:
//声明excel文档操作对象
var xlsx = require('node-xlsx');
var sheets = xlsx.parse('./data/wdcb.xlsx');//获取到所有sheets
// 声明文件操作系统对象
var fs = require('fs');//加载文件操作模块
var path=require('path');//加载路径处理模块
String.prototype.trim=function(){
return this.replace(/(^\s*)|(\s*$)/g, "");
}
var Num = 1;//默认从第二条数据开始,一般第一条数据是标题 /**
* 读取excel某一条数据,传参调用html创建方法
* @param {[type]} num 第几条数据
* @return {[type]} [description]
*/
function readExcel(num){
var i = num;
var data = sheets[0]['data'];
if(data.length == i){
console.log("生成成功!");
//fs.writeFile('./data/target.xlsx',sheets,function(error){});
var buffer = xlsx.build(sheets);
fs.writeFileSync('./data/target.xlsx',buffer,{'flag':'w'}); //生成excel
return ;
}
var tmp = data[i][1];//文件名
var tar = './build/' + tmp + '.shtml';//生成目标路径
var link = data[i][4];//下载链接
var copyRight = data[i][5];
if(tmp){
createHtml(tar,link,copyRight,num);
}
}
/**
* 根据参数创建html文件
* @param {[String]} tar 生成目标文件路径
* @param {[String]} repLink 下载链接
* @param {[String]} copy 版权名称
* @param {[num]} num 第几条数据
* @return {[type]}
*/
function createHtml(tar,repLink,copy,num){
fs.readFile('./index.shtml','utf8',function(err,files){//读取模板文件
var result = files.replace(/#{4}/g, repLink);//替换链接
result = result.replace(/xxxxxx/g, copy);//替换底部版权
fs.writeFile(tar, result, 'utf8', function (err) {
if (err) {
fs.writeFile('./err-log.txt',err,function(error){});//生成错误,则写入日志
return console.log(err)
}
//修改已读取excel数据,为存储对照excel准备
sheets[0]['data'][Num][6] = 'http://www.xxxxxxx.com/events/wdcb/201811/load/' + tar.replace("\.\/","");
Num++;
readExcel(Num);
});
})
}
//开始调用
readExcel(Num);
项目打包如下:https://files.cnblogs.com/files/zhidong123/node-excel-html.zip
/data/目录里面有说明文件
使用方法:
1.确保已安装node环境
2. 打开本目录命令行执行: npm i 安装运行模块(如果安装了npm 淘宝镜像,可以使用cnpm i )
3.命令行执行 node app.js 后1秒批量生成。
4. data/target.xlsx是生成html后的excel对照文件,build 目录里面是生成后的文件
nodejs读取excel内容批量替换并生成新的html和新excel对照文件的更多相关文章
- Shell实现文件内容批量替换的方法
在Linux系统中,文件内容的批量替换同Windows平台相比要麻烦一点.不过这里可以通过Shell命令或脚本的方式实现批量替换的功能. 笔者使用过两个命令:perl和sed ,接下来会对其做出说明. ...
- 帝国cms内容批量替换
方法一:栏目-其他相关-批量替换字段值 方法二:通过sql替换 UPDATE phome_ecms_news SET body=REPLACE(body,'原来','现在')
- Advanced Find and Replace(文件内容搜索替换工具)v7.8.1简体中文破解版
Advanced Find and Replace是一款文件内容搜索工具,同时也是文件内容批量替换工具.支持通配符和正则表达式,方便快捷强大! 显示中文的方法:第二个菜单-Language-选 下载地 ...
- SqlServer表和excel数据批量复制方法
SqlServer表和excel数据批量复制方法 一.SqlServer表数据复制到excel方法: 1.新建查询,用sql语句把表数据读出来 2.然后,选择数据,右键“复制”(如果需要表字段名称,则 ...
- 个人永久性免费-Excel催化剂功能第101波-批量替换功能(增加正则及高性能替换能力)
数据处理无小事,正如没有人活在真空理想环境一下,在数据分析过程中,也没有那么真空理想化的数据源可以使用,数据处理占据数据分析的80%的时间,每一个小小的改善,获益都良多.Excel查找替换,有其局限性 ...
- 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容
在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为“帮凶”,制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要保持节制,在可以称为 ...
- 如何利用Excel快速批量生成想要的代码
如何利用Excel快速批量生成想要的代码 使用场景 在HTML DOM Video 对象这个页面 我想要将所有的中文描述和对应的属性(共32个属性)打印出来--console.log(descript ...
- excel 批量替换换行符
在excel批量替换换行符操作步骤: 全选需要查找换行符的范围 CTRL+H调出查找和替换 在查找内容内输入"ctrl+enter"两个组合键 点击查找全部即可. 在excel中输 ...
- perl命令批量替换文件内容
转自:http://www.jbxue.com/article/12638.html 使用perl命令批量替换文件内容. 对linux下的文件内容进行替换,有时不用编写perl脚本,用perl命令就可 ...
随机推荐
- iOS oc 调用 swift
如股票oc要调用swift里面的代码 需要包含固定这个头文件 项目名称 LiqunSwiftDemo-Swift.h #ProjectName#-Swift.h 固定的写法 swift 目的 是取代o ...
- 吐槽 坑爹的MySQL安装路径选择
一般再windows下面安装MySQL我们都会选择msi安装模式,然而安装最新版的MySQL(mysql-installer-community-5.7.11.0.msi 下载地址)发现MySQL默认 ...
- linux 定时任务未执行php脚本
1,对于无法执行php文件,首先你应该考虑的问题是是否php代码有错误,你可以先检查一下你的php代码,或者可以在linux上面执行一下这个文件,看是否能够执行成功:如果成功了,就说明是crontab ...
- 使用SQL Server Management Studio 创建数据库备份作业
--完整备份,每周一次USE MasterGOdeclare @str varchar(100)set @str='D:\Weldon\DBBACK\FullBak'+replace(replace( ...
- nodejs爬虫selenium
6.元素操作 查找元素 使用操作如何找到页面元素Webdriver的findElement方法可以用来找到页面的某个元素,最常用的方法是用id和name查找.下面介绍几种比较常用的方法. By ID假 ...
- 算法总结之 在两个排序数组中找到第K小的数
给定两个有序数组arr1 和 arr2 ,再给定一个int K,返回所有的数中第K小的数 要求长度如果分别为 N M,时间复杂度O(log(min{M,N}),额外空间复杂度O(1) 解决此题的方法跟 ...
- 2017 GDS 全球域名大会7月7日举行
2017年域名行业历经产业波澜,引发域名圈内对域名价值衍生及商业模式的探索.如今无论域名注册商.域名交易平台.域名拍卖平台都在寻找更好的商业模式,开启域名行业新航向. 7月,在中国域名之都厦门将掀起一 ...
- review19
StringBuffer类 String类创建的字符串对象是不可修改的,也就是说,String字符串不能修改.删除或替换字符串中的饿某个字符,即String对象一旦创建,那么实体是不可以再发生变化的. ...
- python 各种装饰器示例(python3)
参考网址: Python中的各种装饰器详解_python_脚本之家http://www.jb51.net/article/63892.htm 一.函数式装饰器: 1.装饰器无参数,被装饰对象无参数 d ...
- display:none和visible:hidden两者的区别
display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别:display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是 ...