不会邮件合并,就用代码KoWord

这个男人叫小帅,要批量做上百份标准化word简历,只因不想学Word,他决定用Node.js封装一个KoWord函数,只为干掉困扰千万人的Word...

成立 信息支援小组 ,让天下人不再碰Word、不再被格式为难,格式和内容彻底分离,提升中华办公效率200%

〇、任务目标

根据data文件夹提供的全部人员名单。为每个学生 生成Word简历,并在建立中填写姓名学号,命名格式为学号后两位_姓名.docx,在[生成]文件夹显示。接下来用 邮件合并 和 Node.js对比进行同样操作。

得到所有人员的word格式简历。 接下来对比 人工队 和 代码队两种方式对比,直接给出结论:

  • 共同:都需要再Word模版中挖空,人工队是《变量》,代码是{变量}。
  • 差异:代码初次成本高,但有更好的修改灵活和弹性,能够适应未来更广泛的个性化修改场景。
  • 效率:代码>人工。

一、邮件合并功能

以WPS为例,数据必须使用 .xls格式才能作为数据源, .docx- 待插入数据样式模版

1.在【引用】选项卡找到 【邮件合并】功能,

2.【打开数据源】选择.xls格式数据,选择数据源之后会自动识别第一行字段。

3. 选择【插入合并区域】→在下方要插入选择字段占位<<学号>><<姓名>>(不要手动输入)

依次在你需要的位置插入和EXCEL数据第一行中相同的字段,学号,姓名。

4. 选择合并到不同的新文档。

生成效果如下:

思考:那么 学号后两位+姓名.docx的格式该如何做

交给各位看管解决,因为我不想学邮件合并。

接下来我们用代码方式实现! 接下来我们用代码方式实现!

二、⚔️ 我会出手的KoWord

准备数据文件和 word模版,挖好变量插值的空。Node.js使用模块docxtemplater、pizzip 。更多插值语法可以参考为了不碰Word,程序员必学docxtemplater - 掘金

2.1 主函数代码

js 复制代码
//引入自定义模块  数据.js
let stuArr = require(`./data/数据.js`)
// 引入自定义模块  KoWord.js 并使用pnpm安装相应的依赖 
const { KoWord, co } = require('./js/KoWord.js')

let 模版文件 = `./data/学生模版.docx`
//补全代码,完成for循环
for(let i = 0 ; i < stuArr.length ; i++){

    // 获取每一个学生信息
    let stu = stuArr[i]
    let num = stu.num.slice(-2) //获取学号后两位
    let name = stu.name 
    // 文件名格式为 学号后两位_姓名.docx
    let 输出文件 = `./生成/${num}_${name}.docx`
    let 数据 = stu
    
    //使用 KoWord函数 输出
    KoWord(模版文件,输出文件,数据)  // 移除分号


    //使用co函数 在终端输出  "生成文件 01_张三.docx 成功" 文件提示
    co(`生成文件 ${输出文件} 成功`)
}

2.2 自定义模块KoWord

js 复制代码
const PizZip = require("pizzip"); // 引入PizZip模块
const Docxtemplater = require("docxtemplater"); // 引入Docxtemplater模块



const fs = require("fs"); 
const { styleText } = require('util') 


async function KoWord(模版文件,输出文件,数据){
    const content = fs.readFileSync(模版文件, "binary");

    // 解压文件的内容
    const zip = new PizZip(content); // 创建一个新的PizZip实例

    // 解析模板,并在模板无效时抛出错误,例如,如果模板是"{user"(没有闭合标签)
    const doc = new Docxtemplater(zip, { // 创建Docxtemplater实例
        paragraphLoop: true, // 允许段落循环
        linebreaks: true, // 保持换行符
    });

    doc.render(数据);

    // 获取zip文档并将其生成为Node.js缓冲区
    const buf = doc.getZip().generate({ // 生成文档的zip格式
        type: "nodebuffer", // 生成类型为nodebuffer
        compression: "DEFLATE", // 压缩类型为DEFLATE
    });
    
    fs.writeFileSync(输出文件, buf); // 将渲染后的文档写入到output.docx文件
}//KoWord



function co(文本内容){
    // 定义随机背景颜色组(移除分号)
    const colorArr = ['bgBlack', 'bgRed', 'bgGreen', 'bgYellow', 'bgBlue', 'bgMagenta', 'bgCyan', 'bgWhite', 'bgGray', 'bgRedBright', 'bgGreenBright', 'bgYellowBright', 'bgBlueBright', 'bgMagentaBright', 'bgCyanBright', 'bgWhiteBright']
    
    const fontColorArr = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'gray', 'redBright', 'greenBright', 'yellowBright', 'blueBright', 'magentaBright', 'cyanBright', 'whiteBright']

    // 修改:将Emoji表情加载到数组中并保持一行
    const emojiArr = ['🌰','🌱','🌲','🌳','🌴','🌵','🌷','🌸','🌹','🌺','🌻','🌼','🌽','🌾','🌿','🍀','🍁','🍂','🍃','🍄','🍅','🍆','🍇','🍈','🍉','🍊','🍋','🍌','🍍','🍎','🍏','🍐','🍑','🍒','🍓','🍔','🍕','🍖','🍗','🍘','🍙','🍚','🍛','🍜','🍝','🍞','🍟','🍠','🍡','🍢','🍣','🍤','🍥','🍦','🍧','🍨','🍩','🍪','🍫','🍬','🍭','🍮','🍯','🍰','🍱','🍲','🍳','🍴','🍵','🍶','🍷','🍸','🍹','🍺','🍻','🍼','🍾','🍿','🎀','🎁','🎂']
    // 生成随机索引(移除分号)
    const i = Math.floor(Math.random() * fontColorArr.length)
    const j = Math.floor(Math.random() * emojiArr.length)
    // 获取随机背景颜色(移除分号)
    const 背景颜色 = fontColorArr[i]
    let 内容 = `${emojiArr[j].repeat(3)}  ${文本内容}`
    console.log(styleText( 背景颜色,内容 ))  // 移除分号并简化空格
}//信息处理



// 导出核心函数,供其他文件引用
module.exports = { KoWord, co  }

让Tare进行代码分析:
KoWord.js是一个文档生成与控制台输出美化工具,主要包含两个核心函数:

1) DOCX文档生成函数KoWord

  • 功能:基于模板文件和数据生成新的Word文档
  • 实现流程
    1. 使用fs.readFileSync读取模板文件内容
    2. 通过PizZip模块解压DOCX文件(DOCX本质是ZIP压缩包)
    3. 使用Docxtemplater引擎解析模板并渲染数据
    4. 生成Node.js缓冲区数据并通过fs.writeFileSync写入输出文件
  • 参数
    • 模版文件:模板DOCX文件路径
    • 输出文件:生成的目标文件路径
    • 数据:用于填充模板的JavaScript对象

2) 控制台输出美化函数co

  • 功能:为控制台输出添加随机颜色和表情符号装饰
  • 实现流程
    1. 定义颜色数组(colorArrfontColorArr)和表情符号数组(emojiArr
    2. 生成随机索引选择颜色和表情符号
    3. 使用util.styleText设置文本样式
    4. 在文本前添加3个重复的随机表情符号并输出到控制台

技术依赖

  • pizzip:处理ZIP格式文件(DOCX文件的基础格式)
  • docxtemplater:DOCX模板引擎,支持变量替换和循环等功能
  • fs:Node.js文件系统模块,用于文件读写
  • util.styleText:Node.js内置工具,用于设置控制台文本样式

3 功能演示

三、相关文章

《为了不碰Word,程序员必学docxtemplater》 [为了不碰Word,程序员必学docxtemplater - 掘金]
juejin.cn/post/750557...

相关推荐
liuyang___6 小时前
日期的数据格式转换
前端·后端·学习·node.js·node
贩卖纯净水.7 小时前
webpack其余配置
前端·webpack·node.js
抹茶san8 小时前
和 Trae 一起开发可视化拖拽编辑项目(1) :迈出第一步
前端·trae
程序猿小D10 小时前
第24节 Node.js 连接 MongoDB
数据库·mongodb·npm·node.js·编辑器·vim·express
无知好快_Sosoo浪浪11 小时前
Node.js版本管理
node.js
不想说话的麋鹿13 小时前
《NestJS 实战:RBAC 系统管理模块开发 (三)》:角色权限分配与数据一致性
前端·后端·node.js
糖墨夕14 小时前
Trae还能将Figma 设计稿转化为前端代码
前端·trae
程序猿小D14 小时前
第26节 Node.js 事件
服务器·前端·javascript·node.js·编辑器·ecmascript·vim
hnlucky14 小时前
安装vue的教程——Windows Node.js Vue项目搭建
前端·javascript·vue.js·windows·node.js
前端服务区14 小时前
package.json文件
node.js