实现办公软件的自动化

一、项目目的

现有问题

想必大家都知道word是一款强大的文字处理软件,因为其直观的功能选项卡区域,不管是学生,还是上班族,用起来都非常容易上手。但是这只基于制作少量的word的文件。假设是让你收集班上所有同学用word文档写的基本信息,你会如何去收集?那我们先来谈谈传统方法------邮件合并,邮件合并确实可以实现多个格式相同的word文档,但只局限于那些姓名、地址、性别等文本类的基础信息,而且一旦生成,像什么个人照片、样式呀都只能手动去改。往小的说,利用邮件合并生成了100份word文件,修改其照片信息,可想而知其工作的艰难。那么,现在淘汰了邮件合并的方法,你还能想到哪些轻量快速的方法?

实现意义

所以我们要找到更快捷的方法------利用word文档的强大功能和Node.js结合形成一个可以自动生成以多名学生姓名为文件名的word文档。它不仅可以为我们节约时间,更提高了工作效率,此外文件格式也是统一化的,使人看起来更赏心悦目。

呈现效果

二、项目目录

前端准备好学生信息数据和包含了学生学号姓名的excel文件以及word模板,后端实现项目功能。

三、后端实现

这里是新建了一个KoWord函数,其功能是利用pizzip解析word文件,利用docxtemplater创建Docxtemplater实例,并将内容引入到word模板中,渲染word文档数据,最后将渲染后的文档写入output.docx文件。 想要完成以上功能需要安装两个模块:pnpm install pizzip docxtemplater

js 复制代码
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的前缀和随机文本颜色效果。

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( 背景颜色,内容 ))  // 移除分号并简化空格
}//信息处理

引入已有的数据(学生信息)和所需的KoWord函数后调用,循环学生姓名(在前端data中stuArr就是存储了学生信息),实现以学生姓名为文件名的word文档。

js 复制代码
//引入自定义模块  数据.js
let stuArr = require("./data/数据.js");
// 引入自定义模块  KoWord.js 并使用pnpm安装相应的依赖 
let {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文档竟然能以这种方式生成,不仅节省人力,还提升了办公效率,如果你也有独特的想法或者有趣的项目实践,期待你的分享!

相关推荐
JMchen1231 天前
AI编程范式转移:深度解析人机协同编码的实战进阶与未来架构
人工智能·经验分享·python·深度学习·架构·pycharm·ai编程
HetFrame1 天前
大模型驱动的禅道任务自动化规划与创建
python·ai·自动化·大模型·ai编程·任务·禅道
Ashley_Amanda2 天前
主流AI编程工具深度解析
ai编程
GISer_Jing2 天前
构建高性能Markdown引擎开发计划
前端·aigc·ai编程
Horizon_Ruan2 天前
从零开始掌握AI:LLM、RAG到Agent的完整学习路线图
人工智能·学习·ai编程
Testopia2 天前
AI编程实例 -- 数据可视化实战教程
人工智能·信息可视化·ai编程
PorkCanteen2 天前
Cursor使用-从问题到解决方案(以及一些通用rules)
前端·ai·ai编程
yangminlei2 天前
从零构建一个基于 DeepSeek 的 AI 对话系统:Spring Boot + 前端实战指南
spring boot·ai编程
差不多程序员2 天前
AI应用-关于Function-Call和MCP的理解与应用
java·spring boot·ai编程