C#操作Word

来源:互联网 发布:淘宝图片白底怎么弄的 编辑:程序博客网 时间:2024/06/15 18:46

C#操作Word(一)——C#中向Word文档中插入Windows控件(转)

实例说明

Word是一个功能强大的文字处理软件,在Word文档中可以方便的对文字信息进行排版,也可以向文档中插入生动、直观的图片信息,本实例将会介绍一个有趣的功能,向Word文档中插入Windows控件,并且此控件还可以响应用户事件。比如,向Word文档中插入Button按钮,此按钮也可以响应用户的单击事件。实例运行效果如图1所示。

图1向Word文档中插入Windows控件
关键技术
本实例重点在于向读者介绍怎样使用Controls集合的AddButton方法向文档中插入Windows按钮控件,下面对本实例用到的关键技术进行详细讲解。
  说明:由于实例中使用了Word与Windows控件的互操作技术,所以应当在VS2008中创建Word2003文档实例,具体创建方式请参照本实例中的“设计过程“。
使用Controls集合的AddButton方法可以方便的向Word文档中插入按钮控件。AddButton的语法格式如下:
public Button AddButton(Range range, float width, float height, string name);
AddButton方法中的参数说明如表1所示。
表1 AddButton方法中的参数说明

  说明:实例中介绍了向Word文档中插入Windows控件的方法,当AddButton方法执行后将会向Word文档中插入Button按钮同时还会返回此Button对象的引用,可以通过设置此Button对象的属性和事件来控制Word文档中Button按钮的状态和事件。
设计过程
(1)打开Visual Studio 2008开发环境,选择文件菜单中的“新建”/“项目”,此时会弹出“新建项目”窗口,在“新建项目”窗口的“项目类型”中选择“Visual C#”/“Office”,在右侧模板中选择“Word 2003 文档”,并在名称中添写“InsertControl”,并选择项目保存位置,单击确定按钮新建项目。如图2所示。

图2在VS2008中创建Word 2003 文档
(2)在打开的Word文档中单击鼠标右键选择“查看代码”,在Startup事件中写入代码如下:
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
    Word.Range P_Range1 = this.Paragraphs[1].Range;        //得到文档范围
    Microsoft.Office.Tools.Word.Controls.Button P_btn =        //向文档中添加按钮
        this.Controls.AddButton(P_Range1, 50, 20, "button1");
    P_btn.Text = "Button按钮";             //设置按钮文本
    P_btn.Height = 50;              //设置按钮高度
    P_btn.Width = 100;              //设置按钮宽度
    P_btn.Click += new EventHandler(P_btn_Click); 

}

C#操作Word(二)——将Word文档嵌入到WinForm窗体中

实例说明
Office是我们日常工作中经常用到的办公软件,然而,随着信息技术的飞速发展,已经有越来越多的人使用Word写作文档、使用Excel制做报表、使用OutLook方便的收发电子邮件。一切的操作都是这么轻松,实例中将会介绍怎样使用C#在Form窗体中显示Word文档,运行效果如图1所示。

图1  将Word文档嵌入到WinForm窗体中
关键技术
本实例重点在于向读者介绍怎样使用WebBrowser控件显示Word文档,下面对本实例中所用到的关键技术进行详细讲解。
WebBrowser控件是Windows窗体应用程序的标准控件,使用WebBrowser控件可以在窗体中显示网页信息,通过WebBrowser控件的Navigate方法可以将指定位置的文档加载到WebBrowser控件中,该方法常用的语法格式如下:
public void Navigate(string urlString)
参数说明
? urlString:要加载的文档的URL地址。
  说明:WebBrowser控件也可以加载并显示Excel文件。
设计过程
(1)打开Visual Studio 2008开发环境,新建一个Windows窗体应用程序,命名为WordInForm。
(2)更改默认窗体Form1的Name属性为Frm_Main,更改Text属性为“将Word文档嵌入到WinForm窗体中”,并向窗体中添加一个MenuStrip菜单控件,向菜单中添加两个菜单项“打开”和“退出”分别用于打开Word文档和退出应用程序;向窗体中添加WebBrowser控件,此控件用于显示Word文档。
(3)程序主要代码如下:
private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
{
    OpenFileDialog P_GetFile = new OpenFileDialog();       //创建打开文件对话框对象
    DialogResult P_dr = P_GetFile.ShowDialog();        //显示打开文件对话框
    if (P_dr == DialogResult.OK)           //是否单击确定
    {
        WebBrowser.Navigate(P_GetFile.FileName);       //打开Word文档并显示
    }
}

C#操作Word(三)——C#向Word文档中写入文字(转) 

实例说明
Word有着强大的文本编辑功能,我们可以轻松的在Word中输入文本内容,更改文字字体,设置文字大小、颜色,方便的对文本内容排版。在前面的实例中已经详细介绍了怎样使用C#创建Word文档,本实例将会使用C#方便的向指定的Word文档中输入文本内容。实例运行效果如图1所示。

图1  向Word文档中写入文字
实例运行中单击“创建Word文档”按钮,会根据用户选择的路径位置创建Word文档并向文档中添加文字,而文档的名称就是当前系统日期与时间。创建的Word文档如图2所示。

图2  被写入文字的Word文档
? 关键技术
本实例重点在于向读者介绍怎样使用Word文档中Range属性向Word中添加文本信息,下面对本实例用到的关键技术进行详细讲解。
读取或设置Word文档中的文本内容的方式基本相同,首先是得到文本内容的范围,然后通过范围对象读取或设置文本信息。实例中首先使用了Paragraphs集合中的索引获取Word文档中的段落对象,然后通过Paragraph段落对象的Range属性得到文档中段落的范围,最后通过范围对象的Text属性获取或设置段落内的文本信息。
  说明:在Word文档的操作中也可以使用Range对象的Collapse方法折叠Range对象。折叠后的Range对象将不包含文本或其它信息,只是标注文档中的一个位置。
? 设计过程
(1)打开Visual Studio 2008开发环境,新建一个Windows窗体应用程序,命名为AddLetter。
(2)使用C#操作Word文档,需要引用相关的COM组件,引用COM组件的步骤请参照实例002中的设计过程。
(3)更改默认窗体Form1的Name属性为Frm_Main,更改Text属性为“向Word文档中写入文字”,并向窗体中添加两个TextBox控件,控件分别用输入字符串和显示Word文档保存路径;向窗体中添加3个Button按钮,这3个按钮分别用于选择文档保存路径、创建Word文档和显示Word文档。
(4)程序主要代码如下:
private void btn_New_Click(object sender, EventArgs e)
{
    btn_New.Enabled = false;            //停用新建按钮
    ThreadPool.QueueUserWorkItem(          //使用线程池
        (P_temp) =>             //使用lambda表达式
        {
            G_wa = new Word.Application();         //创建Word应用程序对象
            Word.Document P_wd = G_wa.Documents.Add(      //建立新文档
                ref G_missing, ref G_missing, ref G_missing, ref G_missing);
            Word.Range P_Range = P_wd.Paragraphs[1].Range;     //得到文档的范围对象
            P_Range.Text = txt_add.Text;         //向文档中添加字符串
            G_str_path = string.Format(          //计算文件保存路径
                @"{0}{1}", G_FolderBrowserDialog.SelectedPath,
                DateTime.Now.ToString("yyyy年M月d日h时s分m秒fff毫秒") + ".doc");
            P_wd.SaveAs(            //保存Word文件
                ref G_str_path,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing);
            ((Word._Application)G_wa.Application).Quit(       //退出应用程序
                ref G_missing, ref G_missing, ref G_missing);
            this.Invoke(             //开始执行窗体线程
                (MethodInvoker)(() =>          //使用lambda表达式
                {
                    btn_Display.Enabled = true;        //启用显示按钮
                    MessageBox.Show("成功创建Word文档!", "提示!");   //弹出消息对话框
                }));
        });
}
C#操作Word(四)——在Word文档中绘制表格(转)      

实例说明
使用Excel可以方便的处理表格信息,但是在Word中也可以简单的使用表格,在Word菜单中单击“表格”/“插入”/“表格”,在插入表格窗口中添加表格的行数和列数,最后单击“确定”按钮插入表格。在实例中我们可以使用C#方便的向指定的Word文档中插入表格,并在表格中添加相应信息。实例运行效果如图1所示。

图1  在Word文档中绘制表格
实例运行中单击“创建Word文档”按钮,会根据用户选择的路径位置创建Word文档并向文档中绘制表格,而文档的名称就是当前系统日期与时间。创建的Word文档如图2所示。

图2Word文档中的表格
? 关键技术
本实例重点在于向读者介绍怎样使用Tabels集合的Add方法在文档中绘制表格,下面对本实例用到的关键技术进行详细讲解。
通过Document对象的Tables属性可以得到Tables集合,使用Tables集合对象的Add方法可以轻松的在Word文档中绘制表格,Add方法的语法格式如下:
Table Add(Range Range, int NumRows, int NumColumns, ref object DefaultTableBehavior, ref object AutoFitBehavior);
Add方法中的参数说明如表1所示。
表1  Add方法中的参数说明

  说明:在Word文档中插入表格后可以使用表格对象的Cell方法获取或设置表格中的文本内容,Cell方法接受两个参数,两个参数分别为表格中行与列的索引,要注意一点,表格中的行与列的索引值从1开始。
? 设计过程
(1)打开Visual Studio 2008开发环境,新建一个Windows窗体应用程序,命名为AddTable。
(2)使用C#操作Word文档,需要引用相关的COM组件,引用COM组件的步骤请参照实例002中的设计过程。
(3)更改默认窗体Form1的Name属性为Frm_Main,更改Text属性为“在Word文档中绘制表格”,并向窗体中添加3个TextBox控件,3个TextBox控件分别用显示Word文档保存路径、设置插入表格行数和设置插入表格列数;向窗体中添加3个Button按钮,这3个按钮分别用于选择Word文档保存路径、创建Word文档和显示Word文档。
(4)程序主要代码如下:
private void btn_New_Click(object sender, EventArgs e)
{
    G_ToolProgressBar.Minimum = 1;          //设置进度条最小值
    G_ToolProgressBar.Maximum =           //设置进度条最大值
        int.Parse(txt_row.Text)+1;
    btn_New.Enabled = false;            //停用新建按钮
    ThreadPool.QueueUserWorkItem(          //使用线程池
        (P_temp) =>             //使用lambda表达式
        {
            G_wa = new Word.Application();         //创建Word应用程序对象
            Word.Document P_wd = G_wa.Documents.Add(      //建立新文档
                ref G_missing, ref G_missing, ref G_missing, ref G_missing);
            Word.Range P_Range = P_wd.Paragraphs[1].Range;     //得到文档范围对象
            object P_DefaultTable =           //创建表格参数对象
                Word.WdDefaultTableBehavior.wdWord8TableBehavior;
            object P_AutoFit =            //创建表格参数对象
                Word.WdAutoFitBehavior.wdAutoFitWindow;
            Word.Table P_WordTable = P_Range.Tables.Add(     //向文档中添加表格
                P_Range,
                int.Parse(txt_row.Text),
                int.Parse(txt_column.Text),
                ref P_DefaultTable, ref P_AutoFit);
            for (int i = 1; i < int.Parse(txt_row.Text) + 1; i++)
            {
                for (int j = 1; j < int.Parse(txt_column.Text) + 1; j++)
                {
                    P_WordTable.Cell(i, j).Range.Text =      //向表格中添加数据
                        string.Format("{0}行 {1}列", i.ToString(), j.ToString());
                    Thread.Sleep(10);          //线程挂起10毫秒
                }
                this.Invoke(            //调用窗体线程
                    (MethodInvoker)(() =>          //使用Lambda表达式
                    {
                        G_ToolProgressBar.Value = i + 1;      //设置进度信息
                    }));
            }
            G_str_path = string.Format(          //计算文件保存路径
                @"{0}{1}", G_FolderBrowserDialog.SelectedPath,
                DateTime.Now.ToString("yyyy年M月d日h时s分m秒fff毫秒") + ".doc");
            P_wd.SaveAs(            //保存Word文件
                ref G_str_path,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing);
            ((Word._Application)G_wa.Application).Quit(       //退出应用程序
                ref G_missing, ref G_missing, ref G_missing);
            this.Invoke(             //开始执行窗体线程
                (MethodInvoker)(() =>          //使用lambda表达式
                {
                    btn_Display.Enabled = true;        //启用显示按钮
                    MessageBox.Show("成功创建Word文档!", "提示!");   //弹出消息对话框
                }));
        });
}

C#操作Word(五)——在Word文档中插入图片(转)

实例说明
在Word文档的使用过程中,我们可以轻松的向文档中插入图片信息,那么,怎样使用C#向Word文档中插入图片呢?本实例将会介绍一种方法,可以方便的实现上述功能。实例运行效果如图1所示。

图1  在Word文档中插入图片
实例运行中单击“创建Word文档”按钮,会根据用户选择的路径位置创建Word文档并向文档中添加图片,而文档的名称就是当前系统日期与时间。创建的Word文档如图2所示。

图2  被插入图片的Word文档
? 关键技术
本实例重点在于向读者介绍怎样使用InlineShapes集合的AddPicture方法向Word文档中插入图片,下面对本实例用到的关键技术进行详细讲解。
使用Documents对象的Add方法可以创建Word文档,使用Open方法可以打开Word文档,当得到文档对象后可以根据InlineShapes属性得到InlineShape对象的集合,InlineShape对象包括图片、ActiveX控件等信息。使用InlineShapes集合的AddPicture方法可以方便的向文档中插入图片,AddPicture方法的语法格式如下:
InlineShape AddPicture(string FileName, ref object LinkToFile, ref object SaveWithDocument, ref object Range);
AddPicture方法中的参数说明如表1所示。
表1 AddPicture方法中的参数说明

参数

描述

? FileName

将要插入的图片文件名称及路径

? LinkToFile

如果为true,则将图片链接到创建该对象的文件;如果为false则将图片作为该文件的独立副本,默认为false

?SaveWithDocument

如果为true,则链接的图片与工作表一起保存,默认为false

? Range

插入图片的范围


? 设计过程
(1)打开Visual Studio 2008开发环境,新建一个Windows窗体应用程序,命名为AddImage。
(2)使用C#操作Word文档,需要引用相关的COM组件,引用COM组件的步骤请参照实例002中的设计过程。
(3)更改默认窗体Form1的Name属性为Frm_Main,更改Text属性为“在Word文档中插入图片”,并向窗体中添加两个TextBox控件,控件分别用显示图片路径和显示Word文档保存路径;向窗体中添加4个Button按钮,这4个按钮分别用于选择向Word文档中插入的图片、选择Word文档保存路径、创建Word文档和显示Word文档。
(4)程序主要代码如下:
private void btn_New_Click(object sender, EventArgs e)
{
    btn_New.Enabled = false;            //停用新建按钮
    ThreadPool.QueueUserWorkItem(          //使用线程池
        (P_temp) =>             //使用lambda表达式
        {
            G_wa = new Word.Application();         //创建Word应用程序对象
            Word.Document P_wd = G_wa.Documents.Add(      //建立新文档
                ref G_missing, ref G_missing, ref G_missing, ref G_missing);
            Word.Range P_Range = P_wd.Paragraphs[1].Range;     //得到段落范围
            object P_Ranges = P_Range;         //创建ojbect对象
            P_wd.InlineShapes.AddPicture(         //向文档中插入图片
                G_OpenFileDialog.FileName, ref G_missing, ref G_missing, ref P_Ranges);
            G_str_path = string.Format(          //计算文件保存路径
                @"{0}{1}", G_FolderBrowserDialog.SelectedPath,
                DateTime.Now.ToString("yyyy年M月d日h时s分m秒fff毫秒") + ".doc");
            P_wd.SaveAs(            //保存Word文件
                ref G_str_path,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing, ref G_missing,
                ref G_missing, ref G_missing, ref G_missing);
            ((Word._Application)G_wa.Application).Quit(       //退出应用程序
                ref G_missing, ref G_missing, ref G_missing);
            this.Invoke(             //开始执行窗体线程
                (MethodInvoker)(() =>          //使用lambda表达式
                {
                    btn_Display.Enabled = true;        //启用显示按钮
                    MessageBox.Show("成功创建Word文档!", "提示!");   //弹出消息对话框
                }));
        });
}