2012-04-24 66 views
3

使用Excel Interop API自動執行excel時,我可以使用方法Range.Find輕鬆執行範圍搜索。我正在通過查找的LookIn,LookAt,SearchOrder,SearchDirection和MatchCase選項。如MSDN文檔所述,將傳入此方法的值保留到用戶設置中,所以下次用戶打開查找表單時,將會選擇在Range.Find方法中使用的選項。Excel Range.Find和維護用戶選擇的查找選項

我需要在編程查找前後保留查找選項的值。因此,我想捕獲當前的查找選項,然後執行Range.Find,然後將查找選項設置回搜索前設置的選項。但是,我沒有看到查找選項是可公開訪問的。任何想法如何獲得這些?

我基本上希望檢索LookIn,LookAt,SearchOrder,SearchDirection和MatchCase的當前查找選項值。

更新 我能找到到目前爲止,最有趣的事情是,你可以訪問Excel應用程序對話框 - Dialogs Interface。因此,在這裏,我可以訪問FormulaFind對話框,該對話框與「查找和替換」對話框略有不同,但可能會導致我正在查找的一些屬性。我沒有任何運氣,但也許有一種方法可以通過此表單使用反射來訪問屬性。我會繼續嘗試這個。

// xlDialogFormulaFind, xlDialogFormulaReplace 
Excel.Dialog dialog = this.Application.Dialogs.Item[Excel.XlBuiltInDialog.xlDialogFormulaFind]; 
+1

我在這裏發現了一個類似的線程,它不能解決這個問題:http://www.mrexcel.com/forum/showthread.php?t=520336,雖然提出了編寫自己的find方法的想法我寧願不這樣做)。 – mservidio 2012-04-24 18:34:13

+1

我並不確定,但我認爲它不像您提到的那樣是公開的。也許你可以創建一個名爲FindOptions的類並根據用戶的輸入設置變量。然後,每次他們進行新搜索時,您都可以創建一個FindOptions實例,設置選項並將其放入一堆「查找」中,以便恢復到之前的任何搜索條件。是不是這樣的問題? – 2012-04-24 20:11:42

+0

我看到你在說什麼,但問題在於找到當前值。我可以創建一個FindOptions類來保存這些值,但是,我需要從某處設置這些值。我需要找到我可以訪問當前查找選項值的位置。你將如何設置FindOptions類中的屬性就是我在...? – mservidio 2012-04-24 20:21:39

回答

0

嗯,我不知道你是否會考慮這種方法,但我會在這裏給一個鏡頭,以防萬一它可能有幫助。

我會做的是,我會創建一個註冊表鍵,保存您想要堅持的值。如果沒有拋出異常,我可以調用RegistryKey.GetValue(valuename)來檢索值。

只要該註冊表項保持不變,並且您有足夠的權限訪問註冊表項,則您應該始終能夠獲得相同的值。

希望我們真的可以在這裏使用應用程序設置,這將使它更容易,但是,正如您可能已經知道的那樣,根據this article,vsto加載項不喜歡它。

您不能在託管.NET Framework的非託管應用程序中使用應用程序設置。在Visual Studio加載項,Microsoft Office的C++, Internet Explorer或Microsoft Outlook加載項和項目的控制託管等環境中,設置將不起作用 。

希望這會有所幫助。