2010-06-17 661 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不知多少。如果您堅持「保存」事件,您可能希望在用戶保存後立即觀看文件元數據更改(例如,上次修改日期)。