【问题标题】:How do I determine whether an Excel worksheet contains no values using openpyxl?如何使用 openpyxl 确定 Excel 工作表是否不包含任何值?
【发布时间】:2019-06-12 06:21:22
【问题描述】:

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

以前在 VBA 中编码时,我会找到 last-used-row 和 last-used-column 来检查工作表是否为“空”,但 openpyxl 中的 max_column 和 max_row 函数考虑了非值数据比如我想忽略的格式。

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

【问题讨论】:

  • 这可能与以下内容重复:stackoverflow.com/questions/37667315/…
  • 感谢您的回复!不幸的是,API 在过去两年中似乎发生了变化,并且 ReadOnlyWorksheet 没有属性“_cells”。如果有什么方法可以让我把用过的单元格放在一张纸上,那就太好了!
  • 一行获取所有空表名称的列表:[name for name in wb.get_sheet_names() if not (wb.get_sheet_by_name(name).get_cell_collection())],与wb = load_workbook('workbook.xlsx')
  • 不,这没有捷径可走:您必须自己检查单元格,并且您应该提到您正在以只读模式工作。

标签: python excel python-3.x openpyxl


【解决方案1】:

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

价值观
按行生成工作表中的所有单元格值

类型:生成器

如果工作簿 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)

输出空工作表:

Sheet2

虽然这样可行,但比仅使用要复杂一些:

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

尽管已弃用,但仍然有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-09-30
    • 2021-12-26
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多