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

在word文档中编辑Excel电子表格对象(C#Interop),c#,excel,ms-word,vsto,office-interop,C#,Excel,Ms Word,Vsto,Office Interop,我目前正在尝试使用c#interop编辑excel电子表格对象的单元格。我将其作为对象插入word文档中 在那之前,我没有成功地编写出任何真正有效的程序。我可以选择组件,但我无法打开它进行编辑,然后访问网格的单元格 我使用自定义office功能区中的按钮控件启动“编辑”。以下是我的方法: public void EditTable(Office.IRibbonControl control) { Word.Application oWordApp = (Word.Appl

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

在那之前,我没有成功地编写出任何真正有效的程序。我可以选择组件,但我无法打开它进行编辑,然后访问网格的单元格

我使用自定义office功能区中的按钮控件启动“编辑”。以下是我的方法:

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();
    }
我知道使用互操作访问特定对象的唯一方法是使用书签


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

在Word中,Excel工作表(工作簿)被“包装”在OLE控件中,该控件是
InlineShapes
Shapes
集合的成员。因此,您需要要使用的集合的
AddOLEObject
方法

可以通过
InlineShape
Shape
OLEFormat
属性访问OLE服务器(Excel)的对象模型。因此,您的代码类似于下面的示例

请注意,尽管您说这是一个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。工作簿:

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

多亏了这篇关于

如果有人有一天需要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!";
    }

再次感谢@Cindymister的回答,它帮助我理解了它的真正工作原理。

输入您自己尝试的代码片段。让我们知道确切的要求,我们可以帮助您。总是缩小问题的范围。参考