社区
C#
帖子详情
求彻底释放Excel的方法
wangfeng0215
2006-02-06 11:16:52
如题
...全文
449
21
打赏
收藏
求彻底释放Excel的方法
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wangfeng0215
2006-02-10
打赏
举报
回复
顶
wangfeng0215
2006-02-09
打赏
举报
回复
up
wangfeng0215
2006-02-08
打赏
举报
回复
我使的是office2000,这个问题没法解决了吗
ChengKing
2006-02-07
打赏
举报
回复
在Office2003中怎样调用,Excel,word等程序呢?!需要添加什么引用呢??!
Excel常见问题及其操作:
http://blog.csdn.net/ChengKing/archive/2005/11/29/539514.aspx
wangfeng0215
2006-02-07
打赏
举报
回复
各位帮帮忙亚
挨打要站稳
2006-02-07
打赏
举报
回复
在Office2003中怎样调用,Excel,word等程序呢?!需要添加什么引用呢??!
songyuan
2006-02-07
打赏
举报
回复
学习
wangfeng0215
2006-02-07
打赏
举报
回复
office2003中的Open参数都是什么意思呀?我想升级到2003
机器人
2006-02-06
打赏
举报
回复
_Excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(_Excel);
GC.Collect();
以上三句就可以了。其他都是多余。
henryfan1
2006-02-06
打赏
举报
回复
我也遇到这样的问题.
顺便也把代码贴出来希望有人能帮忙看下问题在那里,以下代码在ASP.NET下不能释放.
public class ExcelDocument:IDisposable
{
Excel.Application _Excel = new Excel.ApplicationClass();
Excel.Workbook _Book = null;
public ExcelDocument()
{
//
// TODO: 在此处添加构造函数逻辑
//
_Book =_Excel.Workbooks.Add(Type.Missing);
}
private PrintDocument mDataTemplate = new PrintDocument();
public PrintDocument DataTemplate
{
get
{
return mDataTemplate;
}
set
{
mDataTemplate = value;
}
}
private System.Data.DataTable mDataSource = null;
public System.Data.DataTable DataSource
{
get
{
return mDataSource;
}
set
{
mDataSource = value;
}
}
public void Execute()
{
if(DataTemplate != null)
{
_ActiveSheet = (Worksheet)_Book.Sheets.get_Item(1);
if(DataSource != null)
DataTemplate.DataSource = DataSource.DefaultView ;
DataTemplate.ItemBound += new EventItemBound(Template_ItemBound) ;
DataTemplate.BindData();
}
}
public void Save(string file)
{
_Book.SaveAs(file,Excel.XlFileFormat.xlXMLSpreadsheet,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
#region IDisposable 成员
private bool disposed = false;
~ExcelDocument()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if(!this.disposed)
{
if(disposing)
{
}
_Book.Close(false, Type.Missing, Type.Missing);
_Excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(_Book);
System.Runtime.InteropServices.Marshal.ReleaseComObject(_Excel);
_Book = null;
_Excel = null;
}
disposed = true;
}
#endregion
private void Template_ItemBound(object source,ExportBases.ItemBoundArgs e)
{
foreach(ExportBases.CellItem cell in e.Row.Cells)
{
SetRangeStyle(_ActiveSheet.get_Range(cell.GetCellAddress(e.RowIndex),Type.Missing),cell);
_ActiveSheet.get_Range(cell.GetCellAddress(e.RowIndex),Type.Missing).Value2 = cell.GetValue(e);
}
}
private Worksheet _ActiveSheet;
public static void Export(PrintDocument document,string file)
{
using(ExcelDocument write = new ExcelDocument() )
{
write.DataTemplate = document;
write.Execute();
write.Save(file);
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
kqh0319
2006-02-06
打赏
举报
回复
樓上正解
lidong6
2006-02-06
打赏
举报
回复
ActiveWorkbook.close ;
ExcelApp.quit;
ExcelApp=null;
lidong6
2006-02-06
打赏
举报
回复
ExcelApp.quit
wangfeng0215
2006-02-06
打赏
举报
回复
都关了
长江支流
2006-02-06
打赏
举报
回复
private void CallExcel()
{
//这个地方调用楼上读写Excel的方法就可以了
GC.Collect();
}
因为GC不会回收他所在的部分,所以,需要专门再用个过程调用 再释放
楼主可以下载MIS金质打印通(EXCEL专版)试试。
长江支流
2006-02-06
打赏
举报
回复
private void CallExcel()
{
}
sunyou
2006-02-06
打赏
举报
回复
好像是office2000的问题,新版office的使用一下三句:
_Excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(_Excel);
GC.Collect();
详细参考http://blog.csdn.net/sunyou/archive/2005/08/22/461133.aspx
luoboqingcai
2006-02-06
打赏
举报
回复
然后再用上面的三句话。
哈~
luoboqingcai
2006-02-06
打赏
举报
回复
把所开启的所有的对象都关闭。
sheet等等。
机器人
2006-02-06
打赏
举报
回复
_Excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(_Excel);
_Excel = null; // <== 比如这句,加上之后,GC就不会工作,反而失效。
GC.Collect();
加载更多回复(1)
.net中清除
EXCEL
进程最有效的
方法
本文介绍了.net中清除
EXCEL
进程最有效的
方法
:对
excel
操作做成一个函数,然后调用此函数。在函数中调用GC.Collect();无用,因为GC不回收调用自己的那一段代码块。或者在函数的下面调用GC.Collect();语句。你会发现...
封装的Excle反射类
* 创 建 人:明振居士 ... * 创建时间:2011-06-01 * 最后修改时间:2011-08-02 ... //
彻底
释放
****************************************************************************************************/
excel
技巧精选
Excel
使 用 技 巧 集 锦 1. 快速移动/复制单元格 先选定单元格,然后移动鼠标指针到单元格边框上,按下鼠标左键并拖动到新位置,然后
释放
按键即可移动。若要复制单元格,则在
释放
鼠标之前按下Ctrl即可。 2. 快速...
DataGridViewEx扩展之合计行
* 导出内容支持自定义的:Title List<string> Header List<string> Footer,支持在设计时值的设定,窗口关闭时
Excel
资源自动
彻底
释放
* 4、可以自己任意设定那些列显示及不显示,通过调用
方法
SetColumnVisible()...
明振居士的DataGridViewEx扩展2012.2.24版本
* 导出内容支持自定义的:Title List<string> Header List<string> Footer,支持在设计时值的设定,窗口关闭时
Excel
资源自动
彻底
释放
* 4、可以自己任意设定那些列显示及不显示,通过调用
方法
SetColumnVisible()...
C#
110,537
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章