志在指尖
用双手敲打未来

DataTable导出到Excel高效率代码分享

usingMicrosoft.Office.Interop.Excel;
usingSystem.Runtime.InteropServices;
[DllImport(“User32.dll”,CharSet=CharSet.Auto)]
publicstaticexternintGetWindowThreadProcessId(IntPtrhwnd,outintpid);
//函数原型;DWORDGetWindowThreadProcessld(HWNDhwnd,LPDWORDlpdwProcessld);
//参数:hWnd:窗口句柄
//参数:lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝
//返回值:返回值为创建窗口的线程标识。
//dt:从数据库读取的数据;file_name:保存途径;sheet_name:表单称号C#
privatevoidDataTableToExcel(DataTabledt,stringfile_name,stringsheet_name)
{
Microsoft.Office.Interop.Excel.ApplicationMyxls=newMicrosoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.WorkbookMywkb=Myxls.Workbooks.Add();
Microsoft.Office.Interop.Excel.WorksheetMySht=Mywkb.ActiveSheet;
MySht.Name=sheet_name;
Myxls.Visible=false;
Myxls.DisplayAlerts=false;
try
{
//写入表头
object[]arrHeader=newobject[dt.Columns.Count];
for(inti=0;i<dt.Columns.Count;i++)
{
arrHeader[i]=dt.Columns[i].ColumnName;
}
MySht.Range[Mysht.Cells[1,1],MySht.Cells[1,dt.Columns.Count]].Value2=arrHeader;
//写入表体数据
object[,]arrBody=newobject[dt.Rows.Count,dt.Columns.Count];
for(inti=0;i<dt.Rows.Count;i++)
{
for(intj=0;j<dt.Columns.Count;j++)
{
arrBody[i,j]=dt.Rows[i][j].ToString();
}
}
MySht.Range[MySht.Cells[2,1],MySht.Cells[dt.Rows.Count+1,dt.Columns.Count]].Value2=arrBody;
if(Mywkb!=null)
{
Mywkb.SaveAs(file_name);
Mywkb.Close(Type.Missing,Type.Missing,Type.Missing);
Mywkb=null;
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message,”体系提示”);
}
finally
{
//完全关闭Excel进程
if(Myxls!=null)
{
Myxls.Quit();
try
{
if(Myxls!=null)
{
intpid;
GetWindowThreadProcessId(newIntPtr(Myxls.Hwnd),outpid);
System.Diagnostics.Processp=System.Diagnostics.Process.GetProcessById(pid);
p.Kill();
}
}
catch(Exceptionex)
{
MessageBox.Show(“结束当前EXCEL进程失败:”+ex.Message);
}
Myxls=null;
}
GC.Collect();
}
}

未经允许不得转载:IT技术网站 » DataTable导出到Excel高效率代码分享
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载