起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: dupit

[结][急:DispatchHelper怎么使用啊?帮我看看这个如何写?[请求]**

[复制链接]
 楼主| 发表于 2008-2-20 12:14:20 | 显示全部楼层
alang同学,再帮帮忙啊,看看saveas如何写,或者saved属性怎么用。就差这一步了
回复 支持 反对

使用道具 举报

发表于 2008-2-20 13:54:17 | 显示全部楼层
SaveCopyAs 不行吗?
关键是我对Excel一点都不熟悉啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-20 14:11:51 | 显示全部楼层
SaveCopyAs可以的,但是退出的时候会提示要保存的。因为SaveCopyAs存的是副本。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-20 14:42:17 | 显示全部楼层

app.PropertyPut('DisplayAlerts', [False]);即可。

又有新问题了。我看你们所有的回答,最后都是一句(ExcelApp as System.IDisposable).dispose;就释放了,可是我运行结束的时间,只要程序还在运行,内存中excel就一直存在,只有整个程序完全退出,另存的exel文件才能打开。是不是还有什么资源未释放。
回复 支持 反对

使用道具 举报

发表于 2008-2-20 14:42:55 | 显示全部楼层
请提供你的完整代码给我看看
回复 支持 反对

使用道具 举报

发表于 2008-2-20 14:48:31 | 显示全部楼层
不用提供了,你还是到m$网站找找看吧
Saved
Boolean

获取或设置工作簿的已保存状态。如果用户已对工作簿的内容或结构做了修改,则 Saved 属性为 False。试图关闭工作簿或者退出 Excel 将导致出现一个警报,提示您保存此工作簿(除非将 Application.DisplayAlerts 属性设置为 False)。如果在代码中将 Saved 属性值设置为 True,则 Excel 将工作簿视为已被保存,而不再提示您保存工作簿。
回复 支持 反对

使用道具 举报

发表于 2008-2-20 14:49:05 | 显示全部楼层
Save
保存工作簿。如果工作簿从未保存过,则 Excel 会将其保存在当前文件夹(项目的 \bin 目录)中,并使用创建该工作簿时指定的名称。如要指定路径,则应调用 SaveAs 方法。以下代码保存所有打开的工作簿:

' Visual Basic
Dim wb As Excel.Workbook
For Each wb in ThisApplication.Workbooks
    wb.Save
Next wb

// C#
foreach(Excel.Workbook wb in ThisApplication.Workbooks)
{
    wb.Save();
}
SaveAs
SaveAs 比 Save 方法更为复杂。此方法使您可以保存指定的工作簿,并可以选择指定名称、文件格式、密码、访问模式等等。以下代码以 XML 格式将当前工作簿保存到指定位置:

' Visual Basic
ThisApplication.ActiveWorkbook.SaveAs("C:\MyWorkbook.xml", _
    FileFormat:=Excel.XlFileFormat.xlXMLSpreadsheet)

// C#
ThisApplication.ActiveWorkbook.SaveAs(@"C:\MyWorkbook.xml",
    Excel.XlFileFormat.xlXMLSpreadsheet,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,
     Type.Missing, Type.Missing, Type.Missing, Type.Missing);
提示   以某些格式保存时需要进行交互,因此在调用 SaveAs 方法前,可能需要将 Application.DisplayAlerts 属性设置为 False。当 Application.DisplayAlerts 设置为 False 时,将使用默认设置。例如,将工作表保存为 XML 格式时,Excel 将提醒您无法将 VBA 项目与工作簿一起保存。将 DisplayAlerts 属性设置为 False 可取消此警告。
SaveCopyAs
将工作簿的副本保存到文件,但不会在内存中修改打开的工作簿。如果要在不修改工作簿位置的情况下创建一个备份副本,可使用此方法。

' Visual Basic
ThisApplication.ActiveWorkbook.SaveCopyAs("C:\Test.xls")

// C#
ThisApplication.ActiveWorkbook.SaveCopyAs(@"C:\Test.xls");
注意   以交互方式取消任何用于保存或复制工作簿的方法都会在代码中引发运行时错误。例如,如果过程调用了 SaveAs 方法,但未禁用 Excel 的提示,并且用户在得到提示时单击了“取消”,则 Excel 引发一个运行时错误返回给代码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-20 15:20:40 | 显示全部楼层
我现在的代码是:

  doc.InvokeMethod('SaveCopyAs',[AFileName]);
    app.PropertyPut('DisplayAlerts', [False]);
    docs.InvokeMethod('Close', []);
    app.InvokeMethod('Quit', []);
    (ExcelApp as System.IDisposable).dispose;

可这样执行结束之后,excel还一直在进程中。此时就无法打开刚才另存的XLS文件,除非整个程序先退出。你们一直在说(ExcelApp as System.IDisposable).dispose,都没这个问题吗?也许是还有某些资源需要释放吧?
回复 支持 反对

使用道具 举报

发表于 2008-2-20 15:23:59 | 显示全部楼层
中间生成的每一个DispatchHelper都需要执行 (ExcelApp as System.IDisposable).dispose;

例如:
(App as System.IDisposable).dispose;
(docs as System.IDisposable).dispose;
(doc1 as System.IDisposable).dispose;
。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-20 15:44:59 | 显示全部楼层
有错误,错误信息是不能将System.DispatchHelper作为System.IDisposable处理
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 09:58 , Processed in 0.046855 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表