轻松解决datagrid-export.js的导出excel数字变科学计数法的问题

有个项目需要用到jquery 的easyui和导出excel,发现官方下载的datagrid-export.js有几处bug,例如导出的excel格式,长数字会默认按科学计数法显示或没了零开头的数字,不符合所见即所得要求。

首先说明前提条件,前端网页结果显示是正常无误的,用txt文本打开导出的字段也是正常的零开头的长位数字“012345678910”。

这个问题,如果靠客户端的excel或wps打开再转换单元格格式的话(比如单元格逐个添加单引号“'”或者设置文本再粘贴或分列导入等方法),往往要求操作员复杂操作,教学又麻烦,实在是多此一举。本人尝试了网上几种方法,开始尝试在mssql服务器后端sql语句中,select选择字段时候用过“convert(varchar,字段)as 新字段名”、“转义字符——“\'”、“\t”、“ ”、“’”、“'”等等几种,无效!因此可以判断后台输出类型与导出excel的字段格式无关,放弃后端sql更改操作。

本项目利用的是jquery扩展的datagrid-export.js输出excel,所以,前端输出文件格式的字段类型控制才是解决问题的关键所在。首先,控制字段格式是可以从<table>或<tr>或<td>入手,具体按需求范围设定吧。例如控制<table>的:

<table style='vnd.ms-excel.numberformat:@;'>......内容代码....... </table>

//其中“vnd.ms-excel.numberformat:@;” 是数字转换文本的作用,注意后面的分号不能少。

明确目标后,打开官方下载的datagrid-export.js,原来toexcel调用的tohtml函数代码区域如下:

原来代码:var data = ['<table border="1" rull="all" style="border-collapse:collapse">'];

直接改为:var data = ['<table border="1" rull="all" style="vnd.ms-excel.numberformat:@ ;border-collapse:collapse">'];

修改为:

    function toHtml(target, rows, footer, caption, fields){
        rows = rows || getRows(target);
        rows = rows.concat(footer||getFooterRows(target));
        var dg = $(target);
        //此处style="vnd.ms-excel.numberformat:@ ;'为强制输出文本,避免科学计数法显示长数字。
        var data = ['<table border="1" rull="all" style="vnd.ms-excel.numberformat:@ ;border-collapse:collapse">'];
        var fields = fields || dg.datagrid('getColumnFields',true).concat(dg.datagrid('getColumnFields',false));
        var trStyle = 'height:20px';
        var tdStyle0 = 'vertical-align:middle;padding:0 4px';
        if (caption){
            data.push('<caption>'+caption+'</caption>');
        }
        
        //首行设置
        data.push('<tr style="'+trStyle+'">');
        for(var i=0; i<fields.length; i++){
            var col = dg.datagrid('getColumnOption', fields[i]);
            var tdStyle = tdStyle0 + ';width:'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值