程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> jsp-extjs將gridPanel導出為excel文件,1000條以下可正常導出,超過1000條就不行

jsp-extjs將gridPanel導出為excel文件,1000條以下可正常導出,超過1000條就不行

編輯:編程綜合問答
extjs將gridPanel導出為excel文件,1000條以下可正常導出,超過1000條就不行

導出excel方法:

 exportResult:function(){
                var fileName = this.title;
                var vExportContent = this.getExcelXml();
                //alert(vExportContent);
                if (Ext.isIE6 || Ext.isIE7 || Ext.isIE8 || Ext.isSafari
                        || Ext.isSafari2 || Ext.isSafari3) {
                    var fd = Ext.get('frmDummy');
                    if (!fd) {
                        fd = Ext.DomHelper.append(Ext.getBody(), {
                            tag : 'form',
                            method : 'post',
                            id : 'frmDummy',
                            action : '../exportexcel.jsp',
                            target : '_blank',
                            name : 'frmDummy',
                            cls : 'x-hidden',
                            cn : [{
                                tag : 'input',
                                name : 'fileName',
                                id : 'fileName',
                                type : 'hidden'
                            }, {
                                tag : 'input',
                                name : 'exportContent',
                                id : 'exportContent',
                                type : 'hidden'
                            }]
                        }, true);
                    }
                    fd.child('#fileName').set({
                        value : fileName
                    });
                    fd.child('#exportContent').set({
                        value : vExportContent
                    });
                    fd.dom.submit();
                } else {
                    document.location = 'data:application/vnd.ms-excel;base64,'
                            + Base64.encode(vExportContent);
                }
            },
            getExcelXml : function(includeHidden) {
                var worksheet = this.createWorksheet(includeHidden);
                var totalWidth = this.getColumnModel().getTotalWidth(includeHidden);
                return '<xml version="1.0" encoding="utf-8">'
                        + '<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">'
                        + '<o:DocumentProperties><o:Title>'
                        + this.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: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: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:Styles>' + worksheet.xml + '</ss:Workbook>';
            }
            ,
            createWorksheet : function(includeHidden) {
                // Calculate cell data types and extra class names which affect
                // formatting
                var cellType = [];
                var cellTypeClass = [];
                var cm = this.getColumnModel();
                var totalWidthInPixels = 0;
                var colXml = '';
                var headerXml = '';
                var visibleColumnCountReduction = 0;
                var colCount = cm.getColumnCount();
                for (var i = 0; i < colCount; i++) {
                    if ((cm.getDataIndex(i) != '')
                            && (includeHidden || !cm.isHidden(i))) {
                        var w = cm.getColumnWidth(i)
                        totalWidthInPixels += w;
                        if (cm.getColumnHeader(i) === "") {
                            cellType.push("None");
                            cellTypeClass.push("");
                            ++visibleColumnCountReduction;
                        } else {
                            colXml += '<ss:Column ss:AutoFitWidth="1" ss:Width="' + w
                                    + '" />';
                            headerXml += '<ss:Cell ss:StyleID="headercell">'
                                    + '<ss:Data ss:Type="String">'
                                    + cm.getColumnHeader(i)
                                    + '</ss:Data>'
                                    + '<ss:NamedCell ss:Name="Print_Titles" /></ss:Cell>';
                            var fld = this.store.recordType.prototype.fields.get(cm
                                    .getDataIndex(i));
                            switch (fld.type) {
                                case "int" :
                                    cellType.push("Number");
                                    cellTypeClass.push("int");
                                    break;
                                case "float" :
                                    cellType.push("Number");
                                    cellTypeClass.push("float");
                                    break;
                                case "bool" :
                                case "boolean" :
                                    cellType.push("String");
                                    cellTypeClass.push("");
                                    break;
                                case "date" :
                                    cellType.push("DateTime");
                                    cellTypeClass.push("date");
                                    break;
                                default :
                                    cellType.push("String");
                                    cellTypeClass.push("");
                                    break;
                            }
                        }
                    }
                }
                var visibleColumnCount = cellType.length - visibleColumnCountReduction;

                var result = {
                    height : 9000,
                    width : Math.floor(totalWidthInPixels * 30) + 50
                };

                // Generate worksheet header details.
                var t = '<ss:Worksheet ss:Name="' + this.title + '">' + '<ss:Names>'
                        + '<ss:NamedRange ss:Name="Print_Titles" ss:RefersTo="=\''
                        + this.title + '\'!R1:R2" />' + '</ss:Names>'
                        + '<ss:Table x:FullRows="1" x:FullColumns="1"'
                        + ' ss:ExpandedColumnCount="' + (visibleColumnCount + 2)
                        + '" ss:ExpandedRowCount="' + (this.store.getCount() + 2)
                        + '">' + colXml + '<ss:Row ss:AutoFitHeight="1">' + headerXml
                        + '</ss:Row>';

                // Generate the data rows from the data in the Store
                for (var i = 0, it = this.store.data.items, l = it.length; i < l; i++) {
                    t += '<ss:Row>';
                    var cellClass = (i & 1) ? 'odd' : 'even';
                    r = it[i].data;
                    var k = 0;
                    for (var j = 0; j < colCount; j++) {
                        if ((cm.getDataIndex(j) != '')
                                && (includeHidden || !cm.isHidden(j))) {
                            var v = r[cm.getDataIndex(j)];
                            var rd = cm.getRenderer(j);
                            if (cellType[k] !== "None") {
                                t += '<ss:Cell ss:StyleID="' + cellClass
                                        + cellTypeClass[k] + '"><ss:Data ss:Type="'
                                        + cellType[k] + '">';
                                if(v==null){
                                    t+='';
                                }
                                else if (cellType[k] == 'DateTime') {
                                    t += v.format('Y-m-d');
                                } else {
                                    t += rd(v);
                                }
                                t += '</ss:Data></ss:Cell>';
                            }
                            k++;
                        }
                    }
                    t += '</ss:Row>';
                }

                result.xml = t
                        + '</ss:Table>'
                        + '<x:WorksheetOptions>'
                        + '<x:PageSetup>'
                        + '<x:Layout x:CenterHorizontal="1" x:Orientation="Landscape" />'
                        + '<x:Footer x:Data="Page &amp;P of &amp;N" x:Margin="0.5" />'
                        + '<x:PageMargins x:Top="0.5" x:Right="0.5" x:Left="0.5" x:Bottom="0.8" />'
                        + '</x:PageSetup>' + '<x:FitToPage />' + '<x:Print>'
                        + '<x:PrintErrors>Blank</x:PrintErrors>'
                        + '<x:FitWidth>1</x:FitWidth>'
                        + '<x:FitHeight>32767</x:FitHeight>' + '<x:ValidPrinterInfo />'
                        + '<x:VerticalResolution>600</x:VerticalResolution>'
                        + '</x:Print>' + '<x:Selected />'
                        + '<x:DoNotDisplayGridlines />'
                        + '<x:ProtectObjects>False</x:ProtectObjects>'
                        + '<x:ProtectScenarios>False</x:ProtectScenarios>'
                        + '</x:WorksheetOptions>' + '</ss:Worksheet>';
                return result;
            }

        跳轉的jsp頁面:
            <%@page import="java.net.URLEncoder"%>
<%
    response.reset();
    //request.setCharacterEncoding("UTF-8");
    String fileName = request.getParameter("fileName");
    fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
    //System.out.println(fileName);
    response.setHeader("Content-Type", "application/force-download");
    response.setHeader("Content-Type",
            "application/vnd.ms-excel;charset=UTF-8");
    response.setHeader("Content-Disposition", "attachment;filename="
            + fileName + ".xls");
    out.print(request.getParameter("exportContent"));
%>

錯誤信息:request.getParameter("fileName") 取到的為空值,getParameter("exportContent")也為空值,跳轉到jsp頁面之前是有值的

最佳回答:


是不是內容大小超過你jsp最大限制了?或者服務器的最大上傳大小限制。如asp默認是200KB。tomcat默認好像是2M

tomcat傳輸大小受限制

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved