
/**////<summary>
///将DataSet里所有数据导入Excel
///需要添加COM:MicrosoftExcelObjectLibrary
///usingExcel;
///</summary>
///<paramname="filePath">文件路径</param>
///<paramname="ds">需要转存的DataSet</param>
publicstaticvoidExportToExcel(stringfilePath,DataSetds)
...{
objectoMissing=System.Reflection.Missing.Value;
Excel.ApplicationClassxlApp=newExcel.ApplicationClass();
try
...{
//打开Excel文件。以下为Office2000.
Excel.WorkbookxlWorkbook=
xlApp.Workbooks.Open(filePath,oMissing,oMissing,
oMissing,oMissing,oMissing,
oMissing,oMissing,oMissing,
oMissing,oMissing,oMissing,
oMissing);
Excel.WorksheetxlWorksheet;
//循环所有DataTable
for(inti=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中
System.Text.StringBuilder stringBuffer= new System.Text.StringBuilder();
for(intj=0;j<ds.Tables[i].Rows.Count;j++)
...{
for(intk=0;k<ds.Tables[i].Columns.Count;k++)
...{
stringBuffer.Append((string)ds.Tables[i].Rows[j][k]);
if(k<ds.Tables[i].Columns.Count-1)
stringBuffer.Append("/t");
}
stringBuffer.Append("/n");
}
//利用系统剪切板
System.Windows.Forms.Clipboard.SetDataObject("");

//将stringBuffer放入剪切板
System.Windows.Forms.Clipboard.SetDataObject(stringBuffer);

//选中这个sheet页中的第一个单元格(下标从1开始)
((Excel.Range)xlWorksheet.Cells[1,1]).Select();

//将剪切板里的内容粘贴在Sheet中
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(Exceptionex)

...{
MessageBox.Show(ex.Message);
}
finally

...{
//释放COM对象
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
GC.Collect();
}
}
if(k<ds.Tables[i].Columns.Count-1)
stringBuffer.Append("/t");
}
stringBuffer.Append("/n");
}
//利用系统剪切板
System.Windows.Forms.Clipboard.SetDataObject("");
//将stringBuffer放入剪切板
System.Windows.Forms.Clipboard.SetDataObject(stringBuffer);
//选中这个sheet页中的第一个单元格(下标从1开始)
((Excel.Range)xlWorksheet.Cells[1,1]).Select();
//将剪切板里的内容粘贴在Sheet中
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(Exceptionex)
...{
MessageBox.Show(ex.Message);
}
finally
...{
//释放COM对象
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
GC.Collect();
}
}
该博客提供了将DataSet里所有数据导入Excel的方法。需添加COM:Microsoft Excel Object Library,通过循环DataTable,将数据暂存于stringBuffer,利用系统剪切板粘贴到Excel的新Sheet页,最后保存并关闭工作簿,同时释放COM对象。
1845

被折叠的 条评论
为什么被折叠?



