解决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导出表格的单元格换行需要加字符串的知识点",这钟问题相信只要看过一次都能记住这个解决方法。这篇文章主要是为了记录解决问题的方式,以及如何借助一些工具去理解问题。


相关文章
|
14天前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
68 5
|
9天前
|
SQL 数据可视化 数据挖掘
想让Excel表格设计更美观?试试这几款好用工具!
Excel表格设计在项目管理和数据分析中至关重要。本文推荐四款辅助工具:板栗看板、Excel自动图表助手、Think-Cell Chart 和 Power BI,分别在任务管理、图表生成、数据可视化等方面表现突出,帮助你设计出更专业、美观的表格。
24 2
|
14天前
|
Java API Apache
|
17天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
25 4
|
21天前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
|
1月前
|
前端开发 JavaScript API
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
126 0
|
1月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
|
3月前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
44 0
|
1月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
46 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。

热门文章

最新文章