在Word文档中编辑Excel电子表格对象(C#Interop)

我目前正在尝试用c#interop编辑Excel电子表格对象的单元格。 我把它作为一个对象插入word文档中。

直到那里我没有成功地编程任何真正有效的东西。 我能够select组件,但我不能打开它的版本,然后到达网格的单元格。

我使用自定义办公function区中的button控件启动编辑。 这是我的方法:

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(); } 

我知道用interop访问特定对象的唯一方法是使用书签。

有没有人知道如何做这样的事情?

我终于成功感谢这篇文章, 修改Word文档内embedded的Excel对象

这是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再次感谢你的回答,它帮助我理解它是如何工作的。

在Word中,Excel工作表(工作簿)是“包装”在InlineShapesShapes集合的成员的OLE控件中。 所以你需要你想使用的集合的AddOLEObject方法。

访问OLE服务器(Excel)的对象模型是通过InlineShapeShapeOLEFormat属性。 所以你的代码就像下面的例子。

请注意,尽pipe您说这是一个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;