2016-11-18 61 views
2

我正在開發一個使用Visual Studio Tools for Office,VSTO的MSExcel插件。無論如何,我幾乎完成了它,直到我發現並遇到問題。VSTO ThisWorkbook屬性

目前我的C#代碼,利用ActiveWorkbook屬性。但是我發現當另一個Excel實例打開並且特定實例獲得焦點時,我的代碼將在該活動工作簿上運行。

請參閱我下面的代碼:

public void AddWorkSheet(string wsName, Excel.XlSheetVisibility visibility) 
    { 

     Excel.Workbook currentWorkBook =Globals.ThisAddIn.Application.ActiveWorkbook; 
     if (!IsSheetExists(wsName, currentWorkBook)) 
     { 
      Excel.Worksheet newWorkSheet; 
      newWorkSheet = currentWorkBook.Sheets.Add(); 
      newWorkSheet.Visible = visibility; 
      newWorkSheet.Name = wsName; 
      Marshal.ReleaseComObject(newWorkSheet); 
     } 
     Marshal.ReleaseComObject(currentWorkBook); 
    } 

我想發現是我可以在工作簿設置爲一個特定的工作簿,無論它是否處於活動狀態。

回答

-1

正如您在您的問題中提到的,ActiveWorkbook爲您提供了當前已激活的工作簿。鑑於這個名字,沒有什麼意外的。

如果要將工作表添加到特定工作簿,您顯然應該使用固定的工作簿參考。有幾個選項可以使用固定的工作簿參考。最簡單的方法是,如果您知道名稱,則使用其名稱來獲取該特定工作簿。

有這麼多的方式來引用的工作簿,只是谷歌了一下,你會得到這樣的例子:

http://www.techrepublic.com/blog/10-things/10-ways-to-reference-excel-workbooks-and-sheets-using-vba/(這是VBA,但如果你有麻煩移植,爲C#明確提出新問題,以你的需求)

+0

嗨!謝謝你回答我的問題。我知道VBA能夠使用指定的文件路徑更改參考工作簿,因此如果我添加新的工作表,而不管它是否處於活動狀態。我把它放在首要位置,但我不能拿出正確的代碼來說明如何在VSTO的C#中添加這樣的代碼。謝謝。 :) –