Python 如何使用openpyxl确定Excel工作表是否不包含任何值?
我正在编写一个Python 3.7.2脚本来检查Excel文件中未使用的工作表,我需要一种方法来确定当前工作表是否不包含任何值。以前,当我在VBA中编码时,我会查找最后使用的行和最后使用的列来检查工作表是否为“空”,但openpyxl中的max_列和max_行函数考虑了非值数据,如我希望忽略的格式。有没有办法检查给定工作表的所有单元格是否都不包含任何值 以前,当我在VBA中编码时,我会查找最后使用的行和最后使用的列来检查工作表是否为“空”,但openpyxl中的max_列和max_行函数考虑了非值数据,如我希望忽略的格式Python 如何使用openpyxl确定Excel工作表是否不包含任何值?,python,excel,python-3.x,openpyxl,Python,Excel,Python 3.x,Openpyxl,我正在编写一个Python 3.7.2脚本来检查Excel文件中未使用的工作表,我需要一种方法来确定当前工作表是否不包含任何值。以前,当我在VBA中编码时,我会查找最后使用的行和最后使用的列来检查工作表是否为“空”,但openpyxl中的max_列和max_行函数考虑了非值数据,如我希望忽略的格式。有没有办法检查给定工作表的所有单元格是否都不包含任何值 以前,当我在VBA中编码时,我会查找最后使用的行和最后使用的列来检查工作表是否为“空”,但openpyxl中的max_列和max_行函数考虑了非
理想情况下,我能够找到一种方法来获取上次使用的列和行,就像我在VBA中使用的一样,但是如果有人能告诉我我可以使用什么工具来构建一个简单的函数,我将不胜感激。在这个函数中,你可以向它传递一个工作表,它根据它是否没有值来判断是真是假。与我在评论中的建议相反,
ws.get\u cell\u collection()
不推荐使用,但是您可以迭代openpyxl.sheet.sheet
模块的
属性,自(来自文档):
值按行生成工作表中的所有单元格值 类型:发电机 对于包含两个工作表的工作簿
workbook.xlsx
,Sheet1
确实包含一些带值的单元格,但是Sheet2
在所有空单元格中明显为空:
wb = load_workbook('workbook.xlsx')
for name in wb.get_sheet_names():
isempty = False
for row in wb.get_sheet_by_name(name).values:
if all(value == None for value in row):
isempty = True
else:
isempty = False
if isempty:
print(name)
输出空工作表:
尽管这样做有效,但它比仅使用更复杂:
empty_sheets = [name for name in wb.get_sheet_names() if not (wb.get_sheet_by_name(name).get_cell_collection())]
尽管已弃用,但仍然有效。这可能是以下内容的重复:感谢您的回复!不幸的是,API在过去两年中似乎发生了变化,ReadOnlyWorksheet没有属性“\u cells”。如果有什么办法,我可以得到一个表中使用的细胞,这将是伟大的!一行获取所有空工作表名称的列表:
[在wb中为名称命名。如果不是(wb.get\u sheet\u by\u name(name)。get\u cell\u collection())]
,使用wb=load\u工作簿('workbook.xlsx')
否,这没有捷径:你必须自己检查单元格,你应该提到你是在只读模式下工作的。
empty_sheets = [name for name in wb.get_sheet_names() if not (wb.get_sheet_by_name(name).get_cell_collection())]