基于C#简单实现多个word文件和Excel文件的全局字符串替换

时间:2023-03-09 15:36:42
基于C#简单实现多个word文件和Excel文件的全局字符串替换

公司整理文档工作中,出现了一个需要使用全局字符替换多个word文档、excel文档中的内容的需求。虽然office、WPS都有全局替换的功能(ctrl+h),但是文件过多,且需要替换多次,工作量还是比较令人头大。因此需要自制一个小工具实现多个文件全局替换。

首先查找网上的案例,发现FreeSpire.DocFreeSpire.Xls可以通过操作word文档、excel文件来实现这一功能。而且资源易于下载,直接打开程序包控制台,输入指令安装即可。

基于C#简单实现多个word文件和Excel文件的全局字符串替换

基于C#简单实现多个word文件和Excel文件的全局字符串替换

安装后的项目中的引用列表会多出以下几个新项:

基于C#简单实现多个word文件和Excel文件的全局字符串替换

实现替换方法代码如下,以替换excel为例:

Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
workbook.LoadFromFile(filepath);
workbook.Replace(oldstr,newstr);

这样就实现了对单个文件的字符串替换。对文件列表循环调用此方法即可实现多文件多字符的替换。

但是在实际使用中,发现Spire的组件加载很多文件时会报错,不知道是组件内部冲突还是组件本身不支持一些文件。

因此找到了另一款操作office文件的插件:Aspose.Words、Aspose.Cells

Aspose的组件需要在网上下载,下载Aspose.Words.dll、Aspose.Cells.dll两个文件:

基于C#简单实现多个word文件和Excel文件的全局字符串替换

下载后在项目中手动添加引用:

基于C#简单实现多个word文件和Excel文件的全局字符串替换

基于C#简单实现多个word文件和Excel文件的全局字符串替换

基于C#简单实现多个word文件和Excel文件的全局字符串替换

完成后的引用列表:

基于C#简单实现多个word文件和Excel文件的全局字符串替换

使用Aspose对文件进行替换操作,和Spire的方式很类似,替换word文档中的字符串:

var document = new Aspose.Words.Document(filepath);
document.Range.Replace(oldstr, newstr, true, false);

替换excel:

Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(filepath);
foreach(Aspose.Cells.Worksheet ws in workbook.Worksheets)
{
ws.Replace(oldstr, newstr);
ws.Name.Replace(oldstr, newstr);
}

为实现对多个文件进行同时替换,需要有获取选中文件夹中所有文件的方法:

public List<FileInfo> GetAllFiles(DirectoryInfo dir)
{
List<FileInfo> filelist = new List<FileInfo>();
filelist.AddRange(dir.GetFiles()); if (dir.GetDirectories().Count() > )
{
DirectoryInfo[] fod = dir.GetDirectories();
foreach(DirectoryInfo dire in fod)
{
filelist.AddRange(GetAllFiles(dire));
}
}
return filelist;
}