Excel在.Net下驻留内存的解决方法
发布网友
发布时间:2022-04-30 04:07
我来回答
共1个回答
热心网友
时间:2023-10-11 08:42
Excel在.Net下驻留内存的解决方法
这段时间在VS 2003 的WebForm 方式下对Excel 进行操作,遇到一个最为头疼的问题就是对Excel操作完毕后Excel不能够正常关闭,系统退出后,Excel总是驻留在内存中。但是这段代码放到WinForm的程序中又没有问题。在网上进行了查找也没有找到有效可行的办法。经过无数次的尝试,终于解决如下:
原来书写如下:
以下是引用片段:
private Excel.Application m_app;
private Excel.Workbook m_workbook;
this.m_app = new Excel.ApplicationClass();
this.m_app.DisplayAlerts = false;
this.m_workbook = this.m_app.Workbooks.Open(sFilePath, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value );
修改后如下:
以下是引用片段:
private Excel.Application m_app;
private Excel.Workbooks m_workbooks;
private Excel.Workbook m_workbook;
this.m_app = new Excel.ApplicationClass();
this.m_app.DisplayAlerts = false;
m_workbooks = this.m_app.Workbooks;
this.m_workbook = this.m_workbooks.Open(sFilePath, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value );
同样对Sheet的操作如下
修改前如下:
以下是引用片段:
Excel._Worksheet worksheet1 = null;
worksheet1 = (Excel._Worksheet) this.m_workbook.Worksheets.get_Item(sSheetName);
修改后如下:
Excel.Sheets sheets = null ;
Excel._Worksheet worksheet1 = null;
sheets = this.m_workbook.Worksheets;
worksheet1 = (Excel._Worksheet) sheets.get_Item(sSheetName);
发现区别了么?原来Workbooks,Worksheets这两个类没有被实例化就直接使用了,造成该类不能够被回收。最终造成Excel在内存的驻留。
最终以如下方式释放。
以下是引用片段:
private void ReleaseAllRef(Object obj)
{
try
{
if (obj != null )
{
while (Marshal.ReleaseComObject(obj) > 1);
}
}
finally
{
obj = null;
}
}
private void Release()
{
if (m_app != null )
{
m_app.Quit() ;
}
ReleaseAllRef(m_workbook) ;
m_workbook = null ;
ReleaseAllRef(m_workbooks) ;
m_workbooks = null ;
ReleaseAllRef(m_app) ;
m_app = null ;
System.GC.Collect() ;
}
c#.net中怎么关闭excel进程
楼主,建议百度下C#调用excel文件,其实跟其他遇到读写excel文件一样,打开了就必须关闭退出,有始有终,进程自然就会退出~~~,往往再调试调用excel文件的代码时,中途退出调试会造成很多excel进程未关闭~~~···
如何在vb.net中将一个已存在的excel文件保存在资源文件中 然后在将其...
2、Fundamental frequency表示基频的意思,但是我该选多大呢?怎么选?Fundamental (60Hz)=0.0471,这又是什么意思?
.NET里面引用问题!
你说生成是指编译吧?你指添加这个几个是不够的,还需要添加Excel自带的一个DLL,我记得叫 Excel.dll
.net 导出到Excel 超出Excel最大数据量怎么办
先判断GridView的记录总数,如超过,则分多次导出,未超出,一次导出。实现过程中,要采取生成副表的方法。
在.NET Core(C#)中使用EPPlus.Core导出Excel文档
在.NET Core(C#)中使用EPPlus.Core导出Excel文档,首先需要完成安装步骤。直接通过NuGet进行安装,操作简便快捷。EPPlus.Core提供多种方法进行Excel文档导出,本文将聚焦于最为简洁且代码量最小的实现方式。这一方法仅需完成以下步骤:定义一个实体类,以承载所需数据。举个例子,假设我们定义了一个名为"...
我用visual C#.NET打开一个excel,它显示为可读文件,如何使打开的文件为...
我也正在做这个, 下面是我写的导入方法,传入路径,返回dataset ,已经实现。希望对你有帮助。public DataSet ImportExcel(string fileName){ //判断是否安装EXCEL Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();if (xlApp == null){ Page...
VB.net 设置EXCEL文件的格式,执行速度太慢
建一个文件,把格式都搞好,然后导出时用 workbooks.add(path)再填写数据,这样格式现成的了,还有一个方法,录个宏,格式刷,挡刷的代码试试.
EXCEL打不开,提示0x65039e14 指令引用的 0x0206bo4c 内存。该内存不能...
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1 然后 回车。然后让他运行完,应该就可能解决。4 最近电脑中毒、安装了不稳定的软件、等,建议全盘杀毒,卸了那个引发问题的软件,重新安装其他 版本,就可能解决. 再不行,重新装过系统就ok.5 电脑机箱里面内存条进灰尘,拆开...
你好。你用什么方法解决掉vb运行后进程里仍有excel
需要编写代码删除excel进程,如果是vb.net,可调用如下过程 Public Sub EraseExcel()Dim pTemp As System.Diagnostics.Process()pTemp = System.Diagnostics.Process.GetProcesses()Dim pTempProcess As System.Diagnostics.Process For Each pTempProcess In pTemp Dim sProcessName As String = pTempProcess....
excel打开时显示“0x30331d24”指令引用的“0x00005022”内存,该内存...
内存不能为 read 问题的简单解决办法 一、硬件的可能性是比较小的,如果是硬件,那就应该是内存条跟主机不兼容的问题导致的 如果能排除硬件上的原因(内存条不兼容,更换内存。内存条松动或积累灰尘,重新拔插并清理灰尘)往下看:二、系统或其它软件引起的,可用下述方法处理:系统本身有问题,及时安装官方...