C#Word文档-如何清除格式
本文关键字:清除 格式 何清除 文档 C#Word | 更新日期: 2023-09-27 18:00:12
困境相当简单。我需要创建一个小应用程序,它将清除所有字体背景色(保持表格单元格背景色不变),并删除word文档中所有带删除线的文本,然后将文档保存到另一个文件夹中。否则,文档的格式应保持不变。
下面是一个从谷歌上的随机示例中拼凑而成的大示例,展示了如何将特定类型的格式应用于使用Find找到的随机字符串。执行()。然而,我不知道如何只做上面描述的事情。
public static string searchDoc(string fileNameRef)
{
Microsoft.Office.Interop.Word._Application word = new Microsoft.Office.Interop.Word.Application(); ;
Microsoft.Office.Interop.Word._Document doc = new Microsoft.Office.Interop.Word.Document();
object missing = System.Type.Missing;
try
{
System.IO.FileInfo ExecutableFileInfo =
new System.IO.FileInfo(System.Reflection.Assembly.GetEntryAssembly().Location);
object fileName =
System.IO.Path.Combine(ExecutableFileInfo.DirectoryName, fileNameRef);
doc = word.Documents.Open(ref fileName, ref missing, ref missing, ref missing
, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing
, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
doc.Activate();
//object findStr = "hello"; //sonething to find
// THIS is the part where I fail, I can't find of a way to Find.Execute on formatting
// as opposed to mere strings.
//while (word.Selection.Find.Execute(ref findStr)) //found...
//{
// //change font and format of matched words
// word.Selection.Font.Name = "Tahoma"; //change font to Tahoma
// word.Selection.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdRed; //change color to red
//}
object saveFileName = ExecutableFileInfo.DirectoryName + "''New''" + fileNameRef;
doc.SaveAs(ref saveFileName, ref missing, ref missing, ref missing, ref missing
, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing
, ref missing, ref missing, ref missing, ref missing, ref missing);
}
catch (Exception)
{
}
finally
{
doc.Close(ref missing, ref missing, ref missing);
word.Application.Quit(ref missing, ref missing, ref missing);
}
return fileNameRef;
}
谢谢你的帮助!我的意思是,我想,只要开始学习如何识别格式就会有很大帮助。:)
这不是一个C#特有的问题;这是一个单词对象模型问题(我指的是这里和这里)。
至于您的具体问题,我建议您打开Word中的宏记录器,执行操作,然后查看生成的VBA代码。然后你可以在C#中应用它。
试试这个:
using System;
using Microsoft.Office.Interop.Word;
using System.IO;
using System.Reflection;
namespace WordFormattingFindReplace {
class Program {
static void Main(string[] args) {
}
public static string searchDoc(string fileName) {
_Application word = new Application(); ;
_Document doc;
string folderName = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
string filePath = Path.Combine(folderName,fileName);
doc = word.Documents.Open(filePath);
var find=doc.Range().Find;
find.Text="Hello";
find.Format=true;
find.Replacement.Font.Name="Tahoma";
find.Replacement.Font.ColorIndex=WdColorIndex.wdRed;
find.Execute(Replace:WdReplace.wdReplaceAll);
doc.SaveAs2(Path.Combine(folderName,"New",fileName));
doc.Close();
//We need to cast this to _Application to resolve which Quit method is being called
((_Application)word.Application).Quit();
return fileName;
}
}
}
一些注意事项:
- 为了清楚起见,请使用
using
语句。在文件的顶部添加using Microsoft.Office.Interop.Word
而不是Microsoft.Office.Interop.Word._Application word
,然后就可以只写_Application word
- 如果只需要文件夹名称,请使用静态
Path.GetDirectoryName
方法并另存为string
变量,而不是创建FileInfo
对象 - 截至。NET 4时,可以在调用
Documents.Open
、Document.SaveAs
和Document.Close
时跳过可选参数。这也意味着您不需要object missing
- 这里没有用户真正需要看到的内容,因此不需要调用
Document.Activate
- 重用
Word.Application
实例可能更好,而不是为每个调用重新创建它