Coolite优化导出Excel文件实现代码

时间:2022-05-31 23:28:03

1。先来张图:

导出前数据:

Coolite优化导出Excel文件实现代码

导出结果:

Coolite优化导出Excel文件实现代码

设置列宽和屏蔽栏位:

Coolite优化导出Excel文件实现代码

结果2:

Coolite优化导出Excel文件实现代码

2.先把脚本文件定义了。

复制代码代码如下:

//Copyright 2009 无忧lwz0721@gmail.com 
var gridElse = { 
getJsonToHidden: function(hidden, grid, format, title, fileName) { 
hidden.setValue(this.getJsonDate(grid, format, title, fileName)); 
grid.submitData(true); 
return true; 
}, 
getJsonDate: function(grid, format, title, fileName) { 
if (fileName == null || fileName == "") fileName = title; 
var result = { 
title: title, 
format: format, 
fileName: fileName, 
dataCount: grid.store.reader.jsonData.length, 
columns: '', 
jsonDate: '' 
}; 
//获取分组ID 
var groupField; 
if (typeof (grid.view.getGroupField) == "undefined") 
{ groupField = false; } 
else { groupField = grid.view.getGroupField(); } 
//设置表头 
var columns = this.getColumns(grid); //.getColumnModel().columns; 
var columnCount = columns.length 
for (var i = 0; i < columnCount; i++) { 
if (columns[i].dataIndex != null && columns[i].dataIndex != "") { 
fld = grid.store.fields.get(columns[i].dataIndex); 
columns[i].recordFieldType = this.getRecordFieldType(fld); 

if (groupField && groupField == columns[i].dataIndex) 
columns[i].BGroup = true; 

result.columns = Ext.encode(columns); 
//返回数据 
if (result.dataCount > 0 && result.dataCount <= 500) { 
result.jsonDate = Ext.encode(grid.store.reader.jsonData); 

else if (result.dataCount == null) result.dataCount = 0; 
return Ext.encode(result); 
}, 
getRecordFieldType: function(fld) { 
if (fld == null) return ""; 
switch (fld.type) { 
case "int": return "Int"; 
case "float": return "Float"; 
case "bool": 
case "boolean": return "Boolean"; 
case "date": return "Date"; 
case "string": return "String"; 
default: return "Auto"; 

}, 
getColumns: function(grid) { 
var columns = grid.getColumnModel().columns; 
var columnCount = columns.length 
for (var i = columnCount - 1; i >= 0; i--) { 
if (columns[i].isColumnPlugin) columns.remove(columns[i]); 

return columns; 

}; 

3.调用方法: 
复制代码代码如下:

gridElse.getJsonToHidden(#{存储控件},#{GridPanel控件},'xls','标题','文件名'); 

4.aspx页面: 
XXX.aspx 
复制代码代码如下:

<ext:Hidden ID="HToFile" runat="server" /> 
...... 
<ext:Store ID="Sdate" runat="server" OnSubmitData="Sdate_SubmitData" > 
...... 
</ext:Store> 
...... 
<ism:GridPanel ID="GPData" runat="server" StoreID="Sdate"> 
...... 
<ext:Button ID="Button1" runat="server" Text="Submit"> 
<Listeners> 
<Click Handler="gridElse.getJsonToHidden(#{HToFile},#{GPData},'xls','标题','文件名');" /> 
</Listeners> 
</ext:Button> 

5.cs代码: 
XXX.aspx.cs 
复制代码代码如下:

protected void Sdate_SubmitData(object sender, StoreSubmitDataEventArgs e) 

String json = HToFile.Value.ToString(); 
if (!String.IsNullOrEmpty(json)) 

ExportDate exportDate = JSON.Deserialize<ExportDate>(json); 
if (exportDate.dataCount > 0) 

if (exportDate.Dates == null || exportDate.Dates.Length < exportDate.dataCount) 

//如数据超过500条这重新查询数据导出 

switch (exportDate.format) 

case "xls": 
GetToExcel(exportDate); 
break; 
case "pdf": 
...... 
break; 




public static void GetToExcel(ExportDate exportDate) 

if (exportDate.Dates == null) { return; } 
HttpContext context = HttpContext.Current; 
if (context != null) 

String rowid = ""; 
StringBuilder sb = new StringBuilder(); 
int columns = 0; 
foreach (GridColumnInfo item in exportDate.GridColumnInfos) 

if (!item.hidden || item.BGroup) 

columns++; 


#region 头部 
sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); 
sb.Append("<?mso-application progid=\"Excel.Sheet\"?>"); 
sb.Append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:html=\"http://www.w3.org/TR/REC-html40\">"); 
sb.Append(" <DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">"); 
sb.Append(" <Version>12.00</Version>"); 
sb.Append(" </DocumentProperties>"); 
sb.Append(" <OfficeDocumentSettings xmlns=\"urn:schemas-microsoft-com:office:office\">"); 
sb.Append(" <RemovePersonalInformation/>"); 
sb.Append(" </OfficeDocumentSettings>"); 
sb.Append(" <ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">"); 
sb.Append(" <WindowHeight>11640</WindowHeight>"); 
sb.Append(" <WindowWidth>19200</WindowWidth>"); 
sb.Append(" <WindowTopX>0</WindowTopX>"); 
sb.Append(" <WindowTopY>90</WindowTopY>"); 
sb.Append(" <ProtectStructure>False</ProtectStructure>"); 
sb.Append(" <ProtectWindows>False</ProtectWindows>"); 
sb.Append(" </ExcelWorkbook>"); 
#region 样式 
sb.Append("<Styles>"); 
sb.Append("<Style ss:ID=\"Default\">"); 
sb.Append("<Alignment ss:Vertical=\"Top\" ss:WrapText=\"1\" />"); 
sb.Append("<Font ss:FontName=\"宋体\" ss:Size=\"11\" />"); 
//sb.Append("<Borders>"); 
//sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
//sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
//sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
//sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
//sb.Append("</Borders>"); 
sb.Append("<Interior />"); 
sb.Append("<NumberFormat />"); 
sb.Append("<Protection />"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:ID=\"title\">"); 
sb.Append("<Borders />"); 
sb.Append("<Font ss:Size=\"16\" ss:Bold=\"1\" />"); 
sb.Append("<Alignment ss:WrapText=\"1\" ss:Vertical=\"Center\" ss:Horizontal=\"Center\" />"); 
sb.Append("<NumberFormat ss:Format=\"@\" />"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:ID=\"headercell\">"); 
sb.Append("<Font ss:Bold=\"1\" ss:Size=\"12\" />"); 
sb.Append("<Alignment ss:WrapText=\"1\" ss:Horizontal=\"Center\" />"); 
sb.Append("<Interior ss:Pattern=\"Solid\" ss:Color=\"#F2F2F2\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:ID=\"even\">"); 
sb.Append("<Interior ss:Pattern=\"Solid\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:Parent=\"even\" ss:ID=\"evendate\">"); 
sb.Append("<NumberFormat ss:Format=\"[ENG][$-409]dd-mmm-yyyy;@\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:Parent=\"even\" ss:ID=\"evenint\">"); 
sb.Append("<NumberFormat ss:Format=\"0\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:Parent=\"even\" ss:ID=\"evenfloat\">"); 
sb.Append("<NumberFormat ss:Format=\"0.00\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:ID=\"odd\">"); 
sb.Append("<Interior ss:Pattern=\"Solid\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:Parent=\"odd\" ss:ID=\"odddate\">"); 
sb.Append("<NumberFormat ss:Format=\"[ENG][$-409]dd-mmm-yyyy;@\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:Parent=\"odd\" ss:ID=\"oddint\">"); 
sb.Append("<NumberFormat ss:Format=\"0\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("<Style ss:Parent=\"odd\" ss:ID=\"oddfloat\">"); 
sb.Append("<NumberFormat ss:Format=\"0.00\" />"); 
sb.Append("<Borders>"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Bottom\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Left\" />"); 
sb.Append("<Border ss:Weight=\"1\" ss:LineStyle=\"Continuous\" ss:Position=\"Right\" />"); 
sb.Append("</Borders>"); 
sb.Append("</Style>"); 
sb.Append("</Styles>"); 
#endregion 
sb.AppendFormat("<Worksheet ss:Name=\"{0}\">", exportDate.title); 
sb.AppendFormat("<Table x:FullRows=\"1\" x:FullColumns=\"1\" ss:ExpandedColumnCount=\"{0}\" ss:ExpandedRowCount=\"{1}\">", columns, exportDate.Dates.Length + 2); 
#endregion 
//表列宽度 
int ColumnWidthsZ = 0; 
foreach (GridColumnInfo item in exportDate.GridColumnInfos) 

if (!item.hidden || item.BGroup) 

ColumnWidthsZ += item.width; 
sb.AppendFormat("<Column ss:AutoFitWidth=\"1\" ss:Width=\"{0}\" />", item.width); 


//标题 
sb.Append("<Row ss:Height=\"28\">"); 
sb.AppendFormat("<Cell ss:StyleID=\"title\" ss:MergeAcross=\"{0}\">", columns - 1); 
sb.AppendFormat("<Data ss:Type=\"String\">{0}</Data><NamedCell ss:Name=\"Print_Titles\" />", exportDate.title); 
sb.Append("</Cell>"); 
sb.Append("</Row>"); 
//表头 
sb.Append("<Row ss:AutoFitHeight=\"1\">"); 
foreach (GridColumnInfo item in exportDate.GridColumnInfos) 

if (!item.hidden || item.BGroup) 

sb.AppendFormat("<Cell ss:StyleID=\"headercell\"><Data ss:Type=\"String\">{0}</Data><NamedCell ss:Name=\"Print_Titles\" /></Cell>", item.header); 


sb.Append("</Row>"); 
//数据 
int i = 0; 
string cellClass = ""; 
foreach (Dictionary<string, string> row in exportDate.Dates) 

i++; 
cellClass = ((i & 1) == 0) ? "odd" : "even"; 
sb.Append("<Row>"); 
foreach (GridColumnInfo item in exportDate.GridColumnInfos) 

rowid = item.id; 
if (string.IsNullOrEmpty(rowid)) rowid = item.dataIndex; 
if (!String.IsNullOrEmpty(rowid) && (!item.hidden || item.BGroup) && row.ContainsKey(rowid)) 

sb.AppendFormat("<Cell ss:StyleID=\"{0}{1}\"><Data ss:Type=\"{2}\">{3}</Data></Cell>", 
cellClass, exportDate.GetStyleID(item.recordFieldType), exportDate.GetDataType(item.recordFieldType), row[rowid]); 


sb.Append("</Row>"); 

#region 尾部 
sb.Append("</Table>"); 
sb.Append("<WorksheetOptions>"); 
sb.Append("<PageSetup>"); 
sb.Append("<Layout x:CenterHorizontal=\"1\" x:Orientation=\"Landscape\" />"); 
sb.Append("<Footer x:Data=\"Page &P of &N\" x:Margin=\"0.5\" />"); 
sb.Append("<PageMargins x:Top=\"0.5\" x:Right=\"0.5\" x:Left=\"0.5\" x:Bottom=\"0.8\" />"); 
sb.Append("</PageSetup>"); 
sb.Append("<FitToPage />"); 
sb.Append("<Print>"); 
sb.Append("<PrintErrors>Blank</PrintErrors>"); 
sb.Append("<FitWidth>1</FitWidth>"); 
sb.Append("<FitHeight>32767</FitHeight>"); 
sb.Append("<ValidPrinterInfo />"); 
sb.Append("<VerticalResolution>600</VerticalResolution>"); 
sb.Append("</Print>"); 
sb.Append("<Selected />"); 
sb.Append("<DoNotDisplayGridlines />"); 
sb.Append("<ProtectObjects>False</ProtectObjects>"); 
sb.Append("<ProtectScenarios>False</ProtectScenarios>"); 
sb.Append("</WorksheetOptions>"); 
sb.Append("</Worksheet></Workbook>"); 
#endregion 
context.Response.Clear(); 
if (context.Request.Browser.Browser != "IE") 
context.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename=\"{0}.xls\"", exportDate.fileName)); 
else context.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}.xls", System.Web.HttpUtility.UrlEncode(exportDate.fileName))); 
context.Response.ContentType = "application/excel"; 
context.Response.Write(sb.ToString()); 
context.Response.End();