位置: IT常识 - 正文

vue导出word(vue导出word文档打开报错,内容有问题)

编辑:rootadmin
vue导出word

推荐整理分享vue导出word(vue导出word文档打开报错,内容有问题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue导出word文档,vue导出word包含图表,vue导出word模板换行,vue导出word模板换行,vue导出word包含图表,vue导出word模板换行,vue导出word文档,vue导出word模板,内容如对您有帮助,希望把文章链接给更多的朋友!

最近的项目中,需要把vue中的部分内容导出为word形式,之前没有做过这方面的,特记录,由于是初学,所以整理了此模板,注意:这是一个模板,并不是相关字段的解析,每个字段都是做什么用的,我还不太清楚,以后会慢慢添加自己的理解。

看到的很好的一篇文章,讲的很详细:vue导出word - 知乎

1. 先在项目中安装所需要的依赖包,我安装了六个

npm install file-savernpm install docxtemplaternpm install pizzipnpm install jszip-utilsnpm install angular-expressionsnpm install lodash

 2. 引入核心代码文件  exportBriefDataDocx.js

在组件中引用,我将文件写在根目录下的utils中:

import { ExportBriefDataDocx } from '../utils/exportBriefDataDocx'

文件 exportBriefDataDocx.js中的内容:

import Docxtemplater from 'docxtemplater'import PizZip from 'pizzip'import JSZipUtils from 'jszip-utils'import { saveAs } from 'file-saver'export const ExportBriefDataDocx = (tempDocxPath, data, fileName) => { console.log(tempDocxPath, data, fileName, 111) var expressions = require('angular-expressions') var assign = require('lodash/assign') expressions.filters.lower = function(input) { // This condition should be used to make sure that if your input is // undefined, your output will be undefined as well and will not // throw an error if (!input) return input // toLowerCase() 方法用于把字符串转换为小写。 return input.toLowerCase() } function angularParser(tag) { tag = tag .replace(/^\.$/, 'this') .replace(/(’|‘)/g, "'") .replace(/(“|”)/g, '"') const expr = expressions.compile(tag) return { get: function(scope, context) { let obj = {} const scopeList = context.scopeList const num = context.num for (let i = 0, len = num + 1; i < len; i++) { obj = assign(obj, scopeList[i]) } return expr(scope, obj) } } } JSZipUtils.getBinaryContent(tempDocxPath, (error, content) => { if (error) { console.log(error) } // 创建一个JSZip实例,内容为模板的内容 // let zip = new JSZip(content); //用PizZip替代 const zip = new PizZip(content) // 创建并加载 Docxtemplater 实例对象 const doc = new Docxtemplater(zip, { parser: angularParser }) // 设置模板变量的值 doc.setData(data) try { // 呈现文档,会将内部所有变量替换成值, doc.render() } catch (error) { const e = { message: error.message, name: error.name, stack: error.stack, properties: error.properties } console.log({ error: e }) // 当使用json记录时,此处抛出错误信息 throw error } // 生成一个代表Docxtemplater对象的zip文件(不是一个真实的文件,而是在内存中的表示) const out = doc.getZip().generate({ type: 'blob', mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }) // 将目标文件对象保存为目标类型的文件,并命名 saveAs(out, fileName) })}

3. 然后设计需要导出的word模版,本地新建一个文档,后缀名为.docx。我是将这个文件保存在了根目录下的public中。

我到时候要传入模板中的数据是this.docxData,所以将所有的数据都保存在this.docxData中,例如:它有三个字段:数组tableData、数字year、数字month,如下:

vue导出word(vue导出word文档打开报错,内容有问题)

tableData :

tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1517 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1516 弄' }]

 docxData :

this.docxData.tableData = this.tableDatathis.docxData.year = 2022this.docxData.month = 9

 这是模板文档中的内容:

文档注意事项:

1)模板文件必须是docx文件。doc文件不能通过修改后缀名变为docx,必须另存时选择docx类型,才能实现类型转变。 2)使用英文下的花括号; 3)花括号内的键名前后不要有空格,且它与程序中的data对象的键名必须保持一致 ; 4)表格中想要循环添加的数据,需要在开头添加{#键名},在结尾处添加{/键名},一般对应的就是需要循环的数组名称。 5)图片居中不要使用{%%image2}

6)做判断的话,以{#键名}开头,以{/}结尾

4. 触发导出事件

methods: { // 导出docx exportDocx() { console.log('导出'); this.docxData.tableData = this.tableData this.docxData.year = 2022 this.docxData.month = 9 // ExportBriefDataDocx 是我导入的一个文件,里边写的是导出文本的核心代码 ExportBriefDataDocx('模板文件', 要传入模板的数据, '文档名字.docx') // ExportBriefDataDocx('/text.docx', this.docxData, '文档导出.docx') // text.docx放在了根目录下的public文件夹下 } }

效果图:

附上完整的组件部分的代码:

ExportDocx.vue:

<template> <div class="docx"> <el-button @click="exportDocx">导出</el-button> <h2>{{2022}}年{{9}}月</h2> <el-table :data="tableData" border style="width: 100%"> <el-table-column prop="date" label="日期" width="180"> </el-table-column> <el-table-column prop="name" label="姓名" width="180"> </el-table-column> <el-table-column prop="address" label="地址"> </el-table-column> </el-table> </div></template><script>import { ExportBriefDataDocx } from '../utils/exportBriefDataDocx'export default { name: "Docx", data() { return { tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1517 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1516 弄' }], docxData:{} } }, methods: { // 导出docx exportDocx() { console.log('导出'); this.docxData.tableData = this.tableData this.docxData.year = 2022 this.docxData.month = 9 ExportBriefDataDocx('/text.docx', this.docxData, '文档导出.docx') } },}</script><style scoped></style>
本文链接地址:https://www.jiuchutong.com/zhishi/292365.html 转载请保留说明!

上一篇:vue设置cookie和路由守卫(vue set-cookie)

下一篇:css实现轮播图(css实现轮播图侧边阴影效果)

  • 剪映羽化在哪里(剪影里的羽化在哪里)

    剪映羽化在哪里(剪影里的羽化在哪里)

  • Excel表格怎么增加表格行与列(excel表格怎么增加表格数量)

    Excel表格怎么增加表格行与列(excel表格怎么增加表格数量)

  • win7用户名和密码(win7用户名和密码怎么查看)

    win7用户名和密码(win7用户名和密码怎么查看)

  • 电脑QQ上怎么截屏发给别人(电脑上怎么截屏qq)

    电脑QQ上怎么截屏发给别人(电脑上怎么截屏qq)

  • 微信公众号怎么看谁转发了(微信公众号怎么赚钱)

    微信公众号怎么看谁转发了(微信公众号怎么赚钱)

  • vivo手机正在优化开不了机怎么办(Vivo手机正在优化是什么意思)

    vivo手机正在优化开不了机怎么办(Vivo手机正在优化是什么意思)

  • 小红书怎么增加浏览量(小红书怎么增加流量)

    小红书怎么增加浏览量(小红书怎么增加流量)

  • 双11订单一般多久发货(双11一般多久到货)

    双11订单一般多久发货(双11一般多久到货)

  • 抖音认证什么意思(抖音认证是怎么回事)

    抖音认证什么意思(抖音认证是怎么回事)

  • 美版和港版的区别(美版和港版的区别在哪里)

    美版和港版的区别(美版和港版的区别在哪里)

  • 华为mate30怎么导入sim卡通讯录(华为mate30怎么导入手机号码)

    华为mate30怎么导入sim卡通讯录(华为mate30怎么导入手机号码)

  • 苹果手机拉黑电话号码对方提示什么(苹果手机拉黑电话号码还能收到电话)

    苹果手机拉黑电话号码对方提示什么(苹果手机拉黑电话号码还能收到电话)

  • 电脑下载万能钥匙可以连接wifi吗(电脑下载万能钥匙怎么下载)

    电脑下载万能钥匙可以连接wifi吗(电脑下载万能钥匙怎么下载)

  • 文档怎么加入空白页(文档中怎么加入空白行word2019)

    文档怎么加入空白页(文档中怎么加入空白行word2019)

  • 如何彻底删除电脑软件(如何彻底删除电脑微信聊天记录不被恢复)

    如何彻底删除电脑软件(如何彻底删除电脑微信聊天记录不被恢复)

  • windows7附件包括(windows7附件有哪些)

    windows7附件包括(windows7附件有哪些)

  • 手机刷机怎么恢复照片(手机刷机怎么恢复聊天记录)

    手机刷机怎么恢复照片(手机刷机怎么恢复聊天记录)

  • 手机txt文件怎么创建

    手机txt文件怎么创建

  • word如何在图片上添加文字(word如何在图片中嵌入图片)

    word如何在图片上添加文字(word如何在图片中嵌入图片)

  • bn47是小米什么型号(bn47是小米什么型号电池)

    bn47是小米什么型号(bn47是小米什么型号电池)

  • 114账号如何注册(114账号怎么注销)

    114账号如何注册(114账号怎么注销)

  • 美团怎么申请返现(美团怎么申请返现酒店)

    美团怎么申请返现(美团怎么申请返现酒店)

  • 360安全浏览器如何设置极速模式(360安全浏览器如何彻底卸载)

    360安全浏览器如何设置极速模式(360安全浏览器如何彻底卸载)

  • 快手怎么ktv直播(快手ktv直播间怎么放原唱)

    快手怎么ktv直播(快手ktv直播间怎么放原唱)

  • python中如何使用np.delete()方法?(python有什么用)

    python中如何使用np.delete()方法?(python有什么用)

  • 借款利息如何计算政策依据
  • 发票收款人和复核没写可以用吗
  • 消防工程改造怎么做账务处理
  • 成本费用的关系
  • 清包工可以有一部分小料吗
  • 小规模税控设备维护费怎么填申报表格
  • 手续费和利息属于哪一科目
  • 报销是否需要发票
  • 小规模纳税人增值税优惠政策2023
  • 收到的印花税退税怎么会计处理
  • 企业所得税汇算清缴时间
  • 外资企业研发中心
  • 外购存货的成本不包括
  • 润滑油交消费税税率
  • 应付账款周转率分析
  • 公司拍摄产品的文案
  • 材料采购发生的合理损耗计入
  • 公司购入的房子如何抵押
  • 购入厂房时缴的土地增值税如何入账?
  • 过了认证期的发票怎么办
  • 增值税普通电子发票
  • 团队建设费用怎么入账
  • 包装物怎么入账
  • 开发票回款是什么意思
  • 发票总金额怎么算折扣
  • 个体工商户开票免税额度是多少
  • 私车公用报销怎么算
  • win10系统如何卸载ie11
  • 如何创建一个空的dataframe
  • 没有系统U盘,电脑密码忘记了如何打开电脑
  • 个税系统添加人员出现证件号码不符合一般规则
  • 如何在电脑管家里把健康小程序提取出
  • 公司之间债务转让合法吗
  • PHP:pcntl_wait()的用法_PCNTL函数
  • 什么是两免一补的条件
  • 应收账款账务处理及案例分析
  • 2023年重庆邮电大学研究生分数线
  • webpack与gulp面试题
  • 周末闲暇时光是什么意思
  • tcpreplay命令详解
  • vgreduce --removemissing
  • 关于差额征税的账务处理
  • 怎么在网上申请信用卡
  • 暂估成本多了
  • 残保金会计分录人员经费
  • 政府补助怎么判断总额法还是净额法
  • 项目提前竣工借款合法吗
  • 行政单位现金管理
  • 长期股权投资应计提减值准备的金额
  • 收到银行存款利息
  • 公司发工资是私人转账的要交税吗
  • 办公楼的装修费用如何进行财税处理
  • 重分类调整分录是什么
  • 企业控股情况怎么看
  • 单位结算卡和回单卡
  • 什么是商业企业和工业企业
  • sql查询界面怎么做
  • sql null用法
  • sql复合语句
  • 在数据库中对数据表进行生成的是
  • mysql搜索字段内容
  • win8系统安装步骤
  • hyper-v怎么样
  • centos virbr0
  • centos安装ufw
  • freebsd操作命令
  • 教大家一些实用的技巧方法
  • win7关机总是自动重启
  • win8语言设置
  • win8.1 操作中心
  • win10开始菜单怎么打开
  • 安卓图库权限
  • html5的全局属性
  • perl localtime函数
  • python数据结构教程
  • 深入浅出jquery
  • 国税系统公务员政审父母超生合格吗
  • 深圳国税电子税务局官网
  • 进项税计提和上交会计分录
  • 税务局怎么知道房屋出租
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设