智能办公项目分析

前言

现在我为你提供包含 班级学生姓名信息 和 学号的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文件并以要求的格式命名的功能,通过代码,批量使用模版生成文档,避免了手动一个一个进行操作,并保证了所有简历格式的一致,大大提升了办公的效率。

相关推荐
小璐乱撞12 小时前
从原理到实战:基于SpringAI的RAG应用探索
spring·ai编程
志辉AI编程12 小时前
我终究还是放弃ClaudeCode,转战DeepSeek 新工具
ai编程
量子位12 小时前
实测豆包 1.6,最火玩法 all in one!Seedance 登顶视频生成榜一,豆包 APP 全量上线
ai编程·豆包marscode
志辉AI编程12 小时前
数据需求全部交给 Claude 搞定?结果我还是 vibe coding 3 小时写了个系统
ai编程
coco012413 小时前
打造趣味策略游戏:OXO 网页游戏开发实战
后端·ai编程
chentao10614 小时前
5-工具调用 vs RAG-你喜欢主动还是被动?
ai编程
Captaincc14 小时前
从 AI Coding 到 AI Development:TRAE 亮相 2025 火山引擎 FORCE 原动力大会
ai编程·trae
Captaincc14 小时前
字节跳动技术副总裁洪定坤:TRAE 想做 AI Development
ai编程
星际码仔17 小时前
揭秘Claude系统提示词:这才是Artifacts的正确打开方式
ai编程·claude
倔强的石头_18 小时前
Trae Linux命令助手Agent:从自然语言到Linux命令的无缝转换
ai编程