首页 新闻 会员 周边

在不显示OfficeExcel的情况下操作Excel,而且关闭Excel进程?

0
[已解决问题] 解决于 2012-08-27 12:54
  
以下代码每执行一次,便在任务管理器里多一个Excel进程,有没有什么办法在执行完后关闭Excel.exe 进程?(附图如下)
var application = new Excel.Application(); var workbook = application.Workbooks.Open(fileName); var worksheet = workbook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet; // Add chart. var charts = worksheet.ChartObjects() as Microsoft.Office.Interop.Excel.ChartObjects; var chartObject = charts.Add(60, 10, 300, 300) as Microsoft.Office.Interop.Excel.ChartObject; var chart = chartObject.Chart; // Set chart range. var range = worksheet.get_Range(topLeft, bottomRight); chart.SetSourceData(range); // Set chart properties. chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlLine; chart.ChartWizard(Source: range, Title: graphTitle, CategoryTitle: xAxis, ValueTitle: yAxis);

问题补充:

Process[] process = Process.GetProcessesByName("EXCEL");
foreach (var item in process)
{
item.Kill();
}

用以上代码虽然能退出进程,但是不会保存数据

symphony2010的主页 symphony2010 | 初学一级 | 园豆:99
提问于:2012-08-21 13:36
< >
分享
最佳答案
0

try{

....

}finally{

   Process[] ps=Process.GetProcessesByName("EXCEL");

   for(ProcessInfo p in ps){

    p.Kill();

  }

}

奖励园豆:5
向往-SONG | 老鸟四级 |园豆:4853 | 2012-08-21 13:48

无法保存数据!

symphony2010 | 园豆:99 (初学一级) | 2012-08-21 13:49

@symphony2010: 

哦。。。

我们项目里面的你参考一下:

/// <summary>
        /// 如果对Excel的操作没有引发异常的话,用这个方法可以正常结束Excel进程
        /// 否则要用KillExcelProcess()方法来结束Excel进程
        /// </summary>
        public void Dispose()
        {
            m_objBook.Close(null, null, null);
            m_objExcel.Workbooks.Close();
            m_objExcel.Quit();

            //注意:这里用到的所有Excel对象都要执行这个操作,否则结束不了Excel进程
            if (m_objSheet != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet);
                m_objSheet = null;
            }
            if (m_objSheets != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheets);
                m_objSheets = null;
            }
            if (m_objBook != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);
                m_objBook = null;
            }
            if (m_objExcel != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
                m_objExcel = null;
            }
            //強制回收所有资源
            GC.Collect();
        }

try{

  ...

}catch{     

   Process[] ps=Process.GetProcessesByName("EXCEL");

   for(ProcessInfo p in ps){

    p.Kill();

  }

}finally{

  if (ea != null) ea.Dispose();//调用上面定义的dispose方法

}

向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-21 14:00
其他回答(1)
0

如果不怕增加一个DLL依赖的话,就用NPOI

自己折腾这个很是麻烦

Jerry Chou | 园豆:2642 (老鸟四级) | 2012-08-21 15:38

发现这个dll 或者是别的applibrary 都有对条数的限制(66536),我具体搜索了一下,office 2007和office2010 限制在104万左右,office 2003 为:65536

支持(0) 反对(0) symphony2010 | 园豆:99 (初学一级) | 2012-08-21 19:57

得找一个类库没有条数验证的

支持(0) 反对(0) symphony2010 | 园豆:99 (初学一级) | 2012-08-21 19:58

@symphony2010: 

是EXCEL限制了条数,放多了它打开也显示不了,除非你不用EXCEL格式的。

超过了条数可以分成多个sheet导出。

NPOI不错,不过只支持2003格式,office API数据量大了就很慢。

支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-21 21:20

刚有个项目在用NPOI,还是不错的

支持(0) 反对(0) joseph chong | 园豆:224 (菜鸟二级) | 2012-08-22 09:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册