我尝试用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
答案 0 :(得分:3)
您的代码是正确的。以下是您可以查看的内容:
(1)您的搜索设置是否设置为区分大小写?如果这是问题所在,请尝试使用以下代码替换代码:
sheet.Range[startCell, endCell].Replace(@"'C:\", @"'C:\Gestion\", matchcase: false);
(2)您在搜索字符串中使用撇号(')。这个字符有多字节变体 - 您的电子表格是否使用这些而不是实际的撇号? (撇号是ASCII中的字符39,或十六进制中的27。)
(3)当用作单元格中的第一个字符时,撇号在Excel中具有特殊含义 - 它告诉Excel该单元格包含文本数据。 (尝试在单元格中输入'1
而不是1
来查看差异。)如果您希望单元格以实际撇号开头,则需要将其加倍 - 所以{{1} }将在单元格中呈现为''C:\
,这将被搜索(忽略第一个撇号)。
我的猜测是(3)是最有可能的,但如果上述建议都不起作用,那么如果你能提供更多信息会有所帮助。
答案 1 :(得分: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();