在WinForm開發中,經常需要將DataGrid中顯示的資料匯出各種檔案格式。現以匯出Excel為例:
1、繼承Net的DataGrid
public class DataGridEx : System.Windows.Forms.DataGrid
2、添加Excel引用
3、編寫匯出方法
public bool ExportExcel()
{
return ExportExcel("");
}
public bool ExportExcel(string p_ReportName)
{
if ( this.TableStyles.Count == 0 ) return false;
DataGridTableStyle ts = this.TableStyles[0];
// 建立表頭 --LeeWenjie 2006-11-21
Excel.Application xlApp = new Excel.ApplicationClass();
Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
Excel.Worksheet xlSheet = (Excel.Worksheet)xlBook.Worksheets[1];
Excel.Range range = xlSheet.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,ts.GridColumnStyles.Count]);
range.MergeCells = true;
xlApp.ActiveCell.FormulaR1C1 = p_ReportName;
xlApp.ActiveCell.Font.Size = 20;
xlApp.ActiveCell.Font.Bold = true;
xlApp.ActiveCell.HorizontalAlignment = Excel.Constants.xlCenter;
// 建立列頭 --LeeWenjie 2006-11-21
int colIndex = 0;
int RowIndex = 2;
foreach(DataGridColumnStyle cs in ts.GridColumnStyles)
{
colIndex++;
xlSheet.Cells[RowIndex,colIndex] = cs.HeaderText;
}
// 根據Grid顯示的內容輸出自Excel
// 賦值給儲存格
int RowCount = this.BindingContext[this.DataSource,this.DataMember].Count;
for(int i = 0 ; i < RowCount ;i++)
{
RowIndex++;
int ColCount = ts.GridColumnStyles.Count;
for(colIndex = 1; colIndex <= ColCount ;colIndex++)
{
xlSheet.Cells[RowIndex,colIndex] = this[i,colIndex-1];
}
Application.DoEvents();
}
xlBook.Saved = true;
xlBook.SaveCopyAs("D://Fly" + DateTime.Now.ToString("yyyyMMdd") + ".xls");
xlApp.Quit();
GC.Collect();
return true;
}
開發環境:
VS.Net 2003
缺陷:匯出速度慢,曾考虛過多線程,但效果並不理想。
8000條資料大約需要6分鐘。請高手多指教!
**************************************