我目前正在评估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);
代码创建了一个命名范围,并在周围添加了一个粗边框,然后在表示所需范围边界的单元格中添加了一条双边框。
对于使用相同单元格的范围,它将背景设置为绿色,对于我所需的范围,背景设置为红色。
结果如下:
我想做的是选择范围中除第一列和最后一列之外的第一列的单元格(所以红色是我想要的)。
但是,如果我单独选择单元格(代码1),它的行为与我从相同单元格创建范围(代码2)的行为不同。
为了得到我想要的范围,我必须将所有索引移位一(从0开始)(代码3)。
有什么原因吗,我错过了什么吗?我在MSDN上看不到任何关于这方面的内容。