使用.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