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

yizhihongxing

生成和导出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配置多页面的实现方法

    关于Vue配置多页面的实现方法,下面是一个完整的攻略。 1. 安装依赖 在开始前,需要安装vue-loader和vue-template-compiler这两个依赖。 npm install vue-loader vue-template-compiler –save-dev 2. 配置webpack 在webpack配置文件中,需要做如下修改。 在ent…

    Vue 2023年5月27日
    00
  • vue3.0 CLI – 2.6 – 组件的复用入门教程

    下面我将详细讲解“vue3.0 CLI – 2.6 – 组件的复用入门教程”的完整攻略。 1. 什么是组件? 在 Vue 中,组件是一种可复用的、独立的模块,用于封装相关的 HTML、CSS 和 JavaScript。组件的出现可以让 Web 应用程序更轻松地维护和扩展。 2. 组件的创建 在 Vue 中,用 Vue.component 方法来创建组件。例如…

    Vue 2023年5月27日
    00
  • Vue Element前端应用开发之常规Element界面组件

    下面我将为你详细讲解Vue Element前端应用开发之常规Element界面组件的完整攻略。 什么是Element UI组件库? Element UI是一个基于Vue.js开发的组件库,具有丰富的UI组件和交互行为,适用于快速开发,提供了一组优雅、高效的基础组件,极大地减轻了开发人员的工作量。 安装Element UI 安装Element UI的方式有以下…

    Vue 2023年5月28日
    00
  • vue中的计算属性传参

    下面就为大家介绍一下“Vue中的计算属性传参”。 什么是Vue中的计算属性传参 在Vue中,我们经常需要对数据进行处理,得出一个新的值,这就是计算属性的作用。计算属性是Vue中一个非常常用的特性,它的作用是根据现有的数据来计算新的数据。在一些复杂的数据计算场景中,我们可能还需要用到计算属性传参的方式来实现更加复杂的计算。 如何在Vue中使用计算属性传参 Vu…

    Vue 2023年5月28日
    00
  • vuex获取state对象中值的所有方法小结(module中的state)

    让我来为你详细讲解“vuex获取state对象中值的所有方法小结(module中的state)”的完整攻略吧。 一、简介 在Vuex中,state是一个数据源存储共享的数据。在Vuex的store中,state对象是唯一的。所以我们需要通过一些方式来获取和使用它。接下来,我将会为大家讲解在module中的state中,获取state对象的所有方法。 二、直接…

    Vue 2023年5月28日
    00
  • webstorm添加*.vue文件支持

    下面就为您详细讲解如何在WebStorm中添加*.vue文件支持的完整攻略。 1. 确认WebStorm版本 首先,需要确保您所使用的WebStorm版本支持.vue文件。目前,WebStorm官方版本16.3及以上均支持.vue文件,如果您使用的WebStorm版本低于此,则需要升级至最新版本。您可以在WebStorm官网上下载更新或升级。 2. 安装Vu…

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

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

    Vue 2023年5月28日
    00
  • mqtt.js 无法连接/错误提示 WebSocket connection to ‘ws://xxxxx‘ failed:的解决方法

    首先,需要了解一下MQTT协议和mqtt.js库。MQTT是一种用于物联网的轻量级协议,基于发布/订阅模式,支持良好的可靠性和低带宽消耗。而mqtt.js是MQTT协议的JavaScript客户端库,可以用于浏览器和Node.js环境下。 当在使用mqtt.js连接MQTT服务器时,出现“WebSocket connection to ‘ws://xxxxx…

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