把DATASET里的多个表导出到一个excel文件?

时间:2022-04-20 09:32:42

一:一个工作簿里一个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();  
  }  
  }