2010-06-17 662 views
4

我想用C#和Microsoft Excel执行以下操作:从C#启动Excel并关闭“保存”

1 - 用户选择一个文件。

2 - Micorosft Excel显示为编辑该文件。

3 - 只要用户点击Excel的“保存”按钮,Microsoft Excel应该关闭。用户不必点击退出。

关于#3的任何想法?

问候, 塞巴斯蒂安

+0

你问如何做基本的Excel互操作或只#3? – SLaks 2010-06-17 13:47:04

+6

我不是100%确定这是一个很好的工作流程。如果我(作为用户)执行1&2并开始编辑文件,会发生什么情况。在完成我的编辑之前,我会召集会议,但我认为“我可能会走一段时间,更好地保存”。我和巴姆! Excel关闭 - 不是我想要的。 – ChrisF 2010-06-17 13:49:42

回答

0

此外,您可以使用FileSystemWatcher类来赶上保存的时刻,并杀死它的Excel。当然,如果你知道用户必须保存文件的位置。

0

你可以处理WorkbookBeforeSave事件,然后运行检查Saved物业每十秒钟,并关闭Excel中,如果它是true一个计时器。

关闭Excel时应该小心,因为如果关闭他们正在处理的(不同的)文件,用户将非常生气。

0

My Interop有点生疏,但我认为有一个事件发生在Excel保存文件时触发。

但是,我认为这是一个非常危险的功能实现,因为根据我的经验,互操作性往往是有点不确定性:)。想象一下,如果当用户在应用程序之外使用Excel时保存处理程序处于活动状态,会发生什么情况 - 他点击保存,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中。

+0

这可能会抛出一个StackOverflow。 – SLaks 2010-06-17 13:45:19

+0

@SLaks:为什么和它的哪一点?我会认为宏代码是可以的,并且一旦它开始并且宏被插入,他就可以从托管代码中关闭对Excel的任何引用,所以我会认为它会好吗? – 2010-06-17 14:05:19

+0

'Me.Save'应该提高'BeforeSave'事件。顺便说一下,您也可以在托管代码中执行此操作。 (没有宏) – SLaks 2010-06-17 14:06:00

0

您可以使用VSTO for Excel。使您能够针对Excel对象模型编写C#代码。应该能够做到你想要的。

虽然,SWeko有一个好点。您需要弄清楚如何确定它是否应该在保存时关闭。如果你不是每次保存都会关闭Excel。

0

我有一个类似的问题,但我等到用户关闭Excel中。在Excel automation: Close event missing处查看我的“解决方案”。

我发现它在用户点击“保存”时关闭excel不知多少。如果您坚持“保存”事件,您可能希望在用户保存后立即观看文件元数据更改(例如,上次修改日期)。