tableExport.js导出处理自动科学计数法问题
  lwTCwD6U8gjV 2023年11月02日 18 0

背景

  • 老项目未前后端分离,使用的技术栈相对比较老旧,属于一个后台内容管理系统;主要利用bootstrap-table.js渲染表格,表格内容导入分为前端导出和后端导出,这里是讲使用前端bootstrap相关组件进行EXCEL导出时,当列中的数据为纯数字且超过一定长度时,会自动变成科学计数法,影响客户使用。
  • 涉及到两个js文件

src/main/webapp/js/lib/bootstrap/bootstrap-table/bootstrap-table.js src/main/webapp/js/lib/jquery/tableExport.js

  • 具体的版本已经无从得知,并且源码被改过。大概是2019年左右的版本。

出现的问题

微信图片_20231019232840.png 如上图

解决办法

1. HTML文件增加data-class

<th data-halign="center" data-align="center" data-field="specification6" data-sortable="true" data-class="exportAsText">规格字段6</th>

PS:主要是增加一个类名:exportAsText 2. 浏览器渲染后的表格列 微信截图_20231019233426.png 3. 修改bootstrap-table.js 微信截图_20231019233818.png PS:这一步主要是解决原来存在的bug,多了class=的内容。如果不存在bug的话,不需要修改该文件。 4. 修改tableExport.js 微信截图_20231019234251.png

var tempClassName = $(cell).attr('class');
if(tempClassName != undefined && tempClassName.indexOf('exportAsText') > -1){
	tdcss = '\\@';
}

增加上面的代码,就是通过判断cell里是否包含特定的类名(exportAsText)来设置文本值

if (typeof tdcss != 'undefined' && tdcss != '') {
	if (tdstyle == '')
		tdstyle = 'style="';
	tdstyle = 'style="mso-number-format:\'' + tdcss + '\'';
}

最终的目的是为了增加样式:mso-number-format,其值只要为@就代表是文本值。

5. 调整后导出效果 微信截图_20231019234838.png 6.

注意事项

导出按钮有两个,如下图: 微信截图_20231019235057.png

  • 如果用右边的框架自带的导出功能,则文件名、worksheet等都是默认的;如果想覆盖框架的一些默认值,则需使用左边的导出按钮。
  • 左边导出按钮的相关代码如下:
<button class="btn btn-default btn-sm exportOutBtnClass_override">
	<i class="pdr-5 icon-download-alt"></i>导出
</button>

此处注意class名:exportOutBtnClass_override 由于src/main/webapp/js/lib/bootstrap/bootstrap-table/extensions/bootstrap-table-export.js导出组件有默认的class名:exportOutBtnClass,如果用这个类名,则不需要写多余的js代码,点击这个按钮即可实现导出;为了不让bootstrap-table-export.js识别改按钮,增加了'_override'。 js代码如下:

$('#toolbarInWhsNotificationNewExtReport').find('.exportOutBtnClass_override').click(function () {
            if (table.bootstrapTable('getData').length > 0) {
                table.bootstrapTable('hideColumn', 'state');
                table.tableExport($.extend({}, table.bootstrapTable('getOptions').exportOptions, {
                    fileName: '验收单报表',
                    type: 'excel',
                    escape: false,
                    worksheetName: 'sheet1'
                }));
                table.bootstrapTable('showColumn', 'state');
            }
});
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
lwTCwD6U8gjV