位置: 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实现轮播图侧边阴影效果)

  • 鸿蒙怎么去掉负一页(鸿蒙怎么去掉负一屏网页)

    鸿蒙怎么去掉负一页(鸿蒙怎么去掉负一屏网页)

  • 苹果12nfc怎么充值公交卡(苹果12nfc怎么充值实体公交卡)

    苹果12nfc怎么充值公交卡(苹果12nfc怎么充值实体公交卡)

  • vivo x27有防水功能吗(vivox21防水么)

    vivo x27有防水功能吗(vivox21防水么)

  • 拼多多商品搬家对淘宝有影响吗(拼多多商品搬家怎么用)

    拼多多商品搬家对淘宝有影响吗(拼多多商品搬家怎么用)

  • 电脑12g内存稳定吗(12g的电脑内存能干嘛)

    电脑12g内存稳定吗(12g的电脑内存能干嘛)

  • 小米9听筒进灰怎么处理(小米听筒进灰尘怎么办)

    小米9听筒进灰怎么处理(小米听筒进灰尘怎么办)

  • 微信步数更新规则(微信运动步数更新时间是多久)

    微信步数更新规则(微信运动步数更新时间是多久)

  • 陌陌软件主要干嘛用的(陌陌软件干嘛的)

    陌陌软件主要干嘛用的(陌陌软件干嘛的)

  • 电脑软件一般存哪个盘(电脑软件一般存多少G)

    电脑软件一般存哪个盘(电脑软件一般存多少G)

  • 苹果xr面部解锁不能用了怎么回事(iphone xr怎么面部识别后直接解锁)

    苹果xr面部解锁不能用了怎么回事(iphone xr怎么面部识别后直接解锁)

  • 什么是存储在外存储器中的一组相关信息的集合(存储在外存上的文件叫做)

    什么是存储在外存储器中的一组相关信息的集合(存储在外存上的文件叫做)

  • linux系统格式化分区用哪个命令(linux怎样格式化)

    linux系统格式化分区用哪个命令(linux怎样格式化)

  • 魅族16s有几个扬声器(魅族16th几个扬声器)

    魅族16s有几个扬声器(魅族16th几个扬声器)

  • 荣耀20如何设置后台运行(荣耀20如何设置桌面时间)

    荣耀20如何设置后台运行(荣耀20如何设置桌面时间)

  • 能刷快手直播间人数吗(刷快手直播间礼物软件)

    能刷快手直播间人数吗(刷快手直播间礼物软件)

  • 收到骚扰短信如何处理(收到骚扰短信如何投诉举报)

    收到骚扰短信如何处理(收到骚扰短信如何投诉举报)

  • 支付宝怎样关联微信运动(支付宝怎样关联店员)

    支付宝怎样关联微信运动(支付宝怎样关联店员)

  • 苹果x手机屏幕出现一条绿线(苹果x手机屏幕失灵解决方法)

    苹果x手机屏幕出现一条绿线(苹果x手机屏幕失灵解决方法)

  • id在哪里看(企业微信id在哪里看)

    id在哪里看(企业微信id在哪里看)

  • x27手机的面部解锁在哪设置(x27手机的面部解锁怎么用)

    x27手机的面部解锁在哪设置(x27手机的面部解锁怎么用)

  • oppo手机圆圈怎么关闭(oppo手机小圆圈)

    oppo手机圆圈怎么关闭(oppo手机小圆圈)

  • 腾讯手游助手如何取消开机自动启动?(腾讯手游助手如何隐藏键位)

    腾讯手游助手如何取消开机自动启动?(腾讯手游助手如何隐藏键位)

  • 最小的CMOS传感器(最小的成像传感器)

    最小的CMOS传感器(最小的成像传感器)

  • 前端解决跨域问题(9个方法)(前端解决跨域问题的代理)

    前端解决跨域问题(9个方法)(前端解决跨域问题的代理)

  • 织梦两种内容模型的文档进行合并(织梦怎么用模板建站)

    织梦两种内容模型的文档进行合并(织梦怎么用模板建站)

  • 企业出售土地的土地增值税计算方法
  • 保险政保业务
  • 收到货款没开票做应收还还应付
  • 宣传牌是否计入固定资产
  • 分公司能享受小微企业所得税优惠吗
  • 银行贷款印花税是什么意思
  • 收到小微企业补助会计分录
  • 个人境外汇款有限制吗知乎
  • 高新技术企业研发人员占比
  • 应收帐款备抵法
  • 订单式生产管理
  • 库存商品公司自己用怎么下账
  • 企业会计做无票收入也要交税吗?
  • 公司注销后虚开发票
  • 销售货物运费的增值税率
  • 所有的固定资产都有残值率吗
  • 股权取得
  • 公司注销后是不是就不再接受诉讼
  • 预收款转营业外收入要交增值税吗
  • 工资扣税标准计算方法
  • 安全提取费用标准
  • 罗马尼亚卫生部长
  • 电脑下载的文件打不开怎么回事
  • 结转本月各项损益
  • 实收资本属于哪类
  • 生产车间发生的间接费用会计科目
  • wordpress访问速度优化
  • 固定资产减值判断标准
  • 基金的管理费用包括什么
  • WIN7系统如何共享打印机
  • yii gridview
  • 车辆购置税退税计算
  • 增值税即征即退操作流程
  • php日期计算器
  • yolov3实例
  • parted命令详解
  • 小规模纳税人免增值税的账务处理
  • 报关单的运费没填怎么办
  • 房产自用改为出租如何申报房产税
  • 征税对象的具体项目
  • 固定资产报废清理怎么做账务处理的
  • 境外捐赠入账
  • 织梦标签教程
  • 二房东可以卖房吗
  • 收到赠送的货物会计分录
  • 是不是所有的发票都是一样的
  • mongodb如何备份
  • 个人接私活需要什么条件
  • 其他收益做账
  • 包装就是包装物
  • 结转本年利润按什么算
  • 收取的招标资料费增值税税率
  • 赠送礼品怎么入账
  • 销售退货的会计账怎么处理
  • 年金终值计算公式是
  • 公司注销资本公积
  • 住房贷款利息专项附加扣除怎么用
  • 企业会计准则季度利润表本期数
  • 金税盘可以申请发票吗
  • 发票抬头是个人税号怎么填
  • 待摊费用和预提费用的区别
  • 微软推出windows1
  • 怎么修复xp系统
  • ubuntu 16:9
  • win7 64位系统提示"Windows7不能识别网络打印机"的故障原因及解决方法
  • linux bash sh
  • win8怎样设置将文件保存到d盘
  • windows7无法安装
  • python中requests库session对象的妙用详解
  • windows批量添加文件后缀
  • jquery渐变效果
  • js可以实现网页中哪些效果
  • Python selenium 父子、兄弟、相邻节点定位方式详解
  • jquery设置iframe的src
  • 安卓app活动
  • jq form提交
  • 土地增值税清算条例与实施细则
  • 率土之滨怎么提高建设值上限
  • 公对私转账怎么开票
  • 工会代扣代缴个税怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设