如何使用openpyxl确定Excel工作表是否不包含任何值?

时间:2019-01-18 00:40:07

标签: python excel python-3.x openpyxl

我正在编写Python 3.7.2脚本来检查Excel文件中是否有未使用的工作表,并且我需要一种方法来确定当前工作表是否不包含任何值。以前,当我在VBA中进行编码时,我会找到最后使用的行和最后使用的列来检查工作表是否为“空”,但是openpyxl中的max_column和max_row函数会考虑非值数据,例如格式化我想忽略。有什么方法可以检查给定工作表的单元格中是否没有任何值?

以前,当我在VBA中编码时,我会找到最后使用的行和最后使用的列来检查工作表是否为“空”,但是openpyxl中的max_column和max_row函数会考虑非值数据就像我想忽略的格式。

理想情况下,我将能够找到一种方法,就像我在VBA中一样,获取last_used_column和last_used_row,但是如果有人可以告诉我我可以用来构建简单函数的任何工具,我将不胜感激将其传递给工作表,并根据其是否没有值吐出T​​rue或False。

1 个答案:

答案 0 :(得分:2)

与我在评论中的建议相反,ws.get_cell_collection()已过时,但您可以遍历openpyxl.worksheet.worksheet模块的  values属性,因为(来自文档):

  


  按行产生工作表中的所有单元格值

     

类型:生成器

对于包含两个工作表的工作簿workbook.xlsxSheet1确实包含一些带有值的单元格,但是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)

输出空白纸:

Sheet2

尽管可以,但是比仅使用它要复杂一些:

empty_sheets = [name for name in wb.get_sheet_names() if not (wb.get_sheet_by_name(name).get_cell_collection())] 

尽管已弃用,但仍然可以使用。