2要问的问题:
问题1:我刚开始学习xlrd在python中读取excel文件。我想知道xlsrd-->中是否有类似于openpyxl中get_active_sheet()
的方法或任何其他方法来获取活动工作表?
get_active_sheet()
在openpyxl
中执行此操作
导入openpyxlwb=openpyxl.load_workbook('example.xlsx')active_sheet=wb.get_active_sheet()
输出:工作表"Sheet1"
我在xlrd
中找到了检索工作表名称的方法,但没有一个能告诉我活动的工作表。
问题2:
xlrd
是python中读取excel文件的最佳包吗?我还发现了这篇文章,其中包含了其他用于读取和写入excel文件的python包(xlsxwriter
xlwt
xlutils
)的信息。
以上哪一项最适合制作一个读取Excel文件并对不同列应用不同验证的应用程序
例如:标题为"ID"的列应具有唯一值,标题为"Country"的列应有有效的Country。
;活性片";您所指的似乎是保存/关闭工作簿时选择的最后一张工作表。您可以通过sheet_visible
值获取此工作表。
import xlrd
xl = xlrd.open_workbook("example.xls")
for sht in xl.sheets():
# sht.sheet_visible value of 1 is "active sheet"
print(sht.name, sht.sheet_selected, sht.sheet_visible)
通常一次只选择一张图纸,因此看起来sheet_visible
和sheet_selected
可能相同,但一次可以选择多张图纸(例如,ctrl+单击多个图纸选项卡)。
这可能看起来令人困惑的另一个原因是Excel使用";可见";就隐藏/可见片材而言。在xlrd中,这是sheet.visibility(请参见https://stackoverflow.com/a/44583134/4258124)
欢迎使用Stack Overflow
。
我已经在Python
中处理Excel
文件有一段时间了,所以我想我可以帮助你解决你的问题。
openpyxl
和xlrd
解决了不同的问题,一个是针对xlsx
文件(Excel 2007+),另一个是分别针对xls
文件(Excel 1997-2003)。
Xenon
在他的回答中说Excel
不认识active
片材的概念,这不是完全正确的。如果您打开一个Excel
文档,转到另一张工作表(不是第一张)并保存并关闭该文档,下次打开时,Excel
将打开您上一张工作单上的文档。
但是,xlrd
不支持这种工作流程,即请求active
表单。如果知道图纸名称,则可以使用方法sheet_by_name
;如果知道图纸索引,则可以采用方法sheet_by_index
。
我不知道xlrd
是否是最好的包装,但它非常坚固,我使用它没有任何问题。
给出的例子可以通过以下方式解决:首先遍历第一行,并保留标题所在列的字典。然后将ID列中的所有值存储在列表中,并将该列表的长度与从该列表创建的集合(即len(values) == len(set(values))
)的长度进行比较。然后,您可以遍历标题为Country的列,并检查每个值是否在您之前使用所有有效郡创建的词典中。
我希望这个答案能满足你的需要。
总结:坚持xlrd
是因为它足够成熟。
您可以使用sheet_names()
函数查看给定工作簿中的所有工作表。Excel没有"活动工作表"的概念,但如果我认为你指的是第一张工作表的假设是正确的,你可以获得sheet_names()
的第一个元素来获得"活动工作单"
关于你的第二个问题,客观地说一个包裹比另一个包裹好并不容易。然而,xlrd
被广泛使用,并且是最流行的Python库的作用。
我建议坚持下去。