因为广告投放需要做一批对外投放下载页面,由于没有专门负责填充页面的编辑同学做,只能前端来做了,

拿到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对照文件的更多相关文章

  1. Shell实现文件内容批量替换的方法

    在Linux系统中,文件内容的批量替换同Windows平台相比要麻烦一点.不过这里可以通过Shell命令或脚本的方式实现批量替换的功能. 笔者使用过两个命令:perl和sed ,接下来会对其做出说明. ...

  2. 帝国cms内容批量替换

    方法一:栏目-其他相关-批量替换字段值 方法二:通过sql替换           UPDATE phome_ecms_news SET body=REPLACE(body,'原来','现在')

  3. Advanced Find and Replace(文件内容搜索替换工具)v7.8.1简体中文破解版

    Advanced Find and Replace是一款文件内容搜索工具,同时也是文件内容批量替换工具.支持通配符和正则表达式,方便快捷强大! 显示中文的方法:第二个菜单-Language-选 下载地 ...

  4. SqlServer表和excel数据批量复制方法

    SqlServer表和excel数据批量复制方法 一.SqlServer表数据复制到excel方法: 1.新建查询,用sql语句把表数据读出来 2.然后,选择数据,右键“复制”(如果需要表字段名称,则 ...

  5. 个人永久性免费-Excel催化剂功能第101波-批量替换功能(增加正则及高性能替换能力)

    数据处理无小事,正如没有人活在真空理想环境一下,在数据分析过程中,也没有那么真空理想化的数据源可以使用,数据处理占据数据分析的80%的时间,每一个小小的改善,获益都良多.Excel查找替换,有其局限性 ...

  6. 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容

    在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为“帮凶”,制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要保持节制,在可以称为 ...

  7. 如何利用Excel快速批量生成想要的代码

    如何利用Excel快速批量生成想要的代码 使用场景 在HTML DOM Video 对象这个页面 我想要将所有的中文描述和对应的属性(共32个属性)打印出来--console.log(descript ...

  8. excel 批量替换换行符

    在excel批量替换换行符操作步骤: 全选需要查找换行符的范围 CTRL+H调出查找和替换 在查找内容内输入"ctrl+enter"两个组合键 点击查找全部即可. 在excel中输 ...

  9. perl命令批量替换文件内容

    转自:http://www.jbxue.com/article/12638.html 使用perl命令批量替换文件内容. 对linux下的文件内容进行替换,有时不用编写perl脚本,用perl命令就可 ...

随机推荐

  1. 剑指offer 面试62题

    面试62题: 题目:圆圈中最后剩下的数字 题:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 解题思路:约瑟夫环问题,可 ...

  2. 联合文件系统 unionfs

  3. VM and Docker Container

    https://www.zhihu.com/question/48174633 在开始讨论前,先抛出一些问题,可先别急着查看答案,讨论的过程可以让答案更有趣,问题如下: Docker 容器有自己的ke ...

  4. .ssh中的文件的分别意义

    当我们在用户的主目录使用如下命令: cd (进入个人主目录,默认为/home/hadoop) ssh-keygen -t rsa -P '' (注:最后是二个单引号) 表示在用户的主目录创建ssh登陆 ...

  5. 09_Hadoop启动或停止的三种方式及启动脚本

    1.Hadoop启动或停止 1)第一种方式 分别启动 HDFS 和 MapReduce,命令如下: 启动: $ start-dfs.sh $ start-mapred.sh 停止: $ stop-ma ...

  6. Python Streaming实战2: Join的实现与数据过滤

    Hadoop Join 与 Not In的实现  (一)源数据与要实现的查询 1. 要实现的查询 select a.sid ,a.name ,b.course ,b.score from Studen ...

  7. 【Topcoder】SRM158 DIV2总结

    250分题:给定一个4位字符串initial和rotate这个字符串的方式,然后再给另一个字符串current,问current能否由initial通过rotate得到,需要几次rotate? 简单的 ...

  8. UCOS2_STM32F1移植详细过程

    源:UCOS2_STM32F1移植详细过程(三) UCOS2_STM32移植过程.系统内核.事件描述(汇总)

  9. tornado解析 第一篇

    一.tornado介绍 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 we ...

  10. cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox

    GameScene类虽然是占用游戏最多时间的类,但是里面的东西不是很多,最重要的就是碰撞检测了,碰撞检测代码如下: void GameScene::detectionCrash() { CCArray ...