2014-06-20 230 views
0

我有一個2010 Excel功能區加載項。當你按下按鈕時,它只需將一些數據寫入Excel應用程序。爲了寫這個數據我需要獲得活動工作表。爲了獲得活動工作表,我需要activeWorkBook。我可以得到xlApp罰款xlApp.ActiveWorkbook返回null

xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 

它檢索xlApp罰款,但每當我試圖讓活動工作簿返回null。無論。除非我重新啓動電腦。然後,它的工作,但只有第一次。以下是上下文中的整個代碼塊。我想知道如何解決xlApp.ActiveWorkBook爲空。這樣我可以獲得活動工作表。然後將數據寫入活動工作表。

public void sendData() 
    { 
     Excel.Application xlApp = null; 
     Excel.Workbook xlWorkBook = null; 
     Excel.Workbooks xlWorkBooks = null; 
     Excel.Worksheet xlWorkSheet = null; 
     object misValue = System.Reflection.Missing.Value; 

     try 
     { 
      xlApp = new Excel.Application(); 
      //xlWorkBooks = xlApp.Workbooks; 
      //xlWorkBook = xlWorkBooks.Add(Properties.Settings.Default.FileToSend); 
      //xlWorkSheet = xlWorkBook.Sheets[1]; 

      xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 
      xlWorkBook = (Excel.Workbook)xlApp.ActiveWorkbook; 
      xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet; 
     } 
     catch (Exception ex) 
     { 
      // handle error... 
     } 
     finally 
     { 
      if (xlWorkSheet != null) 
       Marshal.ReleaseComObject(xlWorkSheet); 

      if (xlWorkBook != null) 
       Marshal.ReleaseComObject(xlWorkBook); 

      if (xlWorkBooks != null) 
       Marshal.ReleaseComObject(xlWorkBooks); 

      if (xlApp != null) 
       Marshal.ReleaseComObject(xlApp); 
     } 

在此先感謝!

+0

所以它檢索xlApp就好了。但是xlApp.ActiveWorkBook由於某種原因而爲空。我更新了我的問題^ – Benny

+0

我不太瞭解這個問題,但爲什麼要調用'xlApp = new Excel.Application();'?該行似乎只是讓您的以下行不太可能按預期工作。正如@Govert所指出的,你的問題很可能出在Marshal.GetActiveObject這個「獲得一個正在運行的實例......」你無法控制你得到的實例,並且使用Interop服務很容易獲得多個不可見的Excel應用程序在背景中。 –

+0

我忘了發表評論,我只是嘗試兩個seperatley,並忘記評論它。當我調試它的時候,我的添加內容打開並且出現了excel的實例,並且似乎在抓取那個,因爲沒有打開其他實例。所以我不知道它在做什麼。我從字面上複製並從另一個文件中粘貼了它,現在這個...我雖然錯過了一個引用,但我不認爲我是。 – Benny

回答

1

您可能會通過致電GetActiveObject來獲取錯誤的Excel實例。使用傳入您的COM加載項的OnConnection的應用程序引用(或者您的功能區代碼被引導)。

如果您使用Excel-DNA框架來創建您的託管Excel加載項,那麼您可以通過調用ExcelDnaUtil.Application來獲得正確的Application對象。