簡體   English   中英

使用xlrd訪問Python中Excel電子表格的命名范圍的交集值?

[英]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] -它們代表rowxlorowxhicolxlocolxhi 對另一個范圍執行相同的操作,然后可以“手動”相交。

注意對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM