Excel中的Range.Replace

我尝试用Range.Replacereplace一些单元Range.Replace ,但是当我尝试这样做时,我的程序只更改了第一个单元格。

我该怎么办?

 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

你的代码是正确的。 这里有一些你可以检查的东西:

(1)您的search设置是否设置为区分大小写? 如果这是问题,请尝试用以下代码replace您的代码:

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

(2)在searchstring中使用撇号(')。 有这个字符的多字节变体 – 你的电子表格使用这些而不是实际的撇号? (撇号是ASCII中的字符39,或hex中的27。

(3)单引号作为单元格中的第一个字符时,在Excel中有特殊含义 – 它告诉Excel单元格包含文本数据。 (尝试在单元格中input'1 ,而不是1来查看差异。)如果您希望单元格以实际撇号开头,则需要将单元格加倍,因此''C:\将被渲染为'C:\在单元格中,这是什么将被search(忽略第一个撇号)。

我的猜测是(3)是最有可能的,但是如果上述build议都不起作用,那么如果你能提供更多的信息,这将有所帮助。

我做了这个删除',它运作良好:

  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();