从 C# 启动 Excel 并在“保存”时将其关闭
Posted
技术标签:
【中文标题】从 C# 启动 Excel 并在“保存”时将其关闭【英文标题】:Launch Excel from C# and close it on "Save" 【发布时间】:2010-06-17 13:25:04 【问题描述】:我想使用 C# 和 Microsoft Excel 执行以下操作:
1 - 用户选择一个文件。
2 - 显示 Microsoft Excel 以编辑该文件。
3 - 只要用户单击 Excel 的“保存”按钮,Microsoft Excel 就会关闭。用户不必单击退出。
关于#3 的任何想法?
问候, 塞巴斯蒂安
【问题讨论】:
你问的是如何做基本的 Excel 互操作还是只做 #3? 我不是 100% 确定这是一个很好的工作流程。如果我(作为您的用户)执行 1 和 2 并开始编辑文件会发生什么。我在完全完成编辑之前被召集参加会议,但我认为“我可能会离开一段时间,最好保存一下”。我愿意,巴姆! Excel 关闭 - 这根本不是我想要的。 【参考方案1】:您可以让 Excel 宏处理 BeforeSave
事件,取消用户发起的保存,将文件保存在宏中,保存后您将在宏中,然后可以关闭 Excel。
所以可能是这样的:
Private Sub myBeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not HandlingBeforeSave Then
HandlingBeforeSave = True
Cancel = True
Me.Save
Application.Quit
End If
End Sub
This kb 文章描述了从 C# 向 Excel 添加宏。
【讨论】:
这可能会引发 ***。 @SLaks:为什么和哪一点?我原以为宏代码会没问题,他可以在托管代码启动并插入宏后立即关闭对 Excel 的任何引用,所以我会认为没问题?Me.Save
应该引发BeforeSave
事件。顺便说一句,您也可以在托管代码中执行此操作。 (没有宏)
@SLaks:是的,没想到,需要检查方法的递归入口。【参考方案2】:
您也可以使用 FileSystemWatcher 类来赶上保存时间,并在其上杀死 Excel。当然,如果您知道用户必须保存文件的位置。
【讨论】:
【参考方案3】:我的 Interop 有点生锈,但我认为 Excel 在保存文件时会触发一个事件。
但是,我认为这是一个非常危险的功能,因为根据我的经验,互操作往往有点不确定:)。想象一下,当用户在您的应用程序之外使用 Excel 时,如果保存处理程序处于活动状态会发生什么 - 他点击保存,Excel 消失!
【讨论】:
【参考方案4】:您可以将 VSTO 用于 Excel。使您能够针对 Excel 对象模型编写 C# 代码。应该能够做你想做的事。
不过,SWeko 有一个很好的观点。您将需要弄清楚如何确定它是否应该在保存时关闭。如果不是每次保存都会关闭 Excel。
【讨论】:
【参考方案5】:您可以处理Workbook
的BeforeSave
事件,然后运行一个计时器,每十秒检查一次Saved
属性,如果是true
,则关闭Excel。
关闭 Excel 时应小心谨慎,因为如果您关闭他们正在处理的(不同的)文件,您的用户会非常生气。
【讨论】:
【参考方案6】:我不确定这是否有帮助,但我认为它接近您的需要 http://www.c-sharpcorner.com/UploadFile/jodonnell/Excel2003fromCSharp12022005021735AM/Excel2003fromCSharp.aspx
【讨论】:
【参考方案7】:我遇到了类似的问题,但是我等到用户关闭 Excel。在Excel automation: Close event missing 上查看我的“解决方案”。
我发现当用户点击“保存”时关闭 Excel 有点不直观。如果您坚持“保存”事件,您可能希望在用户保存后立即观察文件元数据的变化(例如,最后修改日期)。
【讨论】:
以上是关于从 C# 启动 Excel 并在“保存”时将其关闭的主要内容,如果未能解决你的问题,请参考以下文章
html 在模态中打开YouTube视频,并在关闭模态时将其停止
Angular,body添加css溢出:如果模态打开则隐藏并在关闭时将其删除?
在使用 RxSwift 和 mvvm 发出 moya 请求时添加微调器,并在用户收到响应时将其关闭
每当我单击一个开关时,我都需要创建一个新对象,并在关闭时将其删除
javascript [在页面滚动上设置动画粘贴CTA]这将在滚动时为点击元素设置动画,并在用户点击时将其关闭。 #javascript #css #sitewre