在word文档中编辑Excel电子表格对象(C#Interop)
我目前正在尝试使用c#interop编辑excel电子表格对象的单元格。我将其作为对象插入word文档中 在那之前,我没有成功地编写出任何真正有效的程序。我可以选择组件,但我无法打开它进行编辑,然后访问网格的单元格 我使用自定义office功能区中的按钮控件启动“编辑”。以下是我的方法:在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
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的回答,它帮助我理解了它的真正工作原理。输入您自己尝试的代码片段。让我们知道确切的要求,我们可以帮助您。总是缩小问题的范围。参考