智能办公项目分析

前言

现在我为你提供包含 班级学生姓名信息 和 学号的Excel 和 Word学生模版 ,让你在Word中生成所有同学的信息,每个同学的信息都要以"学号后两位_姓名.docx"命名,如果是你,你会选择怎么做?是使用Word中的邮件合并功能,然后再手动命名,还是采用什么样的方法?

其实可以不用那么麻烦,可以使用代码实现以上功能和要求,那该怎么写代码呢?

项目实现效果

这个项目是使用Node.js写出来的,我们先来看看这个项目的实现效果吧!

项目目录分析

我们先来分析一下这个项目的目录吧,这个生成文件夹是用来 存放生成的文件列表 的 data文件夹里存放了 有学生学号和学生姓名的Excel文件, 一个Word模板文件,还有一个JS文件

js文件夹的KoWord.js中引入了两个模块,并使用了一个自定义函数co,co函数负责对文本内容进行信息处理,然后在终端进行彩色输出

项目逻辑代码

安装模块

在终端安装模块 使用pnpm install pizzip docxtemplater命令

  • PizZip 是一个用于处理 ZIP 文件的库,用于读取和操作 Word 文档的内部结构
  • Docxtemplater 是一个用于操作 Word 模版的库,可以将模板中的占位符{name}替换为学生姓名。

代码部分

数据.js声明了一个包含全班同学信息的变量,数组stuArr,数组中包含了学生的学号num和姓名name,最后将这个数组导出

js 复制代码
let stuArr = [
  { num: '235030201', name: '焦新眷' },
  { num: '235030202', name: '唐溢聪' },
  { num: '235030203', name: '沈如意' },
  { num: '235030204', name: '程杏怡' },
  { num: '235030205', name: '舒慧君' },
  { num: '235030206', name: '柳颖颖' }
  //其他学生信息···
]; //全班同学信息

// 导出核心函数,供其他文件引用
module.exports = stuArr

KoWord.js 中,首先先引入模块,使用 fs 对文件进行读取和写入,然后使用fs.readFileSync 同步读取文件,使用PizZip 解压模板文件的内容,创建Docxtemplater实例,设置选项,使用传入的 数据 替换模板中的占位符,最后调用 doc.getZip().generate 方法生成新的 ZIP 文件,将生成的内容写入到指定文件。

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

co 函数的作用是处理文本内容,将其加上随机 Emoji 和随机背景颜色,然后输出到控制台,最后,将 KoWordco 函数导出,供 考试.js 引用。

js 复制代码
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  }

考试.js数据.js 里的每个学生生成一份单独的文档,文档命名遵循 "学号后两位_姓名.docx" 格式,保存于 生成 文件夹中,同时在终端输出进行提示。

使用for 循环遍历 stuArr 数组,对每个学生信息进行处理。

let stu = stuArr[i];:获取当前学生信息对象。

let num = stu.num.slice(-2);:截取学生学号的后两位。

let 文件名 = {num}_{stu.name}:根据学号后两位和学生姓名生成文件名。

let 输出文件 = ./生成/${文件名}.docx:定义输出文件的路径。

let 数据 = stu;:将当前学生信息对象赋值给 数据 变量。

KoWord(模版文件, 输出文件, 数据);:调用 KoWord 函数,依据模板文件、输出文件路径和学生信息生成Word文档。

co(生成文件 ${输出文件} 成功);:调用 co 函数,在终端输出文件生成成功的提示信息。

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 文件名=`${num}_${stu.name}`
    let 输出文件 = `./生成/${文件名}.docx`;
    let 数据 = stu;
    //使用 KoWord输出
    KoWord(模版文件, 输出文件, 数据);
    //使用co在终端输出 文件生成提示
    co(`生成文件 ${输出文件} 成功`);
}

总结

以上就是智能办公项目的全部内容,该项目实现了根据学生名单自动生成Word文件并以要求的格式命名的功能,通过代码,批量使用模版生成文档,避免了手动一个一个进行操作,并保证了所有简历格式的一致,大大提升了办公的效率。

相关推荐
KaneLogger11 小时前
【翻译】打造 Agent Skills 的最佳实践
agent·ai编程·claude
王小酱12 小时前
Everything Claude Code 文档
openai·ai编程·aiops
雮尘13 小时前
如何在非 Claude IDE (TARE、 Cursor、Antigravity 等)下使用 Agent Skills
前端·agent·ai编程
刘贺同学13 小时前
Day12-龙虾哥打工日记:OpenClaw 子 Agent 到底看到了什么?
aigc·ai编程
程序员鱼皮15 小时前
离大谱,我竟然在 VS Code 里做了个视频!
github·aigc·ai编程
Kayshen17 小时前
我用纯前端逆向了 Figma 的二进制文件格式,实现了 .fig 文件的完整解析和导入
前端·agent·ai编程
wangruofeng17 小时前
OpenClaw 飞书机器人不回复消息?3 小时踩坑总结
ai编程
恋猫de小郭18 小时前
AI 正在造就你的「认知卸载」,但是时代如此
前端·人工智能·ai编程
草梅友仁19 小时前
墨梅博客 1.7.0 发布与 AI 开发实践 | 2026 年第 9 周草梅周报
开源·github·ai编程