一:一个工作簿里一个DataTable一个sheet页。。。
/// <summary>
/// 将DataSet里所有数据导入Excel.
/// 需要添加COM: Microsoft Excel Object Library.
/// using Excel;
/// </summary>
/// <param name="filePath"></param>
/// <param name="ds"></param>
public static void ExportToExcel(string filePath, DataSet ds)
{
object oMissing = System.Reflection.Missing.Value;
Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
try
{
// 打开Excel文件。以下为Office 2000.
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filePath, oMissing, oMissing, oMissing, oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,
oMissing);
Excel.Worksheet xlWorksheet;
// 循环所有DataTable
for( int i=0; i<ds.Tables.Count; i++ )
{
// 添加入一个新的Sheet页。
xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.Add(oMissing,oMissing,1,oMissing);
// 以TableName作为新加的Sheet页名。
xlWorksheet.Name = ds.Tables[i].TableName;
// 取出这个DataTable中的所有值,暂存于stringBuffer中。
string stringBuffer = "";
for( int j=0; j<ds.Tables[i].Rows.Count; j++ )
{
for( int k=0; k<ds.Tables[i].Columns.Count; k++ )
{
stringBuffer += ds.Tables[i].Rows[j][k].ToString();
if( k < ds.Tables[i].Columns.Count - 1 )
stringBuffer += "/t";
}
stringBuffer += "/n";
}
// 利用系统剪切板
System.Windows.Forms.Clipboard.SetDataObject("");
// 将stringBuffer放入剪切板。
System.Windows.Forms.Clipboard.SetDataObject(stringBuffer);
// 选中这个sheet页中的第一个单元格
((Excel.Range)xlWorksheet.Cells[1,1]).Select();
// 粘贴!
xlWorksheet.Paste(oMissing,oMissing);
// 清空系统剪切板。
System.Windows.Forms.Clipboard.SetDataObject("");
}
// 保存并关闭这个工作簿。
xlWorkbook.Close( Excel.XlSaveAction.xlSaveChanges, oMissing, oMissing );
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);
xlWorkbook = null;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
// 释放...
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
xlApp = null;
GC.Collect();
}
}
二:将DataSet里的多个DataTable导出到一个Excel的同一个Sheet里:
public static void ExportToExcel(string filePath, DataSet ds)
{
object oMissing=System.Reflection.Missing.Value;
Excel.ApplicationClass xlApp =new Excel.ApplicationClass();
//xlApp.Application.Workbooks.Add(true);
try
{
Excel.Workbook xlWorkBook=xlApp.Workbooks.Open(filePath,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);
Excel.Worksheet xlSheet;
xlSheet=(Excel.Worksheet)xlWorkBook.Worksheets.Add(oMissing,oMissing,1,oMissing);
xlSheet.Name=ds.DataSetName;
int ExcelRowNumber=1; //记录数据集里表所在的行
for(int i=0;i<ds.Tables.Count;i++)
{
string strBuffer="";
int tableRowAcount=0; //记录单个表的行数
for(int j=0;j<ds.Tables[i].Rows.Count;j++)
{
for(int k=0;k<ds.Tables[i].Columns.Count;k++)
{
strBuffer+=ds.Tables[i].Rows[j][k].ToString();
if(k<ds.Tables[i].Columns.Count-1)
strBuffer+="/t";
}
strBuffer+="/n";
tableRowAcount++;
}
System.Windows.Forms.Clipboard.SetDataObject("");
System.Windows.Forms.Clipboard.SetDataObject(strBuffer);
((Excel.Range)xlSheet.Cells[ExcelRowNumber,1]).Select();
xlSheet.Paste(oMissing,oMissing);
System.Windows.Forms.Clipboard.SetDataObject("");
ExcelRowNumber+=tableRowAcount;
ExcelRowNumber++;
} //end for
xlWorkBook.Close(Excel.XlSaveAction.xlSaveChanges,oMissing,oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
xlWorkBook=null;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
xlApp.Quit();
xlApp=null;
GC.Collect();
}
}