2014-02-11 32 views
1

我嘗試用Range.Replace替換某些單元格,但是當我嘗試這樣做時,我的程序只更改第一個單元格找到它。Range.Replace in Excel

我該怎麼辦?

range = sheet.UsedRange; 
// leer las celdas 
int rows = range.Rows.Count; 
int cols = range.Columns.Count; 

Excel.Range startCell = sheet.Cells[1, 1]; 
Excel.Range endCell = sheet.Cells[rows, cols]; 
sheet.Range[startCell, endCell].Replace(@"'C:\", @"'C:\Gestion\"); 

現在我試着這樣做:

// seleccion rango activo 
range = sheet.UsedRange; 
// leer las celdas 
int rows = range.Rows.Count; 
int cols = range.Columns.Count; 

Excel.Range startCell = sheet.Cells[1, 1]; 
Excel.Range endCell = sheet.Cells[rows, cols]; 
sheet.Range[startCell, endCell].Replace(@"C:\", @"C:\Gestion\", Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByColumns, false, Type.Missing, false, false); 

但我有同樣的問題,只改變一個單元格在我的表:S

+0

你肯定行和/或COLS> 1? –

+0

是的,行和列是> 1:S我沒有找到錯誤 –

+0

你可以發佈數據的圖片嗎?第二個代碼似乎是正確的。 –

回答

3

你的代碼是正確的。以下是一些您可以檢查的事項:

(1)您的搜索設置是否設置爲區分大小寫?如果是這樣的問題,嘗試用這種替代代碼:

sheet.Range[startCell, endCell].Replace(@"'C:\", @"'C:\Gestion\", matchcase: false);

(2)您在搜索字符串中使用單引號(')。這個角色有多字節變體 - 你的電子表格使用這些而不是實際的撇號嗎? (撇號是ASCII中的字符39或十六進制中的27)

(3)撇號在單元格中用作第一個字符時具有特殊含義 - 它告訴Excel該單元格包含文本數據。 (嘗試在單元格中輸入'1而不是1以查看區別。)如果您希望單元格以實際撇號開頭,則需要將單元格加倍 - 因此''C:\將在單元格中呈現爲'C:\,而此是什麼將被搜查(忽略第一個撇號)。

我的猜測是(3)是最有可能的,但如果以上建議都不起作用,那麼它會幫助你,如果你可以提供更多的信息。

+0

嗯,我試試這個,但我無法修復它。現在我再試一次:sheet.Range [startCell,endCell] .Replace(@「C:\」,@「C:\ Gestion \」);沒有撇號,但問題仍然存在。我想搜索每個單元格excel包含此字符串「C:\」,並將其替換爲此C後的所有:\ Gestion –

+0

您可以發佈正確替換的單元格的確切內容(公式,而不是值)和一些不是的細胞? –

0

我做了這個一個刪除「和它的工作好:

  var excelApp = new Microsoft.Office.Interop.Excel.Application(); 
      Workbook wb = excelApp.Workbooks.Open(@"c:\folder\excelfile.xlsx", Type.Missing, Type.Missing, 
                Type.Missing, Type.Missing, 
                Type.Missing, Type.Missing, 
                Type.Missing, Type.Missing, 
                Type.Missing, Type.Missing, 
                Type.Missing, Type.Missing, 
                Type.Missing, Type.Missing); 
      excelApp.DisplayAlerts = false; 
      var ws = wb.Worksheets; 
      var worksheet = (Worksheet)ws.get_Item("sheetname"); 

      Range range = worksheet.UsedRange; 

      int rows = range.Rows.Count; 
      int cols = range.Columns.Count; 

      Range startCell = worksheet.Cells[1, 1]; 
      Range endCell = worksheet.Cells[rows, cols]; 

      worksheet.Range[startCell, endCell].Replace("'", "", MatchCase: false); 


      wb.Close(true); 
      excelApp.Quit();