当前位置: 首页 > news >正文

node html word,nodejs导出word

1. nodejs导出word这个让人很苦恼,也是研究了半天,不过在同事的一起奋斗下和百度这个强大的工具

下还是勉强完成了。这里使用的是officegen这个插件,这个插件还是很厉害的,可以导出excel、

PPT,word;

2. 首先引入officegen:

var officegen = require('officegen');//之后是代码中使用了:

router.get('/exportWord', function (req, res) {

try {

var docx = officegen('docx');//这里这个在方法中使用,因为看了百度就一篇文章,放在开头

全局,这样导致导出的数据重复,这个苦难了很久,还是同事给力

var meet_name = req.query.meet_name;

//通过会议名称查询会议信息,议题信息

service.getMeetInfo(1, 100000, meet_name, function (meet) {

if (meet.rows[0].t_begin == "" || meet.rows[0].address == "") {

res.send("0");

} else {

/*

判断文件是否存在

*/

var filedir = './public/uploadFile/temporaryFile/';

fs.ensureDir(filedir, function (err) {

});

fs.exists(filedir + meet_name + '_会议通知.docx', function (r) {

if (r) {

fs.unlinkSync(filedir + meet_name + '_会议通知.docx', function (err) {

if (err) throw err;

})

}

/*

获取数据,处理数据

*/

issueService.getIssueInfo(1, 100000, meet_name, function (result) {

var str = '';

for (var i = 0; i < result.rows.length; i++) {

str += result.rows[i].report_dept + ",";//参会科室

if (result.rows[i].involv_dept != "不涉及") {

str += result.rows[i].involv_dept + ",";//涉及科室

}

}

var strArray = str.split(",");

var report = [];

//去重

for (var k = 0; k < strArray.length; k++) {

if (strArray[k] != "质量管理室" && strArray[k] != "运维管理室" && strArray[k] != "稽核资管室") {

if (strArray.indexOf(strArray[k]) == k) report.push(strArray[k]);

}

}

var ss = report.toString().split(",");

var strs = '';

for (var i = 0; i < ss.length; i++) {

if (ss[i] == '' || ss[i] == null || typeof (ss[i]) == undefined) {

ss.splice(i, 1);

i = i - 1;

}

}

for (var i = 0; i < ss.length; i++) {

if (i == ss.length - 1) {

strs += ss[i].split("、").toString() + ";";

break;

}

strs += ss[i] + "、";

}

var st;

if (strs == "") {

st = ";";

} else {

st = "、";

}

/*

换行

*/

var pObj = docx.createP();

pObj.addText('');

var pObj = docx.createP();

pObj.addText('');

var pObj = docx.createP();

pObj.addText('');

var pObj = docx.createP();

pObj.addText('');

/*

上面提供换行

*/

// var pObj4 = docx.createP({ align: 'center' });// 创建行 设置居中

//pObj4.addText(meet.rows[0].meet_name + '会议通知', { bold: true, font_face: 'Arial', font_size: 18 });

// 添加文字 设置字体样式 加粗 大小

//写入数据

var pObj = docx.createP();

pObj.addText('会议名称:' ,{bold: true});

pObj.addText(meet.rows[0].meet_name)

var pObj = docx.createP();

pObj.addText('会议时间:' ,{bold:true});// 设置字体颜色

pObj.addText( meet.rows[0].t_begin);

var pObj = docx.createP();

pObj.addText('会议地点:' ,{bold:true});

pObj.addText(meet.rows[0].address);

var pObj = docx.createP();

pObj.addText('参会科室:' ,{bold:true});

pObj.addText('质量管理室、运维管理室、稽核资管室'+ st + strs );

var pObj = docx.createP();

pObj.addText('本次会议内容请见下方汇总表,目前已收集到议题【');

pObj.addText("" + result.total + "", { color: 'FF0000' });

pObj.addText('】个。请议题汇报科室及涉及参会科室提前做好准备。');

var out = fs.createWriteStream(filedir + meet_name + '_会议通知.docx');// 文件写入

docx.generate(out);// 服务端生成word

out.on('error', function (err) {

console.log(err);

});

out.on('finish', function () {

console.log("写入完成。");

/*

设置5分钟删除生成的word,避免占用服务器资源

*/

setTimeout(() => {

try {

fs.access('./public/uploadFile/temporaryFile/' + meet_name + '_会议通知.docx',

fs.constants.F_OK, (err) => {

if (!err) {

fs.unlinkSync('./public/uploadFile/temporaryFile/' +

meet_name + '_会议通知.docx');

}

});

} catch (e) {

console.error(e);

}

}, 5 * 60 * 1000);

//返回服务器中生成的word的路劲

res.send('/uploadFile/temporaryFile/' + meet_name + '_会议通知.docx');

});

最后:页面通过路径直接下载word,这里附上页面ajax成功后的代码;

success: function (r) {

$.messager.progress('close');

if (r == "err") {

msgError('导出失败!,请稍后重试');

}

if (r == "0") {

msgError("请对会议基础信息进行完善和确认");

} else {

//获取当前网址,如: http://localhost:8080/imgs/doc/abc.jsp

var curWwwPath = window.document.location.href;

//获取主机地址之后的目录,如: imgs/doc/abc.jsp

var pathName = window.document.location.pathname;

var pos = curWwwPath.indexOf(pathName);

//获取主机地址,如: http://localhost:8080

var localhostPaht = curWwwPath.substring(0, pos);

location.href = localhostPaht + r;

}

},

相关文章:

  • 计算机中的自己用英语怎么表示,英语口语:“我的电脑中病毒”用英语怎么表达?...
  • HTML编写个人日记,HTML学习日记(1-基础)
  • 计算机专业中并行运算如何,并行计算-结构·算法·编程
  • 家用计算机是什么时候开始流行,什么时候电脑在我国开始普及?
  • 附件1计算机化系统试题,附件1 计算机化系统.pdf
  • 大学计算机应用教程2018答案,东北师范大学2018秋季计算机应用基础-答案
  • 计算机三级高级技能考试试题及答案,2016年计算机三级信息管理技术题库及答案...
  • 编制计算机程序解决问题的5个步骤,第四章第一节编制计算机程序解决问题
  • 怎样修复计算机系统软件,重装系统后软件如何恢复呢?
  • 怎么组织计算机更新,如何处理当计算机提示:您的组织已关闭Windows 10中的自动更新!...
  • 支持傲腾技术的服务器主板,采用英特尔® 傲腾™ 技术的数据中心存储
  • 服务器机柜智能锁从哪供电,怎样从插座为智能锁供电
  • 服务器燃气热水器原理,燃气热水器选择攻略来了 简直太实用了!
  • 逍遥模拟器微信提示无法连接服务器,逍遥模拟器无法连接网络怎么办?
  • 华为q1设置虚拟服务器,华为路由Q1的上网设置教程
  • 07.Android之多媒体问题
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • download使用浅析
  • ES10 特性的完整指南
  • Laravel Mix运行时关于es2015报错解决方案
  • oldjun 检测网站的经验
  • PAT A1050
  • text-decoration与color属性
  • WePY 在小程序性能调优上做出的探究
  • windows下mongoDB的环境配置
  • 基于组件的设计工作流与界面抽象
  • 码农张的Bug人生 - 见面之礼
  • 你真的知道 == 和 equals 的区别吗?
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 驱动程序原理
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 译自由幺半群
  • # Maven错误Error executing Maven
  • #HarmonyOS:基础语法
  • (3)(3.5) 遥测无线电区域条例
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C)一些题4
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (三)模仿学习-Action数据的模仿
  • (十六)Flask之蓝图
  • (学习日记)2024.01.09
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (正则)提取页面里的img标签
  • (转)Linq学习笔记
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .NET 回调、接口回调、 委托
  • .net 验证控件和javaScript的冲突问题
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术