以下代码每执行一次,便在任务管理器里多一个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();
}
用以上代码虽然能退出进程,但是不会保存数据
try{
....
}finally{
Process[] ps=Process.GetProcessesByName("EXCEL");
for(ProcessInfo p in ps){
p.Kill();
}
}
无法保存数据!
@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方法
}
如果不怕增加一个DLL依赖的话,就用NPOI
自己折腾这个很是麻烦
发现这个dll 或者是别的applibrary 都有对条数的限制(66536),我具体搜索了一下,office 2007和office2010 限制在104万左右,office 2003 为:65536
得找一个类库没有条数验证的
@symphony2010:
是EXCEL限制了条数,放多了它打开也显示不了,除非你不用EXCEL格式的。
超过了条数可以分成多个sheet导出。
用NPOI不错,不过只支持2003格式,office API数据量大了就很慢。
刚有个项目在用NPOI,还是不错的