代码之家  ›  专栏  ›  技术社区  ›  Julien N

使用范围和单元格时,数组似乎从0开始,而不是从1开始

  •  1
  • Julien N  · 技术社区  · 10 年前

    我目前正在评估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);
    

    代码创建了一个命名范围,并在周围添加了一个粗边框,然后在表示所需范围边界的单元格中添加了一条双边框。
    对于使用相同单元格的范围,它将背景设置为绿色,对于我所需的范围,背景设置为红色。
    结果如下:
    enter image description here

    我想做的是选择范围中除第一列和最后一列之外的第一列的单元格(所以红色是我想要的)。 但是,如果我单独选择单元格(代码1),它的行为与我从相同单元格创建范围(代码2)的行为不同。
    为了得到我想要的范围,我必须将所有索引移位一(从0开始)(代码3)。

    有什么原因吗,我错过了什么吗?我在MSDN上看不到任何关于这方面的内容。

    1 回复  |  直到 10 年前
        1
  •  2
  •   PaulF    10 年前

    查看此处的备注: https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.range.aspx 使用Range属性,单元格相对于定义的范围,因此偏移1。

    推荐文章