[英]Accessing the value of the intersection of named ranges of an Excel spreadsheet in Python using xlrd?
在Excel VBA中,您可以使用Intersect函數,該函數返回作為參數交集的范圍對象。 然后,您可以像這樣從中獲取價值。
Intersection("Name1", "Name2").Value
在標准單元格公式中,您可以執行以下操作:
=Name1 Name2
如何使用xlrd完成此操作? 我嘗試閱讀Name類,並且area2d看起來像我將要使用的東西,但是我不知道如何將所有這些聯系在一起。
據我所知, xlrd
本身不支持這種相交功能。 對於您描述的矩形范圍,您可以使用Name
類很容易地計算出相交,就像您自己已經建議的那樣。
我在Python 2.7.2
使用的xlrd-0.9.0
發行版有一個目錄examples
,該examples
顯示了如何使用命名范圍。 它帶有文件名namesdemo.xls
,它是舊版本的Excel(其版本為97-2004
)的工作簿。
使用該文件確定名為Sales
的區域中的單元格的示例如下:
>>> import xlrd
>>> book=xlrd.open_workbook('namesdemo.xls')
>>> nameObj = book.name_and_scope_map.get(('sales', -1))
>>> nameObj.area2d()[1:5]
(1, 2, 1, 14)
>>> nameObj.result.text
u'Sheet3!$B$2:$N$2'
您可以解析最后一個結果以獲得您范圍內的單元格矩形,或使用area2d()
函數返回的元組中的元素[1:5]
-它們代表rowxlo
, rowxhi
, colxlo
和colxhi
。 對另一個范圍執行相同的操作,然后可以“手動”相交。
注意對name_and_scope_map.get()
的調用中的小寫名稱'sales'
。 這是必需的,因為Excel沒有區分大小寫的范圍名稱。 -1
參數表示應在所有工作表上全局搜索名稱。
如果以較新的Excel .xlsx
格式保存,則Name
對象的行為似乎略有不同:
>>> book=xlrd.open_workbook('namesdemo.xlsx')
>>> nameObj = book.name_and_scope_map.get(('sales', -1))
>>> nameObj.formula_text
u'Sheet3!$B$2:$N$2'
在這種情況下,我還沒有找到通過area2d()
訪問任何實際坐標的任何方法:
>>> nameObj.area2d()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/xlrd/book.py", line 291, in area2d
self.dump(self.book.logfile,
AttributeError: 'NoneType' object has no attribute 'logfile'
所以看起來你需要解析formula_text
字符串或檢查出的源代碼xlrd
,看看你是否能:-)修復
示例腳本xlrdnameAPIdemo.py
提供了更多說明,例如有關如何在特定范圍/工作表中查找命名范圍的說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.