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

时间:2016-05-17 09:36:46

标签: c# excel ms-word vsto office-interop

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

直到我没有成功编程任何真正有用的东西。我可以选择该组件,但我无法将其打开到版本,然后到达网格的单元格。

我在自定义办公功能区中使用按钮控件来启动编辑。这是我的方法:

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访问特定对象的唯一方法是使用书签。

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

2 个答案:

答案 0 :(得分:1)

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

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

请注意,虽然您说这是VSTO项目,但您向我们展示的代码不是VSTO。您正在启动Word.Application的新实例,但VSTO加载项将在进程中运行。我的代码是VSTO代码,但当然可以针对其他情况进行调整......

Shape

要稍后使用Word文档中的电子表格,您基本上遵循相同的原则:声明并实例化{ 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; } } 对象,激活它,然后将InlineShape.OLEFormat转换为Excel.Workbook:

olef.Object

答案 1 :(得分: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的回答,它帮助我理解它是如何运作的。