C# Excel互操作计数和替换

3

我有一些代码可以在Excel项目中替换文本(如下所示),这段代码运行良好。但我也想知道替换的文本实例数量。是否有办法获取它?

static void ReplaceTextInExcelFile(string filename, string replace, string replacement)
{
object m = Type.Missing;

// open excel.
Application app = new ApplicationClass();

// open the workbook. 
Workbook wb = app.Workbooks.Open(
    filename,
    m, false, m, m, m, m, m, m, m, m, m, m, m, m);

// get the active worksheet. (Replace this if you need to.) 
Worksheet ws = (Worksheet)wb.ActiveSheet;

// get the used range. 
Range r = (Range)ws.UsedRange;

// call the replace method to replace instances. 
bool success = (bool)r.Replace(
    replace,
    replacement,
    XlLookAt.xlWhole,
    XlSearchOrder.xlByRows,
    true, m, m, m);

// save and close. 
wb.Save();
app.Quit();
app = null;
}
1个回答

2
您不能直接这样做,但是您可以运行FindFindNext函数,然后替换搜索中找到的任何内容。这将打开一个范围,以便计算替换次数。
Range r = (Range)ws.UsedRange;
int count=0;

Range first=r.Find(replace,m,m,XlLookAt.xlWhole,XlSearchOrder.xlByRows,m,m,m,m);
if(first!=null)
{count++;
Range start=first;
do
{
  start.Value=replacement;
  count++;
  start=r.FindNext(m);
}
while(start!=first);

//do whatever with count

尝试了这段代码,它总是返回计数2。start.replace函数会一次性替换所有文本的实例。 - Sunny
另一种方法是将 start.value=replacement;,并删除 start.Replace - perilbrain
感谢您的帮助。我通过循环遍历Excel中的每个单元格并执行匹配来完成它。使用正则表达式来获取匹配项。我有一个完整的单词列表来与每个单元格进行比较。这种方法使我能够替换和计数。 - Sunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接