使用 Range 和 Cells 时,数组似乎是基于 0 而不是基于 1
Arrays seem to be 0-based instead of 1-based when working with Range and Cells
我目前正在评估 VSTO 以用 Excel 2010 替换我们使用的 VBA,所以我对这个 Excel 互操作完全陌生。
在测试过程中,我有时会在使用范围和单元格时遇到问题,有时数组似乎是从 1 开始的,有时它们似乎是从 0 开始的,我没有找到任何相关信息。
这是一个小例子:
var ws = ((Excel.Worksheet)Globals.ThisWorkbook.Application.ActiveWorkbook.Sheets[1]);
var range = ws.Range["B2:D6"];
AddName("testname", range);
range.BorderAround2(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThick);
//Code 1
((Excel.Range)range.Cells[2, 1]).BorderAround2(Excel.XlLineStyle.xlDouble, Excel.XlBorderWeight.xlThick);
((Excel.Range)range.Cells[4, 1]).BorderAround2(Excel.XlLineStyle.xlDouble, Excel.XlBorderWeight.xlThick);
//Code 2
range.Range[range.Cells[2, 1], range.Cells[4, 1]].Interior.Color = ColorTranslator.ToOle(Color.Green);
//Code 3
range.Range[range.Cells[1, 0], range.Cells[3, 0]].Interior.Color = ColorTranslator.ToOle(Color.Red);
该代码创建了一个命名范围并在周围添加了粗边框,然后向代表我想要的范围边界的单元格添加了双边框。
它将使用相同单元格的范围的背景设置为绿色,将我想要的范围的背景设置为红色。
这是结果:
我想要做的是 select 范围内第一列的单元格,除了第一列和最后一列(所以红色是我想要的)。
但似乎如果我单独 select 个单元格(代码 1),它的行为与我从相同单元格创建一个范围(代码 2)时的行为不同。
为了获得我想要的范围,我必须将所有索引移动一个(从 0 开始)(代码 3)。
这有什么原因吗,我错过了什么吗?我在 MSDN 中没有看到任何相关信息。
查看此处的备注:https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.range.aspx。对于范围 属性,单元格相对于定义的范围,因此移动 1.
我目前正在评估 VSTO 以用 Excel 2010 替换我们使用的 VBA,所以我对这个 Excel 互操作完全陌生。
在测试过程中,我有时会在使用范围和单元格时遇到问题,有时数组似乎是从 1 开始的,有时它们似乎是从 0 开始的,我没有找到任何相关信息。
这是一个小例子:
var ws = ((Excel.Worksheet)Globals.ThisWorkbook.Application.ActiveWorkbook.Sheets[1]);
var range = ws.Range["B2:D6"];
AddName("testname", range);
range.BorderAround2(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThick);
//Code 1
((Excel.Range)range.Cells[2, 1]).BorderAround2(Excel.XlLineStyle.xlDouble, Excel.XlBorderWeight.xlThick);
((Excel.Range)range.Cells[4, 1]).BorderAround2(Excel.XlLineStyle.xlDouble, Excel.XlBorderWeight.xlThick);
//Code 2
range.Range[range.Cells[2, 1], range.Cells[4, 1]].Interior.Color = ColorTranslator.ToOle(Color.Green);
//Code 3
range.Range[range.Cells[1, 0], range.Cells[3, 0]].Interior.Color = ColorTranslator.ToOle(Color.Red);
该代码创建了一个命名范围并在周围添加了粗边框,然后向代表我想要的范围边界的单元格添加了双边框。
它将使用相同单元格的范围的背景设置为绿色,将我想要的范围的背景设置为红色。
这是结果:
我想要做的是 select 范围内第一列的单元格,除了第一列和最后一列(所以红色是我想要的)。
但似乎如果我单独 select 个单元格(代码 1),它的行为与我从相同单元格创建一个范围(代码 2)时的行为不同。
为了获得我想要的范围,我必须将所有索引移动一个(从 0 开始)(代码 3)。
这有什么原因吗,我错过了什么吗?我在 MSDN 中没有看到任何相关信息。
查看此处的备注:https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.range.aspx。对于范围 属性,单元格相对于定义的范围,因此移动 1.