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日

相关文章

  • 详解VUE调用本地json的使用方法

    下面是详细讲解“详解VUE调用本地json的使用方法”的完整攻略。 一、创建本地JSON文件 首先,我们需要在项目中创建本地的JSON文件,可以在项目的静态文件夹中创建一个新的文件夹,比如称之为json,然后在该文件夹中创建一个名为data.json的JSON文件。 下面是一个data.json文件的示例内容: { "users": [ …

    Vue 2023年5月28日
    00
  • Vue.set 全局操作简单示例

    Vue.set()方法是Vue.js提供的全局操作,用于给Vue实例动态添加属性,并保证新添加的属性能够响应式地触发视图更新。以下是一个关于Vue.set()的攻略: 简介 Vue.set()的语法如下: Vue.set(object, key, value) 其中: object:Vue实例的一个数据对象 key:新添加的键 value:新添加的键对应的值…

    Vue 2023年5月27日
    00
  • vue绑定class与行间样式style详解

    Vue绑定class与行间样式style详解 在Vue中,我们可以通过v-bind指令来绑定元素的class和行间样式style,实现动态控制页面样式的效果。 绑定class 对象语法 在模板中,使用v-bind:class指令来绑定class。当对象中的属性值为true时,class会被应用到元素上,反之该class不会被应用。 示例代码如下: <t…

    Vue 2023年5月27日
    00
  • vue 文件切片上传的项目实现

    下面我将详细讲解“Vue 文件切片上传的项目实现”的完整攻略。该过程主要分为以下五个步骤: 安装依赖库 开发项目之前需要先安装以下库: axios:用于发起后端请求; element-ui:基于 Vue 的组件库,提供了上传文件的组件; js-sha256:计算文件的哈希值。 可以使用以下命令进行安装: npm install axios element-u…

    Vue 2023年5月28日
    00
  • vue如何根据url下载非同源文件

    我可以给你详细讲解一下vue如何根据url下载非同源文件的完整攻略: 1. axios下载文件 通过axios来下载非同源文件是常见的做法。具体操作步骤如下: 引入axios库 首先需要在vue项目中引入axios库。 import axios from ‘axios’; 下载文件 然后通过axios发起get请求,通过responseType设置返回的数据…

    Vue 2023年5月27日
    00
  • Vue判断字符串(或数组)中是否包含某个元素的多种方法

    关于Vue中判断字符串或数组中是否包含某个元素的方法主要有以下几种方式: 字符串判断 includes ES6中新增了字符串方法includes,它返回一个布尔值,表示当前字符串是否包含传入的字符或字符串。 const str = ‘hello world’ console.log(str.includes(‘he’)) // true console.lo…

    Vue 2023年5月27日
    00
  • vue3 中 computed 新用法示例小结

    下面是关于”vue3 中 computed 新用法示例小结”的完整攻略: 什么是 computed 在 Vue.js 中,我们可以通过计算属性来简化模板中的表达式,避免过多的逻辑计算,提高代码可维护性。computed 可以自动监听依赖变化,只有当依赖的值发生变化时,才会重新计算返回值。 在 Vue.js 3.0 中,computed 有了几个新的方法和特性…

    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
合作推广
合作推广
分享本页
返回顶部