不会邮件合并,就用代码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...

相关推荐
没事别瞎琢磨1 小时前
十、统一 Runner 入口——能力检测与模式回退
人工智能·node.js
没事别瞎琢磨1 小时前
八、环境隔离——构建安全的子进程环境
人工智能·node.js
没事别瞎琢磨2 小时前
六、输出捕获与截断
人工智能·node.js
没事别瞎琢磨2 小时前
七、敏感路径预检——Protected Paths
人工智能·node.js
没事别瞎琢磨3 小时前
五、进程执行——spawn、超时与进程树清理
人工智能·node.js
没事别瞎琢磨3 小时前
四、命令风险分级与审批策略
人工智能·node.js
没事别瞎琢磨3 小时前
三、配置系统——默认值与解析
人工智能·node.js
右耳朵猫AI4 小时前
Node.js周刊2026W22 | Node.js 26、Deno 2.8、Rolldown 1.0、TypeORM 1.0、Bun v1.3.14
node.js
没事别瞎琢磨4 小时前
二、类型系统——给所有概念起名字
人工智能·node.js
Java.熵减码农7 小时前
Hermes Agent 安装踩坑记录:DNS 解析失败 & Node.js 幽灵文件冲突
node.js·ai编程·hermes