代码之家  ›  专栏  ›  技术社区  ›  Dinesh

如何用C语言读取Excel中非相邻单元格的数据#

  •  0
  • Dinesh  · 技术社区  · 14 年前

    如果两个细胞相邻,我就可以得到范围并进行手术。但是如果两个细胞不相邻,我就不能得到这个范围。 这个 Selection.Range 总是给出我们选择的最后一个单元格的地址。

    但我们需要得到所有细胞的地址,我不能做到这一点。

    有谁能给我建议一个处理这种情况的方法吗。

    示例代码:

    Range objRange = (Range) Globals.ThisAddIn.Application.Selection;
                    int nColCount = objRange.Columns.Count;
                    int nRowCount = objRange.Rows.Count;
    

    我根据你的建议试过这个代码,

     Range objRange = (Range) Globals.ThisAddIn.Application.Selection;
    
            foreach (Range cell in objRange)
            {
                MessageBox.Show("" + cell.Value2);
            }
    

    但没用。它总是给出最后一个选定的单元格。我选择了A1,A4,A13,A16细胞。但是这个代码只返回A16单元格的值。

    2 回复  |  直到 14 年前
        1
  •  0
  •   VinayC    14 年前

    范围继承自IEnumerable。因此可以使用for-each迭代器通过所有单元格进行枚举。 请参见下面的等效VBA代码:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim result As String
      result = ""
      Dim c As Range
      For Each c In Me.Application.Selection
        result = result & ", " & c.Text
      Next c
      Me.Cells.Item(1, 1).Value = result 
    End Sub
    

    你可以随时使用Range.Row, Range.Column 获取手机地址。

    foreach(Range cell in objRange)
    {
       // now access cell's properties - c.Value will give value
    }
    
        2
  •  0
  •   Dinesh    14 年前

    经过多次尝试,我得到了答案。

    Areas objAreas = (Areas)objRange.Areas;
    foreach (Range area in objAreas)
    {
       string CellAddress = (GetExcelColumnName(area.Column) + "" + area.Row);
       MessageBox.Show(CellAddress);
    }