nodejs 生成和导出 word的实例代码

生成和导出word文件是我们在进行实际开发中比较常见的需求之一。而在nodejs中,我们可以利用一些库来完成这个功能。

以下是使用nodejs生成和导出word的完整攻略,包含两个示例:

1. 安装依赖

首先,我们需要使用npm来安装需要的依赖库。

其中,docx可以用来生成word,而fs则是node文件系统模块,用于文件的读写操作,path则是node的路径处理模块,使我们更方便地处理文件路径。

```bash
npm install docx fs path --save

2. 创建模板文件

在生成word文件之前,我们需要创建一个word文件模板,在模板中定义我们想要生成的内容。

可以使用Microsoft Word或其他编辑器来创建模板文件,将其保存为.docx格式,并将其放在项目中的合适位置。

3. 创建生成word的脚本

接下来,我们可以创建一个generateDoc.js文件,用于编写生成word文件的脚本。

首先,我们需要引入依赖库和我们自己创建的模板文件:

const fs = require("fs");
const path = require("path");
const Docxtemplater = require("docxtemplater");

const templateDocxPath = path.resolve(__dirname, "template.docx");
const content = { name: "John Doe", age: "30" };

其中,templateDocxPath是模板文件的路径,content是用于填充模板中的内容,后面我们会使用它来生成word内容。

接下来,我们可以读取模板文件内容,将其传递给Docxtemplater库:

const templateContent = fs.readFileSync(templateDocxPath, "binary");
const doc = new Docxtemplater();
doc.loadZip(new JSZip(templateContent));

然后,我们将content中的内容传递给模板进行填充:

doc.setData(content);
doc.render();

最后,我们可以将生成的文件保存到指定路径下:

const outputFilePath = path.resolve(__dirname, "output.docx");
const outputContent = doc.getZip().generate({ type: "nodebuffer" });
fs.writeFileSync(outputFilePath, outputContent);

以上就是一个简单的生成word文件的脚本。

4. 示例一:使用单个模板文件来生成多个word文件

有时,我们需要使用单个模板文件来生成多个word文件,例如在批量生成合同、报价单等场景下。

为了达到这个目的,我们可以将上面的脚本封装成一个函数,并使用不同的数据来调用它,例如:

function generateDocUsingTemplate(content, templateDocxPath) {
  const templateContent = fs.readFileSync(templateDocxPath, "binary");
  const doc = new Docxtemplater();
  doc.loadZip(new JSZip(templateContent));

  doc.setData(content);
  doc.render();

  const outputFilePath = path.resolve(
    __dirname,
    `output_${content.name}.docx`
  );
  const outputContent = doc.getZip().generate({ type: "nodebuffer" });
  fs.writeFileSync(outputFilePath, outputContent);
}

generateDocUsingTemplate({ name: "John Doe", age: "30" }, templateDocxPath);
generateDocUsingTemplate({ name: "Jane Doe", age: "28" }, templateDocxPath);

在这个示例中,我们创建了一个generateDocUsingTemplate函数,它接受两个参数——contenttemplateDocxPath。我们通过在generateDocUsingTemplate函数中调用fs.readFileSync来读取模板文件内容,使用不同的数据填充模板,然后将生成的文件保存到指定路径下。

通过分别调用generateDocUsingTemplate函数来生成两个word文件,命名为output_John Doe.docxoutput_Jane Doe.docx

5. 示例二:生成表格和图片

除了文本内容,我们也可以在生成word文件时添加表格和图片。

为了演示这一点,我们可以在模板文件中添加一个表格和一个图片。

在表格中,我们列出了一个人的一周日程安排,如下所示:

时间 星期一 星期二 星期三 星期四 星期五 星期六 星期日
上午9点-10点 公司 公司 屋里 屋里
上午10点-11点 公司 公司 屋里 屋里
上午11点-12点 公司 公司 屋里 屋里
下午1点-2点 家里 家里 客户 客户 加油站 add.jpg
下午2点-3点 家里 家里 客户 客户 加油站 add.jpg

其中,最后一个单元格包含了一张图片,我们需要将它添加到word文件中。

下面是一个演示如何添加表格和图片的简单示例:

const width = 600;
const height = 400;
const imageFilePath = path.resolve(__dirname, "add.jpg");

const content = {
  name: "John Doe",
  age: "30",
  table: [
    ["上午9点-10点", "", "", "公司", "", "公司", "屋里", "屋里"],
    ["上午10点-11点", "", "", "公司", "", "公司", "屋里", "屋里"],
    ["上午11点-12点", "", "", "公司", "", "公司", "屋里", "屋里"],
    ["下午1点-2点", "家里", "家里", "", "客户", "客户", "加油站", imageFilePath],
    ["下午2点-3点", "家里", "家里", "", "客户", "客户", "加油站", imageFilePath],
  ],
};

const templateDocxPath = path.resolve(__dirname, "template.docx");
const templateContent = fs.readFileSync(templateDocxPath, "binary");
const doc = new Docxtemplater();
doc.loadZip(new JSZip(templateContent));

// 注意:需要将JSZip的v3版本降级到v2以避免出现错误
doc.setOptions({
  parser: function () {
    return JSON.parse.apply(JSON, arguments);
  },
});

doc.setData(content);
doc.render();

const outputFilePath = path.resolve(__dirname, "output.docx");
const outputContent = doc.getZip().generate({ type: "nodebuffer" });
fs.writeFileSync(outputFilePath, outputContent);

在这个示例中,我们首先定义了一些用于插入图片的变量——widthheightimageFilePath,这些变量将在生成word文件时使用。后面,我们将表格中的数据和模板文件传递给Docxtemplater库,使用setData方法填充模板中的内容,并使用render方法生成word文件。

最后,我们将生成的文件保存到指定路径。在table数组中,每个数组项都是一个代表一行的数组,数组中的每个元素都代表一个单元格内容。如果一个单元格包含图片,我们需要将该单元格的内容设置为图片的文件路径。

这就是如何使用nodejs生成和导出word的完整攻略。希望这可以帮助你快速了解如何在nodejs中实现这一功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs 生成和导出 word的实例代码 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue3中的watch和watchEffect实例详解

    Vue3中的watch和watchEffect实例详解 在Vue3中,watch和watchEffect可以定义响应式数据的副作用。本文会详细讲解两者的区别和使用方式,并给出几个实例示例说明。 watch watch的基本用法是:当数据发生变化时执行一个函数。可以用来监听单个数据的变化,也可以监听多个数据。 监听单个数据 监听单个数据可以通过$watch函数…

    Vue 2023年5月27日
    00
  • js中less常用的方法小结

    JS中Less常用的方法小结 1. Less和CSS变量 我们都知道,CSS中 var() 函数是用来引用自定义变量的。在Less中,我们可以使用和CSS类似的方式来定义和使用变量。下面是Less的变量定义示例: @base-color: #666; body { color: @base-color; background-color: lighten(@…

    Vue 2023年5月28日
    00
  • VUE简单的定时器实时刷新的实现方法

    下面是关于“VUE简单的定时器实时刷新的实现方法”完整攻略: 1. 环境 首先,需要在Vue应用程序中安装Node.js和npm包管理器。使用npm安装vue和vue-router库,以及vue-cli脚手架。 2. 定时器原理 定时器是一种重复执行某个操作的技术。在Vue中,常用的定时器方法是setInterval(),它将函数重复执行,直到定时器被清除。…

    Vue 2023年5月29日
    00
  • Vue vant使用ImagePreview实现预览图片

    一、Vue vant ImagePreview简介 Vue vant ImagePreview是一个基于vant组件库的vue插件,它的主要作用是在移动端实现图片的预览功能,在应用中使用非常广泛。在Vue vant中,ImagePreview是一种非常常见的组件,可以很方便地实现图片预览效果。 二、Vue vant ImagePreview实现预览图片的方法…

    Vue 2023年5月27日
    00
  • Vue获取初始化数据是放在created还是mounted解读

    接下来我会详细讲解“Vue获取初始化数据是放在created还是mounted解读”的攻略。 构建Vue实例 首先,在构建Vue实例之前,我们需要先导入Vue.js。 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> 然后,我们…

    Vue 2023年5月28日
    00
  • Vue 通过公共字段,拼接两个对象数组的实例

    要完成“Vue 通过公共字段,拼接两个对象数组”的操作,可以使用Vue中的计算属性来实现。 在Vue实例的data中定义两个对象数组: data: { arr1: [ { id: 1, name: ‘A’, age: 20 }, { id: 2, name: ‘B’, age: 22 }, { id: 3, name: ‘C’, age: 18 }, ], …

    Vue 2023年5月27日
    00
  • rollup3.x+vue2打包组件的实现

    下面是rollup3.x+vue2打包组件的实现攻略: 什么是Rollup Rollup是一个JavaScript模块打包器,可以将小块代码编译成大块复杂的代码,它专注于ES模块的打包。 Rollup和Vue组件库打包 Vue组件库是一种常见的前端开发方式,它可以将页面中可复用的组件单独封装成一个独立的组件库,使用时只需要引用该组件库就可以方便地使用这些组件…

    Vue 2023年5月28日
    00
  • vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)

    下面我就来详细讲解一下“vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)”的完整攻略。 1. 插件简介 这个插件是基于Vue 2.0实现的倒计时插件,可以实现倒计时的功能,并且不受时间戳、刷新、跳转等因素的影响。它的使用比较简单,只需要在Vue实例中引入即可。 2. 安装 可以通过npm进行安装: npm install vue-countdow…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部