按行NUMBER和列LETTER获取Excel单元格

时间:2011-07-19 20:47:23

标签: vb.net excel interop

在VB.NET中,使用Interop.Excel,我需要根据行号和列字母访问一个单元格。我试着运气......

pages.title = DirectCast(wksht.Cells(rows, "D"), Excel.Range).Value

由于参数采用了类型对象,我想也许这样可行,但没有运气。我还想过将每个字母枚举为一个数字,但电子表格中的列并不正常。意思是,他们不是

A B C D E F G

他们实际上是......

A B C D E T AZ

我不知道这是否会对列的编号产生影响。问题应该是显而易见的,但重申一下,如何根据行号和列字母获取单元格?

3 个答案:

答案 0 :(得分:7)

对于单个细胞:

wksht.Range(colLetter + rows)

MSDN link

答案 1 :(得分:3)

将字符的ASCII值用作“基础”系统

  

“A”= 1 = A的ASCII值 - A + 1的ASCII值

     

“AA”= 27 =(A的ASCII值 - A +的ASCII值)* 26 +(A的ASCII值 - A +1的ASCII值)

     

“BA”=(B的ASCII值 - A + 1的ASCII值)* 26 +(A的ASCII值 - A + 1的ASCII值)

等,乘以26乘以(数字-1)

的幂
Function GetIndex(ByVal str As String) As Integer
        Dim i As Integer
        str = str.ToUpper()
        GetIndex = 0
        For i = str.Length - 1 To 0 Step -1
            GetIndex = GetIndex + (26 ^ (str.Length - i - 1)) * (Asc(str(i)) - Asc("A") + 1)
        Next
End Function

答案 2 :(得分:2)

试试这个:

Dim oWorksheet as Worksheet : Set oWorksheet = ActiveSheet

Dim iRow As Integer : iRow = 10
Dim strColumn as String : strColumn = "AZ"

Dim oCell as Range
Set oCell = oWorksheet.Cells(iRow, 1).Range(strColumn & "1")

oWorksheet.Cells(iRow, 1)为您提供所需行的第一个单元格,.Range(strColumn & "1")根据列字母为您提供水平偏移量。


编辑:请参阅Lance Roberts对更简单解决方案的回答。