Vue实现在前端导出Excel

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/83789067

安装依赖

进入项目文件夹,打开cmd或者在Webstorm中的Terminal中输入:

npm install -S file-saver xlsx

npm install -D script-loader

添加js文件

下载所需的两个文件:Blob.js、Export2Excel.js

https://download.csdn.net/download/badao_liumang_qizhi/10767801

新建vendor,名称不一定非是vendor,建议但不非得将此目录放在与单页面同级的目录。将上面两个js文件放在vendor目录中。

比如:

这里要使用的单页面是merchantBIllFlow.vue,所以在此同级目录下新建vendor目录,将上面两个js文件放在此目录下。


修改配置文件

在项目目录下的build下的 webpack.base/conf.js这个webpack的配置文件中的

resolve的alias中加入:

'vendor':path.resolve(__dirname,'../src/views/account/vendor'),

具体路径根据实际而写,这里是按照我的方式写的路径。

如下:

实现代码

点击导出按钮

<el-button type="primary" class="mt_0 ml_1em  bg_gray_777" @click="exportClick()">导出账单</el-button>

实现查询方法

在methods中

//报表导出前的查询

      exportClick(){

        this.loading = true;//缓冲条加载

        //此代码实现向后台异步请求数据

        exportMerchantBill(this.billForm).then(response => {

          this.loading = false;

          const data = response.data;//声明常量data用来接收后台返回的数据data

          this.exportList = data;//将接受到的data数据赋给exportList这个列表,用于当作导出Excel的数据源

          //开始执行导出方法,此方法要放在括号里面,因为是异步请求数据,请求完才能执行导出

          this.export2Excel()

        }).catch(error => {

          debugger;

          this.loading = false

          console.log(error)

        })

        },

执行以上代码要在data中添加exportList[]:

data(){

return{

//要导出的报表的list

        exportList:[],

}

}

说明:

以上代码用来请求后台来获取一个要显示内容的list,但是为了快速实现效果,可以自己声明一个list,如下

导出Excel代码

继上面执行查询数据后,开始执行导出Excel的方法: this.export2Excel()

在methods中新建方法:

继上面请求后台数据的版本

 methods: {

      export2Excel() {

        require.ensure([], () => {

          const { export_json_to_excel } = require('vendor/Export2Excel');

          const tHeader =

            ['账单名称', '订单编号', '交易编号','交易类型',

              '交易方式','交易金额','交易前金额', '交易后金额'

            ];

          const filterVal =

            ['transactionName', 'orderNum','transactionNum','transactionTypeName',

             'payType','payPrice', 'transactionFrontPrice', 'transactionAftertPrice',

            ];

          const list = this.exportList;

          const data = this.formatJson(filterVal, list);

          export_json_to_excel(tHeader, data, '**报表'+moment(new Date()).format('YYYYMMDDHHmmss'));

        })

      },

      formatJson(filterVal, jsonData) {

        return jsonData.map(v => filterVal.map(j => v[j]))

      },

简单的版本


methods: {

      export2Excel() {

        require.ensure([], () => {

          const { export_json_to_excel } = require('vendor/Export2Excel');

          const tHeader =

            [

            '编号', '标题', '作者','回顾', '时间'    

            ];

          const filterVal =

            ['id', 'title','author','pageviews','display_time'];  

           const list =

           [

             {id: 1, title: 2, author: 3, pageviews: 4, display_time: 5},

             {id: 6, title: 7, author: 8, pageviews: 9, display_time: 10},

             {id: 11, title: 12, author: 13, pageviews: 14, display_time: 15},

            ];

          const data = this.formatJson(filterVal, list);       

          export_json_to_excel(tHeader, data, '**账单报表'+moment(new Date()).format('YYYYMMDDHHmmss'));

        })

      },

      formatJson(filterVal, jsonData) {

        return jsonData.map(v => filterVal.map(j => v[j]))

      },

说明:

1.const tHeader:这是excel表中要显示的标题头,即最上面那一行,这是根据具体业务需求设置的。

2.const filterVal :这是excel下面对应标题头要显示的具体内容,要与list中的相对应,比如简单版本中与id、title等对应。

   如果是请求后台返回一个实体类的list,那么这个要与实体类的属性相对应。

3. export_json_to_excel(tHeader, data, '**账单报表'+moment(new Date()).format('YYYYMMDDHHmmss'))如果要修改导出报表的名字,就将

    **账单报表修改成自己需要的,后面的是要实现时间戳,通过moment来将当前时间进行格式化为时间字符串,防止导出时重名。

4.关于导出的Excel具体显示的内容,就是要给它传递一个list,不管是自己手动编写list,还是请求后台返回的list。只需要修改

‘const list = ’这个后面的内容给list 赋值即可。通过修改还可以将Element ui中的表格中data属性所对应list进行导出,从而实现将表格导出为Excel的操作。

   但是这样只能导出一页的数据,所以要重新编写请求后台的接口。来返回一个list用于前端导出Excel。

效果


原文链接:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/83789067

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 网上总结方法比较零散,现总结下使用方法和遇到的问题:1,安装依赖cd到Vue项目目录,执行以下命令 npm ins...
    WhereRiseFrom阅读 1,553评论 1 1
  • https://www.jqhtml.com/40007.html 1.1 业务场景 由前台导入Excel表格,获...
    糖醋里脊120625阅读 1,443评论 0 0
  • 摘抄过来的,备忘!!!项目中将后台返回的数据v-for到表格中,然后需要将这个表格导出为EXCEL 只说怎么做。 ...
    前端渣渣阅读 1,741评论 0 6
  • 最近Vue项目中用到了导出功能,在网上搜索了一番之后,决定采用Blob方式,这也是大家推荐的一种的方式,特此做下记...
    clara2459阅读 7,026评论 2 4
  • 你是时光巷里一抹剪影 携着松香的衣领 盈盈颔首 目色被夕阳染上了一层温柔 千万般言语难以描绘 你眸中的风景 你是翠...
    叶知_秋阅读 363评论 2 9