您的位置:首页 > 编程语言 > C#

C#中操作Word(3)—— 利用Range对象读取和设置Word中的文本

2016-11-09 14:13 661 查看
        本文主要介绍利用C#读取和写入Word内容的一般方法。

一、创建工程。

1.1 引入控制台Control

        我们创建一个名叫WordTest的Windows窗体应用程序作为本次试验的工程,为了能够显示word中的内容,我们先要在下图所示的Program.cs的main()函数中引入控制台Console来显示读取到内容。



 

Program.cs的代码:

namespace WordTest
{
static class Program
{
[DllImport("kernel32.dll")]
public static extern Boolean AllocConsole();

[DllImport("kernel32.dll")]
public static extern Boolean FreeConsole();
/// <summary>
/// 应®|用®?程¨¬序¨°的Ì?主¡Â入¨?口¨²点Ì?。¡ê
/// </summary>
[STAThread]
static void Main()
{
AllocConsole();
Console.OutputEncoding = System.Text.Encoding.Default;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
FreeConsole();
}
}

}


第11行和第14行分别导入kernel32.dll中的初始化控制台函数AllocConsole()和释放控制台的函数FreeConsole()。

第22行和27行分别初始化和释放控制台。
第23行是设置控制台的输出编码为本地操作系统额默认编码,否则在英文系统中可能输出中文为乱码。

1.2 创建测试按钮

        在窗口上添加一个按钮,并把按钮名称命名为”测试”,创建按钮的点击事件处理函数,我们在这个函数中进行word内容的读取。



        Form1.cs文件中的按钮事件处理函数:
private void button1_Click(object sender, EventArgs e)
{

}

二、创建Word试验文档

        在D盘建立一个Word文档,名称就叫做test.docx,并在文档中输入以下内容:





三、进行word的读写

3.1 创建Application对象

        我们需要在button1_Click()函数中添加一个Application对象,添加方法如下:
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();


        我们创建的app对象就代表了整个的Word的进程,我们可以利用app对象进行word的进程的开启和关闭。我们可以先查看下目前Word的版本信息,在控制台中打印出来:
private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
string version = app.Version;
Console.WriteLine(version);
app.Quit();
app = null;
}
第3行创建了一个Application对象。

第4、5行获取app对象的Version属性,然后在控制台中打印。

第6、7行退出该进程。
运行结果如下,成功打印了我电脑上Word的版本号,我装的office是2007版的,版本号为12.0。



3.2 获取文档对象

Document doc = app.Documents.Open("D:\\Test.docx");


        Application的Documents属性是一个存放Document对象容器,利于Documents的Open方法可以打开Word文件。打开后,文件中的所有文档都被存放到Documents中,open函数返回当前的ActiveDucument,也就是鼠标所在的文档对象。

3.3 获取Range对象进行读写

3.3.1 利用Range进行读操作

        可以通过doc对象的Range()方法获取Range对象,如果Range()不传入实参,则表示获取整个Document范围的Range:
Range range = doc.Range();
        利用Console打印出来就是:
Console.WriteLine(range.Text.ToString());



        如果range设置一个取值范围,比如只获取前两个字符:
Range range = doc.Range(0,2);
        利用Console打印出来就是:
Console.WriteLine(range.Text.ToString());




3.3.2 利用Range进行写操作

        接下来,我们可以直接操作Range对象进行Word文档的写操作,例如我想把目前word中的文字“我是一个测试文档。。”改成“我是一个新的测试文档。。”。实现的思路是获取其实位置为4,结束位置为10的Range对象,然后直接在range对上修改。
range = doc.Range(4, 10);
range.Text = "新的测试文档";
doc.Save();
第一行,获取了一个范围为5~10的Range对象。

第二行,利用Range对象进行写操作

第三行,将doc保存

       

最终的效果如下:

整个工程的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.Word;

namespace WordTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
string version = app.Version;
Console.WriteLine(version);
Document doc = app.Documents.Open("D:\\Test.docx");
doc.ActiveWindow.Visible = true;
Range range = doc.Range();
Console.WriteLine(range.Text.ToString());
range = doc.Range(4, 10);
range.Text = "新?的Ì?测a试º?文?档̦Ì。¡ê。¡ê";
doc.Save();
app.Quit();
app = null;
}
}
}


Github位置:
https://github.com/HymanLiuTS/OfficeTestByC-

克隆本项目:

git clone git@github.com:HymanLiuTS/OfficeTestByC-.git

获取本文源代码:

git checkout L03
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: