如何使用python从excel获取特定单元格的命名范围

时间:2012-09-04 09:23:21

标签: xlrd named-ranges

我需要为特定单元格输入“命名范围”值。

我在excel中为(A4,B4)单元格输入“命名范围”值,读取我们使用sh.cell(row,col)的单元格值但是如何获取该单元格的名称范围值。

我没有得到怎么做......

帮助我..提前谢谢

2 个答案:

答案 0 :(得分:0)

不幸的是我没有足够的代表发表评论,所以我会尽力从你的问题中理解。

所以,如果我做对了,你在工作表上有一个命名范围,其中范围的名称,由sh.Range(“A4:B4”)引用,是'name_a_range'(我包括下划线,因为你可以名字中有空格。

您可以从Sheets.Cells(row,col).Value中获取值,但是您希望通过命名范围执行此操作。

好的,要做到这一点:

    Dim valA as Variant, valB as Variant
    Dim valArray() as Variant
    '' To get the value in Cell "A4"
    valA = sh.Range("name_a_range").Cells(1,1).Value

    '' To get the value in Cell "B4"
    valB = sh.Range("name_a_range").Cells(1,2).Value

    '' Or if you have a Variant() array already Dim'ed (like above)
    valArray = sh.Range("name_a_range").Value

工作表的Range对象可以采用:

    '' Expression for a range: "A4" to "B4" , using Cells
    sh.Range(sh.Cells(4,1),  sh.Cells(4,2)) 

    '' Expression for a range: "A4" to "B4" , using xlA1 format
    ''  *Which is the most familiar
    sh.Range("A4:B4")

    '' Expression for a range: "A4" to "B4" , using name
    sh.Range("PreviouslyNamedRange")

对于任何范围,您可以将其视为自己的数组(从位置1开始)。 如果范围的大小(尺寸)未知,您可以使用内置的Range函数:

    sh.Range("name_a_range").Rows.Count '' returns 1
    sh.Range("name_a_range").Column.Count '' returns 2

至于标题中的Python方面,您将使用相同的语法:

虽然,我不使用xlrd,而是使用win32com.client通过python驱动Excel

    from win32com.client import Dispatch
    app_xl = Dispatch("Excel.Application")
    wb = app_xl.Workbooks.Open("Path\\To\\Your\\Workbook.xlsx")
    range = wb.Sheets(1).Range("name_a_range").Value

例如,我在我的一张表格上运行了这个:

    >>> from win32com.client import Dispatch
    >>> app_xl = Dispatch("Excel.Application")
    >>> wb = app_xl.Workbooks.Open("C:\***\***\excel_vba_tests\getinfo.xlsx")
    >>> rangeValues = wb.Sheets("Summary").Range("avgVolume").Value
    >>> rangeValues
    ((u'Avg/Wk',), (Decimal('791517.25'),), (Decimal('796369'),), (Decimal('769922.8846'),), (Decimal('743311.549'),))

在这里,我打开了我的工作簿“getinfo.xlsx”,在我的名为“摘要”的工作表中,我能够获得我命名范围内的所有值“avgVolume”

这有用/您在寻找什么?由于我不太确定你的问题是什么,我认为我会尽可能多地点击。

答案 1 :(得分:0)

from xlsxwriter.utility import xl_rowcol_to_cell

cell = xl_rowcol_to_cell(1, 2)  # C2

print(cell)