从网上拼拼凑凑,汇总一下目前我的小项目中需要用到的几种方法,以后有新的需求还会再更新。
- 首先引入一下几个包:
using MSWord = Microsoft.Office.Interop.Word;
using System.IO;
using System.Reflection;
using System.Text.RegularExpressions;
最后的“System.Text.RegularExpressions”用于字符串的正则表达式检查;
2. 在winform程序窗体类load()方法之前,创建以下变量;
MSWord.Application wordApp; //Word应用程序变量
MSWord.Document wordDoc; //Word文档变量
Object Nothing;//存放Missing.Value;
Regex reg = new Regex(@"[\u4e00-\u9fa5]");//判断是否有中文的正则表达式
- 构造函数
public WordHelper()
{
OpenApp();
}```
4.openApp()
public void OpenApp()
{
wordApp = new MSWord.ApplicationClass(); //初始化
wordApp.Visible = false;//使文档可见(程序运行时,word文档不会闪屏)
}```
- 打开指定路径的word文档
public void OpenWord(string str_path)
{
wordDoc = wordApp.Documents.Open(str_path,Missing.Value);
}```
5. 关闭word文档
wordDoc.Close(Nothing, Nothing, Nothing);```
- 关闭word应用
public void appQuit()//完全清除word占用资源
{
try
{
wordApp.Quit(Nothing, Nothing, Nothing);
}
catch (Exception)
{
throw;
}
}```
7. 全文查找字符串
//true为查找到,false为未查找到
public bool checkText(string des_text)
{
bool ret;
object nullobj = Type.Missing;
#region 1、查找常规文本
wordApp.Selection.Find.ClearFormatting();
wordApp.Selection.Find.Text = des_text;
ret =wordApp.Selection.Find.Execute(ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj);
#endregion
wordDoc.Close(Nothing, Nothing, Nothing);
return ret;
}```
- 替换(当时我还有其他功能,主函数有所剪辑,所有传入参数并未完全使用)
public void replaceNum(string old_num,string new_num,string source_path,string new_path,bool isSaveAs)
{
object nullobj = Type.Missing;
object objReplace;
#region 1、查找常规文本
wordApp.Selection.Find.ClearFormatting();
wordApp.Selection.Find.Replacement.ClearFormatting();
wordApp.Selection.Find.Text = old_num;
wordApp.Selection.Find.Replacement.Text = new_num;
objReplace = MSWord.WdReplace.wdReplaceAll;
wordApp.Selection.Find.Execute(ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref nullobj, ref nullobj,
ref nullobj, ref objReplace, ref nullobj,
ref nullobj, ref nullobj, ref nullobj);
//保存
if (isSaveAs)
{
wordDoc.SaveAs2(new_path);
wordDoc.Close(Nothing, Nothing, Nothing);
}
else
{
wordDoc.Save();
wordDoc.Close(Nothing, Nothing, Nothing);
File.Move(source_path, new_path);
}
}```
9. 移动文档,当传入的两个参数的上一级目录相同时,也可作为重命名操作
public void moveDoc(string src,string des)
{
try
{
File.Move(src,des);
}
catch (Exception)
{
throw;
}
}
获取上一级目录的方法为:
new_path1 = Path.GetDirectoryName(new string(src_path));
目前就这么多功能。
PS,如果wordApp = new MSWord.ApplicationClass(); //初始化报错,错误描述如下:错误 2 无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass”。请改用适用的接口。 那么一定要进入项目的引用目录下,找到之前添加的引用:Microsoft.Office.Interop.Word,在其属性中有一项嵌入互操作型:true,将true改成false即可。
更多推荐
使用C#自带的Microsoft.Office.Interop.Word类对word文档进行操作
发布评论