一、方法
使用 officegen 包,npm 地址 www.npmjs.com/package/off…
二、Demo
新建word.js 来测试officegen用法,代码如下,运行node word.js 后,会在当前目录生成 out.docx 文件,officegen API可以参考www.npmjs.com/package/off…
var officegen = require("officegen");
var fs = require("fs");
var docx = officegen("docx"); //word
docx.on("finalize", function (written) {
console.log(
"Finish to create Word file.\nTotal bytes created: " + written + "\n"
);
});
docx.on("error", function (err) {
console.log(err);
});
var table = [
[
{
val: "No.",
opts: {
align: "center",
vAlign: "center",
sz: "36",
// cellColWidth: 42,
// b:true,
// sz: '48',
// shd: {
// fill: "7F7F7F",
// themeFill: "text1",
// "themeFillTint": "80"
// },
// fontFamily: "Avenir Book"
},
},
{
val: "省份",
opts: {
align: "center",
vAlign: "center",
sz: "36",
// b:true,
// color: "A00000",
// align: "right",
// shd: {
// fill: "92CDDC",
// themeFill: "text1",
// "themeFillTint": "80"
// }
},
},
{
val: "市",
opts: {
align: "center",
vAlign: "center",
sz: "36",
// cellColWidth: 42,
// b:true,
// sz: '48',
// shd: {
// fill: "92CDDC",
// themeFill: "text1",
// "themeFillTint": "80"
// }
},
},
{
val: "区/县",
opts: {
align: "center",
vAlign: "center",
sz: "36",
// cellColWidth: 42,
// b:true,
// sz: '48',
// shd: {
// fill: "92CDDC",
// themeFill: "text1",
// "themeFillTint": "80"
// }
},
},
],
];
var data = [
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
{
id: "101010100",
provinceZh: "北京",
leaderZh: "北京",
cityZh: "北京",
cityEn: "beijing",
},
];
var tableStyle = {
tableColWidth: 2400,
tableSize: 24,
tableColor: "ada",
tableAlign: "center",
tableVAlign: "center",
tableFontFamily: "Comic Sans MS",
borders: true
}
//var tows = ['id', 'provinceZh', 'leaderZh', 'cityZh', 'cityEn'];//创建一个和表头对应且名称与数据库字段对应数据,便于循环取出数据
var pObj = docx.createP({ align: "center" }); // 创建行 设置居中 大标题
pObj.addText("全国所有城市", { bold: true, font_face: "Arial", font_size: 18 }); // 添加文字 设置字体样式 加粗 大小
// let towsLen = tows.length
let dataLen = data.length;
for (var i = 0; i < dataLen; i++) {
//循环数据库得到的数据,因为取出的数据格式为
/************************* 文本 *******************************/
// var pObj = docx.createP();//创建一行,可以
// pObj.addText(`(${i+1}), `,{ bold: true, font_face: 'Arial',});
// pObj.addText(`省级:`,{ bold: true, font_face: 'Arial',});
// pObj.addText(`${data[i]['provinceZh']} `,);
// pObj.addText(`市级:`,{ bold: true, font_face: 'Arial',});
// pObj.addText(`${data[i]['leaderZh']} `);
// pObj.addText(`县区:`,{ bold: true, font_face: 'Arial',});
// pObj.addText(`${data[i]['cityZh']}`);
/************************* 表格 *******************************/
let SingleRow = [
data[i]["id"],
data[i]["provinceZh"],
data[i]["leaderZh"],
data[i]["cityZh"],
];
table.push(SingleRow);
}
docx.createTable(table, tableStyle);
// word分页
docx.putPageBreak()
// 下一页内容
docx.createTable(table, tableStyle);
var out = fs.createWriteStream("out.docx"); // 文件写入
out.on("error", function (err) {
console.log(err);
});
var result = docx.generate(out); // 当前目录生成word