我已經寫在C#這在Excel電子表格中創建自定義文檔屬性的應用程序的當前工作簿對象,我對這個這需要在一個工作簿對象的功能...獲得在C#
然而,實際上獲取當前的Workbook對象被證明是非常煩人的,我使用ExcelDNA來添加功能,但是,我似乎無法將我的函數傳遞給有效的Workbook COM對象。
我已經寫在C#這在Excel電子表格中創建自定義文檔屬性的應用程序的當前工作簿對象,我對這個這需要在一個工作簿對象的功能...獲得在C#
然而,實際上獲取當前的Workbook對象被證明是非常煩人的,我使用ExcelDNA來添加功能,但是,我似乎無法將我的函數傳遞給有效的Workbook COM對象。
這是我目前的方式這樣做似乎工作得很好
using Excel = Microsoft.Office.Interop.Excel;
然後你得到活動工作簿
//Gets Excel and gets Activeworkbook and worksheet
Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
oXL = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
oXL.Visible = true;
oWB = (Excel.Workbook)oXL.ActiveWorkbook;
docProps = oWB.CustomDocumentProperties
那我就試試你有什麼,看看它是如何工作
希望這有助於
如果你需要找到activeworkbook與C#
,如果您使用的是Office互操作,你可以嘗試這樣的代碼:
(Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;
[Source]
@AdamNumberFive,是它。您可以使用excel應用程序實例來查看ActiveWorkbook屬性,但可以使用excel COM對象做幾乎相同的事情。 –
這與每個時間都有效,不像'Marshal.GetActiveObject(「Excel.Application」);'有時會激發Excel的新實例 –
由於@Govert在他的評論上面解釋:
using Excel = Microsoft.Office.Interop.Excel;
using ExcelDna.Integration;
// Get the correct application instance
Excel.Application xlapp = (Excel.Application)ExcelDnaUtil.Application;
// Get active workbook
Excel.Workbook wbook = xlapp.ActiveWorkbook;
我正在爲xlapp獲得NullReference。有什麼變化嗎?這是否仍然有效? – regmi
GetActiveObject()看起來在運行對象表(ROT),併爲您提供最後一個打開的Excel實例,它可能不會與頂級Z命令excel窗口相對應。
循環遍歷Z順序並找到匹配的工作簿。
EXCELLENT。你先生是我的英雄,這已經解決了我遇到的一個相當煩人的問題,我需要一雙新的眼睛!非常感激。 –
是啊沒問題如果你有任何問題讓我知道,我一直在用Excel做很多事情。我希望這可以幫助你!!!! –
從Excel-DNA中,您需要調用ExcelDnaUtil.Application以確保獲得運行的Excel進程的Application對象,而不是Marshal.GetActiveObject將返回的最後一個激活的Excel實例。 – Govert