2016-05-17 127 views
2

我目前正在嘗試使用c#interop編輯excel電子表格對象的單元格。我把它作爲一個對象插入word文檔中。在Word文檔中編輯Excel電子表格對象(C#Interop)

直到那裏我沒有成功地編程任何真正有效的東西。我可以選擇組件,但是我無法將其打開到版本,然後到達網格的單元格。

我使用自定義辦公功能區中的按鈕控件啓動編輯。這是我的方法:

public void EditTable(Office.IRibbonControl control) 
    { 
     Word.Application oWordApp = (Word.Application)Marshal.GetActiveObject("Word.Application"); 
     Word.Document oWordDoc = oWordApp.ActiveDocument; 

     Word.Bookmark ReqsBookmark = DocumentHelper.GetBookmark("test"); 

     ReqsBookmark.Select(); 
    } 

我知道訪問一個特定的對象與互操作的唯一方法是與書籤。

有沒有人知道如何做這樣的事情?

+0

輸入你自己試過的代碼片段。讓我們知道確切的要求,我們可以幫助您。總是縮小這個問題。請參閱[本](http://stackoverflow.com/help/mcve) – SSJGSS

回答

1

在Word中,Excel工作表(工作簿)被「包裝」在OLE控件中,該控件是InlineShapesShapes集合的成員。所以你需要你想使用的集合的AddOLEObject方法。

訪問OLE服務器(Excel)的對象模型是通過InlineShapeShapeOLEFormat屬性。所以你的代碼會像下面的示例一樣。

請注意,雖然您說這是一個VSTO項目,但您向我們展示的代碼不是VSTO。您正在啓動Word.Application的新實例,但VSTO加載項將在進程中運行。我的代碼是VSTO代碼,但肯定可以調整的其他情形...

{ 
    Word.Document doc = Globals.ThisAddIn.app.ActiveDocument; 
    object oRngTarget = Globals.ThisAddIn.app.Selection.Range; 
    //object oRngTarget = DocumentHelper.GetBookmark("test").Range; 
    object oOLEClass = "Excel.Sheet.12"; 
    object oFalse = false; 
    Word.InlineShape ils = doc.InlineShapes.AddOLEObject(ref oOLEClass, ref missing, ref missing, 
           ref missing, ref missing, ref missing, ref missing, ref oRngTarget); 
    Word.OLEFormat olef = ils.OLEFormat; 
    System.Globalization.CultureInfo oldCI= System.Threading.Thread.CurrentThread.CurrentCulture; 
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 

    Excel.Workbook wb = (Excel.Workbook)olef.Object; 
    Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1]; 

    try 
    { 
     ws.get_Range("A1").Value2 = "New category"; 
     ws.get_Range("B1").Value2 = 6.8; 
    } 
    catch (Exception ex) 
    { 
     System.Diagnostics.Debug.Print(ex.Message); 
    } 
    finally 
    { 
     ws = null; 
     wb = null; 
     ils = null; 
     doc = null; 
     System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; 
    } 
} 

要使用Word文檔中的表格以後的工作中,你基本上遵循同樣的原則:聲明和實例化一個InlineShape.OLEFormat對象,激活它,然後抹上olef.Object到Excel.Workbook:

olef.Activate(); 
Excel.Workbook wb = (Excel.Workbook)olef.Object; 
+0

謝謝@CindyMeister!我嘗試了你的解決方案,它運行良好,但它增加了一個新的電子表格。我的主要目標是編輯已存在於我的單詞模板文檔中的電子表格。如果你對此有任何其他線索,我會非常感激。 – Chefty

+1

@Chefty你打敗了我,但我編輯了我的答案與最後的信息... –

1

我終於成功得益於這個職位約modify an embedded Excel object inside a Word doc

這裏的C#方法,如果有人需要它第一天:

{ 
     Word.Document oWordDoc = Globals.ThisAddIn.Application.ActiveDocument; 
     Excel.Workbook oOLE = null; 
     Excel.Worksheet oSheet = null; 

     Word.InlineShapes ils = oWordDoc.InlineShapes; 

     ils[1].OLEFormat.Activate(); 
     oOLE = ils[1].OLEFormat.Object; 

     oSheet = oOLE.Worksheets[1]; 
     oSheet.get_Range("A1").Value = "I did it too!"; 
    } 

再次感謝@CindyMeister的回答,它幫助我瞭解它是如何工作的。