首页 > 编程 > .NET > 正文

使用.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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表