解决iview中表格导出Excel时单元格内不换行的问题

简介: 分享一篇解决iview中表格导出Excel时单元格自动换行问题的文章

分享一篇解决iview中表格导出Excel时单元格自动换行问题的文章

1.遇到问题的过程

最近的项目中有将表格内容导出到Excel表格的需求,正好我们使用的是iview框架。在iview中的table组件自带表格导出到Excel功能,于是开心的直接使用:

html:
<Table :columns="columns" :data="data" size="small" ref="myTable"></Table>
<Button type="primary" size="large" @click="exportData"> Export data</Button>
script:
exportData(){.
 this.$refs.myTable.exportCsv({
 filename: 'myTable'//导出Excel的文件名
 })
}

在我们在table中没有换行的数据时导出的表格很正常。当我们的某个单元格中数据过多需要换行时导出的表格出现了不是单元格内换行而是直接换到Excel表格的下一行。请看下图: 页面的Table数据

导出的Excel(不是单元格内换行....)

2.解决问题的过程

1).找到问题原因 通过各种测试,找到问题的原因是由于server返回值中有换行字符"\n"。既然如此那将字符传"\n"替换为空:

//将表格数据过滤
exportData(){.
 this.$refs.myTable.exportCsv({
 filename: 'myTable',
 data: this.$formatExcelData(this.data)
 })
}
//公共方法
Vue.prototype.$formatExcelData = function (data) {
        var arr = []
        var self = this
        var dateArr = ['createDate', 'fixedDate', 'reportDate']
        _.forEach(data, function (v) {
            for (var k in v) {
              if (typeof v[k] == 'string') {
                    v[k] = v[k].replace(/\n/g, '')
                }
            }
            arr.push(v)
        })
        return arr
    }

改完后,重新测试。果不其然,表格中没有换行。但是,单元格内的换行也没有了。 结论:"\n"使Excel表格产生了换行,去除可以解决换行。但是我们需要一个方法能将"\n"作用于单元格内。 2).寻找解决方法 操作系统问题 之前遇到过换行问题是由于操作系统不同导致的。尝试下将"\n"换成"\r\n"(window中换行)

v[k] = v[k].replace(/\n/g, '\r\n')//失败

模仿键盘操作 再想想,Excel中是alt+enter键换行单元格,但是如何表示。在Google上搜索相关,发现键盘的每个键对应着个ASCLL码,如果将"\n"替换成对应的ASCLL呢? 查询了键盘的ASCALL码Alt对应\0\x0A

v[k] = v[k].replace(/\n/g, '0x12 0x0A')//换到下一列了,感觉距离解决问题更近了(原因没有深究,有兴趣的可以去研究下)

3.问题解决

搞了一天问题仍没有解决,由于时间问题想想还是去请教下我们组C++大佬吧(Excel核心就是C++)然后就解决了... 需要在我们传入的数据中加上",如下:

v[k] = '"'+ v[k].replace(/"/g, '""')+'"'//成功

后面自己有空有思考了下这种问题如果借助一些工具应该能够更好的理解,那应该更有助于我来解决这个问题。此时想到了Notepad++这个神级编辑器。打开Notepad++,如下操作: 视图 =》 显示符号 =》 显示所有 将单元格内换行的单元内容复制到notepad++ 和 我们自己生成的Excel中换行的相比较请看下图:

![单元格内换行的]

![直接换行的]差别一目了然,相差了一对字符传(内心中一万头草泥马奔腾而过,困扰我两天的问题,还是别人帮忙解决的,看来自己还需加倍努力....)。 总结:写这篇文章主要的目的不是为了记忆"ivew导出表格的单元格换行需要加字符串的知识点",这钟问题相信只要看过一次都能记住这个解决方法。这篇文章主要是为了记录解决问题的方式,以及如何借助一些工具去理解问题。


相关文章
|
1月前
|
easyexcel
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
|
22小时前
|
Java
java导出复杂excel
java导出复杂excel
|
22小时前
|
easyexcel BI
excel合并列导出文件
excel合并列导出文件
|
1天前
|
前端开发
基于jeecgboot的flowable流程任务excel导出功能
基于jeecgboot的flowable流程任务excel导出功能
|
9天前
|
JSON JavaScript 前端开发
使用JavaScript和XLSX.js将数据导出为Excel文件
使用JavaScript和XLSX.js将数据导出为Excel文件
20 0
|
15天前
|
JavaScript 前端开发 BI
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
19 1
|
21天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
118 0
|
22天前
|
数据库
开发指南009-从list导出excel文件
从数据库返回一般是对象的列表,平台底层提供了从list转为excel文件的方法
|
22天前
|
前端开发
开发指南007-导出Excel
平台上开发导出Excel比过去的单体架构要复杂些,因为前端和后台不在一个进程空间里。