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

  • 支付宝代办的健康码如何删除(支付宝代办的健康码怎么注销)

    支付宝代办的健康码如何删除(支付宝代办的健康码怎么注销)

  • 抖音投稿未审核通过 限制分享怎么办(抖音投稿未审核怎么办)

    抖音投稿未审核通过 限制分享怎么办(抖音投稿未审核怎么办)

  • airpods右耳感叹号(airpods右耳朵感叹号)

    airpods右耳感叹号(airpods右耳朵感叹号)

  • 红米手机来电不显示怎么办(红米手机来电不显示名字怎么回事)

    红米手机来电不显示怎么办(红米手机来电不显示名字怎么回事)

  • 苹果笔记本保修几年(苹果笔记本保修期多久)

    苹果笔记本保修几年(苹果笔记本保修期多久)

  • 苹果笔记本后面的logo怎么亮(苹果笔记本后面哪个是序列号)

    苹果笔记本后面的logo怎么亮(苹果笔记本后面哪个是序列号)

  • 苹果xr开机怎么这么慢(苹果xr开机怎么开)

    苹果xr开机怎么这么慢(苹果xr开机怎么开)

  • 5g现在可以用吗(5g现在可以正常使用了吗)

    5g现在可以用吗(5g现在可以正常使用了吗)

  • 一直显示正在擦除数据(一直正在等待抹掉)

    一直显示正在擦除数据(一直正在等待抹掉)

  • 手机显示timeout什么意思(手机显示无sim卡)

    手机显示timeout什么意思(手机显示无sim卡)

  • 2.0ghz八核是什么处理器(2.0ghz八核是什么处理器相当于骁龙多少)

    2.0ghz八核是什么处理器(2.0ghz八核是什么处理器相当于骁龙多少)

  • ssid广播关闭 手动添加找不到网络(关闭ssid广播影响网速)

    ssid广播关闭 手动添加找不到网络(关闭ssid广播影响网速)

  • oled保持一个画面多久烧屏(oled保持一个画面多久烧屏2021)

    oled保持一个画面多久烧屏(oled保持一个画面多久烧屏2021)

  • bios时间不对会怎样(bios时间不对会影响开机)

    bios时间不对会怎样(bios时间不对会影响开机)

  • mp4和mkv的区别(mp4跟mkv哪个好)

    mp4和mkv的区别(mp4跟mkv哪个好)

  • 华为手机的快充协议(华为手机的快充是多少瓦)

    华为手机的快充协议(华为手机的快充是多少瓦)

  • soul注销账号还能重新申请吗(soul注销账号还能注册吗)

    soul注销账号还能重新申请吗(soul注销账号还能注册吗)

  • 淘宝怎么评价已购买的宝贝(淘宝怎么评价已经评价过的)

    淘宝怎么评价已购买的宝贝(淘宝怎么评价已经评价过的)

  • ctrl加什么是锁屏(ctrl锁住了怎么办)

    ctrl加什么是锁屏(ctrl锁住了怎么办)

  • 9524开头的是啥号(9524开头的是什么电话)

    9524开头的是啥号(9524开头的是什么电话)

  • 华为p30支持无线充电(华为p30支持无线充电功能吗)

    华为p30支持无线充电(华为p30支持无线充电功能吗)

  • 电脑线怎么连接(电脑线怎么连接网络)

    电脑线怎么连接(电脑线怎么连接网络)

  • 电脑桌面刷新反应很慢怎么办?解决方法(电脑桌面刷新反应迟钝)

    电脑桌面刷新反应很慢怎么办?解决方法(电脑桌面刷新反应迟钝)

  • 公司购买车辆的好处
  • 以前年度遗留的个税怎么处理
  • 税率中的速算扣除数是什么
  • 拍卖行业收取手续费标准
  • 营业执照丢失公示几天才能注销
  • 公司货款退款怎么写
  • 超定额废品损失会计分录
  • 医院纯收入
  • 自行建造固定资产中的自营工程,在领用工程物资
  • 用党委经费买的固定资产如何计提?
  • 招待费税前扣除是什么意思
  • 企业收到预收账款,能不能给购买方开具发票
  • 购进货物取得
  • 购货发票未到
  • 哪些津贴免征个税
  • 股东以资产入股公司
  • 公司贷款评估费的做账
  • 公司理财取得的成果
  • 增资后工商怎么变更
  • 出口押汇申请书
  • 融资租赁租金计算公式
  • 哪些收入要纳税
  • 税额差异会计分录
  • 企业发行股票的溢价收入应计入
  • vant移动端开发
  • 进项票留底怎么做分录
  • Vue3 + Pinia 持久化存储
  • 2020注册谷歌账号方法
  • openpose的输出
  • vue3当中如何监听新增的属性
  • 移动端页设计
  • 投资性房地产的减值准备可以转回吗
  • 个体工商户开普通发票需要交税吗
  • 企业收到发票后怎么入账
  • 员工宿舍的物业费能否抵扣
  • 织梦数据库连接失败的原因
  • 工会经费的计提基数不包括
  • 个体户需要
  • 企业发生的现金溢余如果无法查明原因
  • 两个日期是否一致
  • 折旧啥意思
  • 发票类别包含哪几种
  • 息税前利润怎么理解
  • 支付水电费会计
  • 核定征收的企业需要汇算清缴吗
  • 冲减当期利润
  • 车船税交不交印花税
  • 待抵扣增值税退税
  • 收到货款未开发票是否违法
  • 租房期间损坏应赔偿多少
  • 技术咨询费属于什么类别
  • 税控盘费用抵扣怎么申报什么表怎么说什么表怎么填报
  • 受同一方重大影响的企业之间为什么不构成关联方
  • windows7休眠唤醒设置
  • solaris 11.4
  • ubuntu有线正在连接
  • linux常用的几种压缩工具
  • xp3软件
  • 如何手动设置定位
  • win7打开文件夹都是独立的窗口
  • linux打包压缩文件的命令
  • win7系统怎么设置屏保
  • win8.1安装应用商店
  • 欢迎使用本公司智能语音电动车
  • unity www读取本地视频文件和外部视频文件 播放视频动画和视频声音
  • jquery和css的区别
  • css checked
  • 安卓广播的作用
  • 服务器安全设备
  • android课程心得体会
  • python parser解析
  • python如何编写
  • javascript获取css
  • python作用域和优先级
  • javascript编程工具
  • js工具类库
  • 广东省国家税务总局班子成员
  • 贸易公司税收政策
  • 蚊香税率是多少
  • 济宁市税务局官网名称
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设