//多个DataSet导出Excel文件
public static void DataSetToExcel(DataSet p_ds,string strSavePath)
{
int l_intSheetIndex=1;//多个DataSet导出多个Excel,针对Excel文件中的第一个Sheet
//实例化Excel对象
Microsoft.Office.Interop.Excel.Application app=new Microsoft.Office.Interop.Excel.Application();
//根据Excel对象新建Excel文件
Microsoft.Office.Interop.Excel.Workbook book=app.Workbooks.Add(true);
try
{
foreach(DataTable dt in p_ds.Tables)
{
if(dt!=null && dt.Rows.Count>0)
{
object missing=System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Worksheet sheet;
//判断Excel文件是否存在Sheet
//1.不存在就新建Sheet
//2.存在就开启对应Sheet
if(book.Worksheets.Count < l_intSheetIndex)
{
//新建Sheet
sheet=(Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets.Add(Type.Missing,book.Worksheets[book.Worksheets.Count],1,Type.Missing);
}
//开启对应Sheet
sheet=(Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets.get_Item(l_intSheetIndex);
//设置Sheet名
sheet.Name=dt.TableName;
//取得区域 --取得区域的方式 1.设置整列 2.设置使用的区域
//整列
//Range column = ((Range)worksheet.Cells[1, 1]).EntireColumn;(选取A列;方法:先选取A1单元格,然后选取A1单元格所在的这一整列。)
//使用的区域
Microsoft.Office.Interop.Excel.Range l_range=sheet.Range[sheet.Cells[1,1],sheet.Cells[dt.Rows.Count+1,dt.Columns.Count]];
//设置区域格式“@”是文本格式
l_range.NumberFormatLocal="@";
int i=0;
foreach(DataColumn dc in dt.Columns)
{
sheet.Cells[1,i+1]=dc.ColumnName;
i++;
}
int j=0;
foreach(DataRow dr in dt.Rows)
{
int k=0;
foreach(DataColumn dc in dt.Columns)
{
sheet.Cells[j+2,k+1]=dr[k].ToString();
k++;
}
}
book.Saveed=true;
}
l_intSheetIndex++;
}
((Microsoft.Office.Interop.Excel.WorkSheet)book.Worksheets.get_Item(1)).Select();
book.SaveAs(strSavePath);
book.Close(Type.Missing,Type.Missing,Type.Missing);
}
catch(Exception ex)
{
throw ex;
}
finally
{
app.Quit();
IntPtr t=new IntPtr(app.Hwnd);
int d=0;
GetWindowThreadProcessId(t,out d);
System.Diagenostics.Process p=System.Diagnostics.Process.GetProcessById(d);
p.Kill();
}
}
[DllImport("User32.dll",CharSet=CharSet.Auto)]
Public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID);