本文主要介绍利用C#读取和写入Word内容的一般方法。
第11行和第14行分别导入kernel32.dll中的初始化控制台函数AllocConsole()和释放控制台的函数FreeConsole()。
第22行和27行分别初始化和释放控制台。
Form1.cs文件中的按钮事件处理函数:
我们创建的app对象就代表了整个的Word的进程,我们可以利用app对象进行word的进程的开启和关闭。我们可以先查看下目前Word的版本信息,在控制台中打印出来:
第4、5行获取app对象的Version属性,然后在控制台中打印。
第6、7行退出该进程。
Application的Documents属性是一个存放Document对象容器,利于Documents的Open方法可以打开Word文件。打开后,文件中的所有文档都被存放到Documents中,open函数返回当前的ActiveDucument,也就是鼠标所在的文档对象。
如果range设置一个取值范围,比如只获取前两个字符:
第二行,利用Range对象进行写操作
第三行,将doc保存
最终的效果如下:
整个工程的代码如下:
Github位置:
一、创建工程。
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