ExtJs表格导出Excl,采用data:application/vnd.ms-excel;base64,方式导出数据量大时导出时网络错误。导出失败!

T-tans 发布于 2016/10/13 10:36
阅读 1K+
收藏 0

function getMultiGrid2Excel(xml,title,worksheet){
return '<xml version="1.0" encoding="utf-8">' +
     '<ss:Workbook xmlns:ss="urn:schemas-microsoft-com🏢spreadsheet" xmlns:x="urn:schemas-microsoft-com🏢excel" xmlns:o="urn:schemas-microsoft-com🏢office">' +
     '<o:DocumentProperties><o:Title>' + title + '</o:Title></o:DocumentProperties>' +
     '<ss:ExcelWorkbook>' +
//     '<ss:WindowHeight>' + worksheet.height + '</ss:WindowHeight>' +
//     '<ss:WindowWidth>' + worksheet.width + '</ss:WindowWidth>' +
     '<ss:ProtectStructure>False</ss:ProtectStructure>' +
     '<ss:ProtectWindows>False</ss:ProtectWindows>' +
     '</ss:ExcelWorkbook>' +
     '<ss:Styles>' +
     '<ss:Style ss:ID="Default">' +
     '<ss:Alignment ss:Vertical="Top" ss:WrapText="1" />' +
     '<ss:Font ss:FontName="arial" ss:Size="10" />' +
     '<ss:Borders>' +
     '<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Top" />' +
     '<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Bottom" />' +
     '<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Left" />' +
     '<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Right" />' +
     '</ss:Borders>' +
     '<ss:Interior />' +
     '<ss:NumberFormat />' +
     '<ss:Protection />' +
     '</ss:Style>' +
     '<ss:Style ss:ID="title">' +
     '<ss:Borders />' +
     '<ss:Font ss:Size="16" />' +
     '<ss:Interior ss:Pattern="Solid" ss:Color="#CCCCFF" />' +
     '<ss:Alignment ss:WrapText="1" ss:Vertical="Center" ss:Horizontal="Center" />' +
     '<ss:NumberFormat ss:Format="@" />' +
     '</ss:Style>' +
     '<ss:Style ss:ID="headercell">' +
     '<ss:Font ss:Bold="1" ss:Size="10" />' +
     '<ss:Alignment ss:WrapText="1" ss:Horizontal="Center" />' +
     '<ss:Interior ss:Pattern="Solid" ss:Color="#A3C9F1" />' +
     '</ss:Style>' +
     '<ss:Style ss:ID="even">' +
     '<ss:Interior ss:Pattern="Solid" ss:Color="#CCFFFF" />' +
     '</ss:Style>' +
     '<ss:Style ss:Parent="even" ss:ID="evendate">' +
     '<ss:NumberFormat ss:Format="yyyy-mm-dd" />' +
     '</ss:Style>' +
     '<ss:Style ss:Parent="even" ss:ID="evenint">' +
     '<ss:NumberFormat ss:Format="0" />' +
     '</ss:Style>' +
     '<ss:Style ss:Parent="even" ss:ID="evenfloat">' +
     '<ss:NumberFormat ss:Format="0.00" />' +
     '</ss:Style>' +
     '<ss:Style ss:Parent="even" ss:ID="evenNumber">' +
     '<ss:NumberFormat ss:Format="#,##0.00_ " />' +
     '</ss:Style>' +
     '<ss:Style ss:ID="odd">' +
     '<ss:Interior ss:Pattern="Solid" ss:Color="#CCCCFF" />' +
     '</ss:Style>' +
     '<ss:Style ss:Parent="odd" ss:ID="odddate">' +
     '<ss:NumberFormat ss:Format="yyyy-mm-dd" />' +
     '</ss:Style>' +
     '<ss:Style ss:Parent="odd" ss:ID="oddint">' +
     '<ss:NumberFormat ss:Format="0" />' +
     '</ss:Style>' +
     '<ss:Style ss:Parent="odd" ss:ID="oddfloat">' +
     '<ss:NumberFormat ss:Format="0.00" />' +
     '</ss:Style>' +
     '<ss:Style ss:Parent="odd" ss:ID="oddNumber">' +
     '<ss:NumberFormat ss:Format="#,##0.00_ " />' +
     '</ss:Style>' +
     '</ss:Styles>' +
      xml +
     '</ss:Workbook>';
}

导出的主要方法如下:

var exportA = document.createElement('a');

exportA.setAttribute('download',title+'.xls');

exportA.setAttribute('href','data:application/vnd.ms-excel;base64,'+Base64.encode(getMultiGrid2Excel(xml,title,worksheet)));

exportA.click();

我发现超过了800行就导出失败了。

我用的是谷歌浏览器,IE 浏览器不支持这种方式导出。

而我们项目规定用谷歌浏览器,发现数据量太大导不出是因为

setAttribute value值太长。求大神指教

加载中
0
a
asdf_123

今天也遇到了这个问题,但是下载成功了,只不过没有后缀名,不知道如何解决

返回顶部
顶部