1。先来张图:
导出前数据:
导出结果:
设置列宽和屏蔽栏位:
结果2:
2.先把脚本文件定义了。
gridElse.js 脚本文件
//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)
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;
}
};
}
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 ID ="Sdate" runat ="server" OnSubmitData ="Sdate_SubmitData" >
<AjaxEventConfig IsUpload="true" /><!--这行重要前面忘记加了-->
......
</ 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 >
......
</ 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 & amp;P of & amp;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();
}
}
{
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 & amp;P of & amp;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();
}
}
自定义实体:
///
<summary>
导出数据
</summary>
[Serializable]
public class ExportDate
{
/// <summary> 标题 </summary>
public String title { get ; set ; }
/// <summary> 文件名 </summary>
public String fileName { get ; set ; }
/// <summary> 导出格式 </summary>
public String format { get ; set ; }
/// <summary> 总数据数量 </summary>
public int dataCount { get ; set ; }
public String columns { get ; set ; }
public String jsonDate { get ; set ; }
List < GridColumnInfo > gridColumnInfos;
/// <summary> 标题集合 </summary>
public List < GridColumnInfo > GridColumnInfos
{
get
{
if (gridColumnInfos == null )
{
if ( ! string .IsNullOrEmpty(columns))
{
gridColumnInfos = JSON.Deserialize < List < GridColumnInfo >> (columns);
}
}
return gridColumnInfos;
}
}
Dictionary < string , string > [] dates;
/// <summary> 数据集合 </summary>
public Dictionary < string , string > [] Dates
{
get
{
if (dates == null )
{
if ( ! string .IsNullOrEmpty(jsonDate))
{
dates = JSON.Deserialize < Dictionary < string , string > [] > (jsonDate);
}
}
return dates;
}
set
{
dates = value;
}
}
public void ListToDictionary < T > (List < T > ts)
{
Type t = typeof (T);
dates = new Dictionary < string , string > [ts.Count];
int i = 0 ;
foreach (T rom in ts)
{
foreach (GridColumnInfo item in this .GridColumnInfos)
{
if ( ! item.hidden || item.BGroup)
{
if (dates[i] == null ) dates[i] = new Dictionary < string , string > ();
dates[i].Add(item.dataIndex,
t.GetProperty(item.dataIndex).GetValue(rom, null ).ToString());
}
}
i ++ ;
}
}
public void DataTableToDictionary(DataTable dt)
{
dates = new Dictionary < string , string > [dt.Rows.Count];
int i = 0 ;
foreach (DataRow rom in dt.Rows)
{
foreach (GridColumnInfo item in this .GridColumnInfos)
{
if ( ! item.hidden || item.BGroup)
{
if (dates[i] == null ) dates[i] = new Dictionary < string , string > ();
dates[i].Add(item.dataIndex,rom[item.dataIndex].ToString());
}
}
i ++ ;
}
}
public String GetStyleID(String rft)
{
switch (rft.ToLower())
{
case " int " : return " int " ;
case " float " : return " float " ;
case " date " : return " date " ;
default : return "" ;
}
}
public String GetDataType(String rft)
{
switch (rft.ToLower())
{
case " int " :
case " float " : return " Number " ;
case " date " : return " DateTime " ;
default : return " String " ;
}
}
}
[Serializable]
public class ExportDate
{
/// <summary> 标题 </summary>
public String title { get ; set ; }
/// <summary> 文件名 </summary>
public String fileName { get ; set ; }
/// <summary> 导出格式 </summary>
public String format { get ; set ; }
/// <summary> 总数据数量 </summary>
public int dataCount { get ; set ; }
public String columns { get ; set ; }
public String jsonDate { get ; set ; }
List < GridColumnInfo > gridColumnInfos;
/// <summary> 标题集合 </summary>
public List < GridColumnInfo > GridColumnInfos
{
get
{
if (gridColumnInfos == null )
{
if ( ! string .IsNullOrEmpty(columns))
{
gridColumnInfos = JSON.Deserialize < List < GridColumnInfo >> (columns);
}
}
return gridColumnInfos;
}
}
Dictionary < string , string > [] dates;
/// <summary> 数据集合 </summary>
public Dictionary < string , string > [] Dates
{
get
{
if (dates == null )
{
if ( ! string .IsNullOrEmpty(jsonDate))
{
dates = JSON.Deserialize < Dictionary < string , string > [] > (jsonDate);
}
}
return dates;
}
set
{
dates = value;
}
}
public void ListToDictionary < T > (List < T > ts)
{
Type t = typeof (T);
dates = new Dictionary < string , string > [ts.Count];
int i = 0 ;
foreach (T rom in ts)
{
foreach (GridColumnInfo item in this .GridColumnInfos)
{
if ( ! item.hidden || item.BGroup)
{
if (dates[i] == null ) dates[i] = new Dictionary < string , string > ();
dates[i].Add(item.dataIndex,
t.GetProperty(item.dataIndex).GetValue(rom, null ).ToString());
}
}
i ++ ;
}
}
public void DataTableToDictionary(DataTable dt)
{
dates = new Dictionary < string , string > [dt.Rows.Count];
int i = 0 ;
foreach (DataRow rom in dt.Rows)
{
foreach (GridColumnInfo item in this .GridColumnInfos)
{
if ( ! item.hidden || item.BGroup)
{
if (dates[i] == null ) dates[i] = new Dictionary < string , string > ();
dates[i].Add(item.dataIndex,rom[item.dataIndex].ToString());
}
}
i ++ ;
}
}
public String GetStyleID(String rft)
{
switch (rft.ToLower())
{
case " int " : return " int " ;
case " float " : return " float " ;
case " date " : return " date " ;
default : return "" ;
}
}
public String GetDataType(String rft)
{
switch (rft.ToLower())
{
case " int " :
case " float " : return " Number " ;
case " date " : return " DateTime " ;
default : return " String " ;
}
}
}
[Serializable]
public class GridColumnInfo
{
public GridColumnInfo() { BGroup = false ; width = 100 ; }
/// <summary> id </summary>
public String id { get ; set ; }
/// <summary> 字段名 </summary>
public String dataIndex { get ; set ; }
/// <summary> 标题 </summary>
public String header { get ; set ; }
/// <summary> 汇总类型 </summary>
public String summaryType { get ; set ; }
/// <summary> 数据类型 </summary>
public String recordFieldType { get ; set ; }
/// <summary> 宽度 </summary>
public int width { get ; set ; }
/// <summary> 排序方式 </summary>
public bool sortable { get ; set ; }
/// <summary> 是否显示 </summary>
public bool hidden { get ; set ; }
/// <summary> 是否分组选中 </summary>
public bool BGroup { get ; set ; }
}
public class GridColumnInfo
{
public GridColumnInfo() { BGroup = false ; width = 100 ; }
/// <summary> id </summary>
public String id { get ; set ; }
/// <summary> 字段名 </summary>
public String dataIndex { get ; set ; }
/// <summary> 标题 </summary>
public String header { get ; set ; }
/// <summary> 汇总类型 </summary>
public String summaryType { get ; set ; }
/// <summary> 数据类型 </summary>
public String recordFieldType { get ; set ; }
/// <summary> 宽度 </summary>
public int width { get ; set ; }
/// <summary> 排序方式 </summary>
public bool sortable { get ; set ; }
/// <summary> 是否显示 </summary>
public bool hidden { get ; set ; }
/// <summary> 是否分组选中 </summary>
public bool BGroup { get ; set ; }
}