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

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

我目前正在尝试使用 C# 互操作编辑 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 控件中,该控件是 InlineShapesShapes 集合的成员。因此,您需要要使用的集合的 AddOLEObject 方法。

通过 InlineShapeShapeOLEFormat 属性访问 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.Workbook:

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

关于c# - 在 Word 文档中编辑 Excel 电子表格对象(C# Interop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37272419/

相关文章:

java - 根据一列读取excel数据并提供给java类

ms-word - Word 2007 架构库存储在哪里?

javascript - 如何通过WebDav打开包含某些字符的文档?

c# - 如何通过 Interop (C#) 向 Word 文档添加结构化内容?

c# - 从隔离存储中将视频从手机传输出去

c# - 创建嵌入式mysql数据库

vba - 计算函数在 vba 中是否正常工作

Java循环遍历文件将csv转换为xls

c# - 如何通过 C# 在 Mysql 中插入日期/时间?

c# - 泛型类型的隐式运算符