导出excel表格,前端和后台导出

时间:2023-03-09 02:02:05
导出excel表格,前端和后台导出

问题:项目框架中导出不知道有什么限制,数据稍微大点导出不了,向上面请求解决,结果一圈推下来又推回来了,所以决定自己写,参考了网上很多大神的博客,开始试了前端导出,想着比较简单,但是乱码问题始终解决不了,方法也贴上来,如果有大佬会的可以指点下。

前段导出:

  首先绑定导出按钮的click事件,我查询是一次性查询过来的,然后数据存在全局中,调用导出方法传入数据

导出excel表格,前端和后台导出

  然后写导出方法:

  1. tableToExcel: function (dataSource) {
  2. console.log(dataSource);
  3. //列标题,逗号隔开,每一个逗号就是隔开一个单元格
  4. var data = "日期,城市名称,设备,网元,告警标题,发生时间,恢复时间,恢复历时\n";
  5. //增加\t为了不让表格显示科学计数法或者其他格式
  6. for(var i = 0 ; i < dataSource.length ; i++ ){
  7. for(var item in dataSource[i]){
  8. data+=method.GB2321TOUFT8(dataSource[i][item])+'\t';
  9. }
  10. data+='\n';
  11. };
  12. //data = method.GB2321TOUFT8(data);
  13. console.log(data);
  14. var blob = new Blob([data], { type: 'text/csv' }); //new way
  15. var csvUrl = URL.createObjectURL(blob);
  16. document.getElementById("mylink").href = csvUrl;
  17. },

导出可以导出,但是用window7自带的excel打开就是乱码,用记事本查看编码是utf_8编码,转换成ANSI编码就不乱码了,查了了ANSI编码就是GB2321编码,找了很多转换方法没有转换过来,让客户自己转换编码不实际,所以放弃,用后台导出。

导出excel表格,前端和后台导出

 后台导出:

  后台导出也是要前段的a标签配合,写一个导出按钮,包含a标签

导出excel表格,前端和后台导出

  查询按钮改为设置a标签href属性为后台地址

导出excel表格,前端和后台导出

  后台路径要保持一致,为了代码复用方便,我封装了这个导出方法,传入的时候传这么几个参数(一个包含每行数据的集合,列头名集合,导出表格名字,还有request和response对象)

导出excel表格,前端和后台导出

  封装的方法,其实也不算完全封装,有些缺陷,注意我写的是数据查询出来都要转换成string类型的,我是写死的

导出excel表格,前端和后台导出

  至此结束,浏览器会询问你是否下载文件,还有导出用的是poi的SXSSFWorkbook,这是为大数据导出使用的,适合大数据量导出,还有HSSFWorkbook,但是取数据大的话容易内存泄漏,里面设置也比较多,可以研究一下,还有一种csv导出,好像性能什么更加好,这个没有研究,有研究了再写博客。