iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >前端Vue.js实现json数据导出到doc
  • 192
分享到

前端Vue.js实现json数据导出到doc

2024-04-02 19:04:59 192人浏览 薄情痞子
摘要

目录组件选择实现一个最简单的导出单条数据导出到Word批量数据导出到wrod前言: 先说下需求:如何批量导出表格中勾选的数据,导出格式为word,并具有一定的格式! 开发环境:vue

前言:

先说下需求:如何批量导出表格中勾选的数据,导出格式为word,并具有一定的格式!

开发环境:vue3node v14.15.0

组件选择

因为导出word需要保留一定的格式,所以这里选择docxtemplater,利用定制导出模板的方式限制数据的导出格式。

实现一个最简单的导出

安装(后续的demo依赖相同)

yarn add docxtemplater pizzip file-saver

用法:

onst PizZip = require("pizzip");
const Docxtemplater = require("docxtemplater");
const fs = require("fs");
const path = require("path");
// Load the docx file as binary content
const content = fs.readFileSync(
    path.resolve(__dirname, "input.docx"),
    "binary"
);
const zip = new PizZip(content);
const doc = new Docxtemplater(zip, {
    paragraphLoop: true,
    linebreaks: true,
});
// Render the document (Replace {first_name} by John, {last_name} by Doe, ...)
doc.render({
    first_name: "John",
    last_name: "Doe",
    phone: "0652455478",
    description: "New WEBsite",
});
const buf = doc.getZip().generate({
    type: "nodebuffer",
    // compression: DEFLATE adds a compression step.
    // For a 50MB output document, expect 500ms additional CPU time
    compression: "DEFLATE",
});

单条数据导出到word

配置导出模板,并上传CDN,模板格式如下:

导出的数据结构:

{
    "title": "第一篇",
    "gradeId": "三年级上",
    "genreDesc": "议论文",
    "subjectMatterInfo": "叙事",
    "content": "\t一个晴朗的星期天,爸爸和妈妈带我到北海公园去玩儿。那天秋高气爽,太阳在蓝",
    "remark": "点评1"
}

导出wrod截图

具体实现:

import Docxtemplater from 'docxtemplater';
import PizZip from 'pizzip';
import PizZipUtils from 'pizzip/utils/index.js';
import {saveAs} from 'file-saver';

function loadFile(url, callback) {
    PizZipUtils.getBinaryContent(url, callback);
}

export const renderDoc = data => {
    loadFile('你上传导出模板的CDN链接.docx', (error, content) => {
        if (error) {
            throw error;
        }
        const zip = new PizZip(content);
        const doc = new Docxtemplater(zip, {linebreaks: true});
        doc.setData(data);
        try {
            // render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
            doc.render();
        }
        catch (error) {
            // The error thrown here contains additional infORMation when logged with JSON.stringify (it contains a properties object containing all suberrors).
            function replaceErrors(key, value) {
                if (value instanceof Error) {
                    return Object.getOwnPropertyNames(value).reduce((error, key) => {
                        error[key] = value[key];
                        return error;
                    }, {});
                }
                return value;
            }
            console.log(JSON.stringify({error}, replaceErrors));

            if (error.properties && error.properties.errors instanceof Array) {
                const errorMessages = error.properties.errors
                    .map(error => error.properties.explanation)
                    .join('\n');
                console.log('errorMessages', errorMessages);
                // errorMessages is a humanly readable message looking like this :
                // 'The tag beginning with "foobar" is unopened'
            }
            throw error;
        }
        const out = doc.getZip().generate({
            type: 'blob',
            mimeType:
                'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        });
        // Output the document using Data-URI
        saveAs(out, '导出word.docx');
    });
};

批量数据导出到wrod

配置导出模板,并上传CDN,模板格式如下:

#articles为循环开始,/为循环结束,中间是循环体

导出的数据结构:

{
    "articles": [
        {
            "title": "第一篇",
            "gradeId": "三年级上",
            "genreDesc": "议论文",
            "subjectMatterInfo": "叙事",
            "content": "\t一个晴朗的星期天,爸爸和妈妈带我到北海公园去玩儿。那天秋高气爽,太阳在蓝",
            "remark": "点评1"
        },
        {
            "title": "第二篇",
            "gradeId": "三年级下",
            "genreDesc": "记叙文",
            "subjectMatterInfo": "写人",
            "content": "\t一个晴朗的星期天,爸爸和妈妈带我到北海公园去玩儿妈带我到北海公园去玩儿。那天秋高气爽,太阳在蓝。\n问女何所思,问女何所忆。女亦无所思,女亦无所忆。昨夜见军帖,可汗大点兵,军书十二卷,卷卷有爷名。阿爷无大儿,木兰无长兄,愿为市鞍马,从此替爷征。问女何所思,问女何所忆。女亦无所思,女亦无所忆。昨夜见军帖,可汗大点兵,军书十二卷,卷卷有爷名。阿爷无大儿,木兰无长兄,愿为市鞍马,从此替爷征。",
            "remark": "点评2"
        }
    ]
}

导出wrod截图:

具体实现:

import Docxtemplater from 'docxtemplater';
import PizZip from 'pizzip';
import PizZipUtils from 'pizzip/utils/index.js';
import {saveAs} from 'file-saver';

function loadFile(url, callback) {
    PizZipUtils.getBinaryContent(url, callback);
}
export const renderDoc = data => {
    loadFile('你上传导出模板的CDN链接.docx', (error, content) => {
        if (error) {
            throw error;
        }
        const zip = new PizZip(content);
        // paragraphLoop段落循环
        const doc = new Docxtemplater(zip, {paragraphLoop: true, linebreaks: true});
        doc.setData(data);
        try {
            // render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
            doc.render();
        }
        catch (error) {
            // The error thrown here contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors).
            function replaceErrors(key, value) {
                if (value instanceof Error) {
                    return Object.getOwnPropertyNames(value).reduce((error, key) => {
                        error[key] = value[key];
                        return error;
                    }, {});
                }
                return value;
            }
            console.log(JSON.stringify({error}, replaceErrors));

            if (error.properties && error.properties.errors instanceof Array) {
                const errorMessages = error.properties.errors
                    .map(error => error.properties.explanation)
                    .join('\n');
                console.log('errorMessages', errorMessages);
                // errorMessages is a humanly readable message looking like this :
                // 'The tag beginning with "foobar" is unopened'
            }
            throw error;
        }
        const out = doc.getZip().generate({
            type: 'blob',
            mimeType:
                'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        });
        // Output the document using Data-URI
        saveAs(out, '导出word.docx');
    });
};

到此这篇关于前端vue.js实现json数据导出到doc的文章就介绍到这了,更多相关Vue.js json数据导出doc内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 前端Vue.js实现json数据导出到doc

本文链接: https://www.lsjlt.com/news/167590.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 前端Vue.js实现json数据导出到doc
    目录组件选择实现一个最简单的导出单条数据导出到word批量数据导出到wrod前言: 先说下需求:如何批量导出表格中勾选的数据,导出格式为word,并具有一定的格式! 开发环境:vue...
    99+
    2024-04-02
  • javascript怎么实现纯前端将数据导出excel
    这篇文章主要介绍了javascript怎么实现纯前端将数据导出excel的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript怎么实现纯前端将数据导出excel文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-02
  • javascript 实现纯前端将数据导出excel两种方式
    目录前言方法一方法二前言 修改之前项目代码的时候,发现前人导出excel是用纯javascript实现的。并没有调用后台接口。 之前从来没这么用过,记录一下。以备不时之需。 方法一 ...
    99+
    2024-04-02
  • Qt怎么实现数据导出到xls
    本篇内容介绍了“Qt怎么实现数据导出到xls”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言导入导出数据到csv由于语法简单,适用场景...
    99+
    2023-06-26
  • JS如何实现将数据导出到Excel
    今天小编给大家分享一下JS如何实现将数据导出到Excel的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。方法一:将table标...
    99+
    2023-07-02
  • vue导出word纯前端的实现方式
    vue导出word纯前端实现 最近项目有个需求导出word,纯前端实现,查了查资料,用docxtemplater简直不要太简单。 直接把官网例子拿过来就可以了。!!! 官网地址 首先...
    99+
    2024-04-02
  • php怎么实现接受前端数据并转成json
    在前后端分离的开发模式下,前后端的数据传输采用的是 RESTful 接口。前端通过 AJAX 请求获取数据,而后端使用 PHP 脚本处理请求,将数据封装成 JSON 格式返回给前端。PHP 作为一个流行的服务器端脚本语言,可以方便地接受前端...
    99+
    2023-05-14
  • 如何使用vue实现前端导入excel数据
    目录前言一、主界面先引入导入组件二、封装excel-import组件1.首先是template代码(这里用的是ant vue desgin框架的组件)2.引入接口3.js代码meth...
    99+
    2023-05-17
    vue前端导入excel文件 vue导入excel并预览 前端导入excel文件
  • Java中用POI实现将数据导出到Excel
    一、前言 数据导出为Excel在我们写项目的过程中经常用到 需要用到的jar包 poi-3.17.jar 二、具体实现步骤 //第一步创建一个webbook,对应一个Excel...
    99+
    2024-04-02
  • Qt实现数据导出到xls的示例代码
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 导入导出数据到csv由于语法简单,适用场景有限,于是乎还是必须再造一个轮子导出数据到xls,在经历过数十年的项目实...
    99+
    2024-04-02
  • python导入导出redis数据的实现
    目录一.导出redis某个库的数据使用python向Redis批量导入数据二.导入redis某个库的数据注:以String类型为例 一.导出redis某个库的数据 import re...
    99+
    2024-04-02
  • Spring Boot + EasyExcel实现数据导入导出
    目录背景SpringBoot项目集成依赖集成实体类实现业务逻辑实现MemberService实现简单导出实现自定义导入实现同步获取结果导入实现基于监听导入实现小结背景 老项目主要采用...
    99+
    2022-11-13
    Spring Boot 数据导入导出 EasyExcel数据导入导出
  • 如何使用easyui从servlet传递json数据到前端页面
    这篇文章给大家分享的是有关如何使用easyui从servlet传递json数据到前端页面的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 两种方法获取的数据在servle...
    99+
    2024-04-02
  • Qt实现导出QTableWidget/QTableView数据
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 本组件的初衷就是造一个轮子,让数据导入导出用法极致简单,几个行数几行代码搞定它,适用大部分的应用场景,这也是本组件...
    99+
    2024-04-02
  • Vue实现数据导出导入实战案例
    目录前言1、创建一个空白的vue2/vue3项目2、创建Export.vue 示例文件总结前言 项目开发当中,列表数据的导出功能基本是每个业务系统必备的功能、另外Excel数据批量导...
    99+
    2023-01-09
    vue实现导入导出 vue文件导入导出 vue怎么导出
  • JS实现将数据导出到Excel的方法详解
    修改之前项目代码的时候,发现前人导出excel是用纯javascript实现的。并没有调用后台接口。 之前从来没这么用过,记录一下。以备不时之需。 方法一: 将table标签,包括t...
    99+
    2024-04-02
  • Vue前端导出Excel文件的详细实现方案
    目录一、技术选型 二、技术实现 使用 vue-json-excel 插件实现1.安装 vue-json-excel 依赖 2.注册插件到 vue 实例 3.使用方式 基于 sheet...
    99+
    2024-04-02
  • 数据库中如何实现导入导出
    这篇文章主要为大家展示了“数据库中如何实现导入导出”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“数据库中如何实现导入导出”这篇文章吧。 ...
    99+
    2024-04-02
  • Oracle AWR如何实现数据导入/导出
    这篇文章主要介绍Oracle AWR如何实现数据导入/导出,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!LINUX状态下,连接oracle用户:su - oracle 1....
    99+
    2024-04-02
  • fastadmin实现导出Excel和导入Excel数据
    public function export() { if ($this->request->isPost()) { require_once(VENDOR_...
    99+
    2023-08-31
    php Powered by 金山文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作