使用.NET生成Excel文件
2024-07-10 12:58:43
供稿:网友
我在工作中遇到了一些生成excel的问题。
在网络上查找了很多方法,各有优劣。
最后选择了使用office 的excel 自动化服务来生成excel文件的办法,也就是使用excel提供的com对象。
具体的代码如下:
public static void createexcel()
{
for(int i = 0 ; i<1 ; i++)
{
string stafile = "d://test//x";
system.reflection.missing miss = system.reflection.missing.value;
excel.applicationclass m_objexcel = new excel.applicationclass();
m_objexcel.visible = false;
excel.workbooks m_objbooks = (excel.workbooks)m_objexcel.workbooks;
excel.workbook m_objbook = (excel.workbook)(m_objbooks.add(miss));
excel.worksheet m_objsheet = (excel.worksheet)m_objbook.activesheet;
//向excel文件中写入数据
excel.range er = m_objsheet.get_range((object)"a1",system.reflection.missing.value);
er.value2 = "dfadfa";
m_objbook.saveas(stafile+i.tostring()+".xls", miss, miss, miss, miss,miss, excel.xlsaveasaccessmode.xlnochange, miss,miss,miss, miss, miss);
m_objbook.close(false, miss, miss);
m_objbooks.close();
m_objexcel.quit();
system.runtime.interopservices.marshal.releasecomobject(er);
system.runtime.interopservices.marshal.releasecomobject(m_objsheet);
system.runtime.interopservices.marshal.releasecomobject(m_objbook);
system.runtime.interopservices.marshal.releasecomobject(m_objbooks);
system.runtime.interopservices.marshal.releasecomobject(m_objexcel);
gc.collect();
}
}
在网上也看到过类似的办法,但是他们都存在着一个使用完excel后无法释放的问题;在我经过研究后发现在使用com对象的时候一定要把每一个建立的实例对象都释放掉,也就是代码中红色的部分。
注:使用本代码要自己在工程中引用excel组件。另:我只在office 2003下做了测试,确定对象可以释放。在其它系统下没有做相应测试,请大家自行研究。
软件环境:.net framework 1.1 vs.net 2003 office2003 windows2000 sp4
硬件环境:p4 2.4g 512m