C#中操作Word(3)—— 利用Range对象读取和设置Word中的文本
2016-11-09 14:13
661 查看
本文主要介绍利用C#读取和写入Word内容的一般方法。
Program.cs的代码:
第11行和第14行分别导入kernel32.dll中的初始化控制台函数AllocConsole()和释放控制台的函数FreeConsole()。
第22行和27行分别初始化和释放控制台。
第23行是设置控制台的输出编码为本地操作系统额默认编码,否则在英文系统中可能输出中文为乱码。
Form1.cs文件中的按钮事件处理函数:
我们创建的app对象就代表了整个的Word的进程,我们可以利用app对象进行word的进程的开启和关闭。我们可以先查看下目前Word的版本信息,在控制台中打印出来:
第4、5行获取app对象的Version属性,然后在控制台中打印。
第6、7行退出该进程。
运行结果如下,成功打印了我电脑上Word的版本号,我装的office是2007版的,版本号为12.0。
Application的Documents属性是一个存放Document对象容器,利于Documents的Open方法可以打开Word文件。打开后,文件中的所有文档都被存放到Documents中,open函数返回当前的ActiveDucument,也就是鼠标所在的文档对象。
如果range设置一个取值范围,比如只获取前两个字符:
第二行,利用Range对象进行写操作
第三行,将doc保存
最终的效果如下:
整个工程的代码如下:
Github位置:
https://github.com/HymanLiuTS/OfficeTestByC-
克隆本项目:
git clone git@github.com:HymanLiuTS/OfficeTestByC-.git
获取本文源代码:
git checkout L03
一、创建工程。
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
相关文章推荐
- C#中操作Word(4)—— 利用Range对象设置文本的格式
- C#操作Word总结(二)——设置文档格式并添加文本内容、超链接、添加图片
- 利用POI对MS Excel进行读写(可以设置写入文件的样式),利用tm-extractor对Word进行读取操作并将信息用(log4j)日志信息显示出
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
- C# 文件操作(读取文本/日志文件,读取文件列表,创建HTML,写入日志文件)
- c#读取word内容,c#写入word内容,C#操作word
- C#反射技术的简单操作(读取和设置类的属性)
- C#反射技术的简单操作(读取和设置类的属性)
- C# 读取word文件文本
- C#操作word之文本批量替换
- C#操作word之文本替换
- C#反射技术的简单操作(读取和设置类的属性)
- C#反射技术的简单操作(读取和设置类的属性)
- 利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容
- C#反射技术的简单操作(读取和设置类的属性)
- C#操作office之word文本替换,只能实现替换其中一个,可以替换超长文本
- C# Word常用操作(转)格式设置
- c#频繁读取word文件 所请求的剪切板操作失败 解决方法
- 黄聪:C#操作Word -- 插入文本
- C#多文档 含父窗体 Word文档读取文本 转换txt