2012-08-22 163 views
2

我有一些代碼來替換Excel項目中的文本(下面發佈),這段代碼就像一個魅力。但我也想要替換文本實例的數量。 有什麼辦法可以得到它嗎?C#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

你不能直接這樣做,但你可以運行FindFindNext功能,然後替換無論是在search.This發現將打開一個範圍內採取更換的次數。

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 
+0

試過這種code..it總是返回數2. start.replace函數替換所有情況下,如果在一氣呵成的文字。 – Sunny

+0

Otherway is to'start.value = replacement;'並刪除'start.Replace' – perilbrain

+0

感謝您的幫助。我通過循環遍歷excel中的每個單元並執行匹配來完成它。使用正則表達式來讓我匹配。我有一個單詞列表來比較每個單元格。這種方法使我能夠替換並獲得計數。 – Sunny