none
C#如何控制在word文档中插入一个excel对象 RRS feed

答案

  • 請看這篇文章,

    在word中控制excel表格


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2012年2月3日 4:36
  • 先参考一下我的代码,实现的是插入整个excel文件。当然文件是事先存在的。插入空白的话,只需要将下面的代码中的filename参数改为oMissing就可以了。

        static void Main(string[] args)
            {
    
                object oMissing = System.Reflection.Missing.Value;
    
                Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();//创建word对象
                word.Visible = true;//显示出来
    
                Microsoft.Office.Interop.Word.Document dcu = word.Documents.Add(ref oMissing, ref oMissing,
            ref oMissing, ref oMissing);//创建一个新的空文档,格式为默认的
    
                dcu.Activate();//激活当前文档
    
                object type = @"Excel.Sheet.12";//插入的excel 格式,这里我用的是excel 2010,所以是.12
                object filename = @"C:\list.xlsx";//插入的excel的位置
                word.Selection.InlineShapes.AddOLEObject(ref type, ref filename, ref oMissing, ref oMissing);//执行插入操作
    
    
                Console.ReadKey();
            }
    


    当然前提是已经引用程序集Microsoft.Office.Interop.Word。

    这段代码我已经执行过,并在Visual Studio 2010 测试通过,使用的是word 2010.

    其实这样的需求,用一种简单的方式就是先在word 中记录宏,要执行什么操作,记录宏,看宏执行的了什么动作,在MSDN中找对应的方法,然后在C#中调用相对应的方法,基本上就可以实现自己想要的。

    希望对您有所帮助。

     


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年2月2日 7:36
    版主
  • 更新一下,如果您插入的是excel图表的话,传进去的type 应该是Excel.Chart.8。

    然后如果修改,编辑的话,有点类似于反射:

    看示例代码:

      dcu.InlineShapes[1].OLEFormat.Edit();//选中图表并激活编辑选项
             object Mychart = dcu.InlineShapes[1].OLEFormat.Object;   //创建一个object对象,并把图表的对象赋值给Mychart 
           Mychart .Application.DataSheet.Range("a1").Value = "75";//选择要修改的单元格,并赋新值
             Mychart.Application.Update();//更新图表
    Mychart = null//释放对象。
    
    如果程序报 object 不包含Application 之类的错误的,请不要忘记添加Microsoft.CShap 程序集的引用。
    这样做看起来挺繁琐的。建议您还是直接把表创建好,插入到word中就好了。

    另外建议您去MSDN Word For Developers 论坛试试看。

    http://social.msdn.microsoft.com/Forums/en-US/worddev/threads

    希望对您有所帮助。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年2月3日 5:23
    版主

全部回复

  • 先参考一下我的代码,实现的是插入整个excel文件。当然文件是事先存在的。插入空白的话,只需要将下面的代码中的filename参数改为oMissing就可以了。

        static void Main(string[] args)
            {
    
                object oMissing = System.Reflection.Missing.Value;
    
                Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();//创建word对象
                word.Visible = true;//显示出来
    
                Microsoft.Office.Interop.Word.Document dcu = word.Documents.Add(ref oMissing, ref oMissing,
            ref oMissing, ref oMissing);//创建一个新的空文档,格式为默认的
    
                dcu.Activate();//激活当前文档
    
                object type = @"Excel.Sheet.12";//插入的excel 格式,这里我用的是excel 2010,所以是.12
                object filename = @"C:\list.xlsx";//插入的excel的位置
                word.Selection.InlineShapes.AddOLEObject(ref type, ref filename, ref oMissing, ref oMissing);//执行插入操作
    
    
                Console.ReadKey();
            }
    


    当然前提是已经引用程序集Microsoft.Office.Interop.Word。

    这段代码我已经执行过,并在Visual Studio 2010 测试通过,使用的是word 2010.

    其实这样的需求,用一种简单的方式就是先在word 中记录宏,要执行什么操作,记录宏,看宏执行的了什么动作,在MSDN中找对应的方法,然后在C#中调用相对应的方法,基本上就可以实现自己想要的。

    希望对您有所帮助。

     


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年2月2日 7:36
    版主
  • 谢谢您的回复。

    我的问题一开始没有描述清楚。

    我的这个word是程序生成的质量报告模板。里面的布局是固定的,曲线图这块是用插入excel对象来实现,如果按照您的方法,这个excel对象在word里面生成的缩略图的质量是无法控制的(如果数据量正好,比如20条,那么生成的缩略图正好清晰,再多了就会自动压缩导致模糊了)。而且您这个方法插入word后 这个excel对象是不能控制的吧?(比如我想改里面的某个cell的数据什么的)

     

    2012年2月3日 1:57
  • 您可先把Excel設定好存好檔後,再透過Word把它Add進去!
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2012年2月3日 2:38
  • add进去的excel对象还能操作吗?

    2012年2月3日 3:57
  • 請看這篇文章,

    在word中控制excel表格


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2012年2月3日 4:36
  • 更新一下,如果您插入的是excel图表的话,传进去的type 应该是Excel.Chart.8。

    然后如果修改,编辑的话,有点类似于反射:

    看示例代码:

      dcu.InlineShapes[1].OLEFormat.Edit();//选中图表并激活编辑选项
             object Mychart = dcu.InlineShapes[1].OLEFormat.Object;   //创建一个object对象,并把图表的对象赋值给Mychart 
           Mychart .Application.DataSheet.Range("a1").Value = "75";//选择要修改的单元格,并赋新值
             Mychart.Application.Update();//更新图表
    Mychart = null//释放对象。
    
    如果程序报 object 不包含Application 之类的错误的,请不要忘记添加Microsoft.CShap 程序集的引用。
    这样做看起来挺繁琐的。建议您还是直接把表创建好,插入到word中就好了。

    另外建议您去MSDN Word For Developers 论坛试试看。

    http://social.msdn.microsoft.com/Forums/en-US/worddev/threads

    希望对您有所帮助。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年2月3日 5:23
    版主