2011-07-19 34 views
3

在VB.NET中,使用Interop.Excel,我需要根据行号和列字母访问单元格。我想我的运气...按行获取Excel单元格和列字母

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

由于参数object类型,我想也许这会工作,但没有得到运气。我还想过将每个字母列举到一个数字中,但电子表格中的列并不正常。意思是,他们不是

A B C d E F G

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

A B C d(E T)AZ

我不知道这使得在列的编号不同。这个问题应该是显而易见的,但只是重申一下,我如何根据行号和列字母来获取单元格?

+1

如果列编号(字母)顺序,你可能有隐藏的列。如果您的列T不是第20列,我会非常惊讶。在Excel中,您可以通过在要测试的列中写入公式= = COLUMN()来测试。 –

回答

7

对于单细胞:

wksht.Range(colLetter + rows) 

MSDN link

3

使用的字符的ASCII值作为 “基本” 系统

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

“AA”= 27 = (A的ASCII值--A + 1的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

乘以尝试这种情况:

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")给你一个基于列字母的水平偏移量。


编辑:见兰斯·罗伯茨的答案更简单的解决方案。

+0

因此,如果我正确理解这一点,第二部分会给我指定列中的单元格? – MGZero

+0

是的。它将被评估为.Range(“AZ1”),它将相对于当前单元格(第10行中的第一个单元格)进行评估。 “1”部分表示相同的行,而“AZ”部分表示列“AZ”。由于当前单元格在列A中,因此这是实际的列AZ。 –

+0

Aaargh。我已经过度复杂了。兰斯罗伯茨的答案要好得多。 –

相关问题