Range.Replace在Excel中

时间:2014-02-11 11:52:14

标签: c# .net excel

我尝试用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

2 个答案:

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