确定openpyxl中的工作表是否为空

时间:2016-06-06 21:40:50

标签: openpyxl

我有一个应用程序,我写入工作表到最后一列+ 2如果已经有数据,那么如果工作表为空,则写入最后一列+ 1。我得到的是我认为的空白工作表,如下所示:

from openpyxl.workbook.workbook import Workbook
book = Workbook()
sheet = book.active

当我执行sheet.max_rowsheet.max_column时,我会为这两个属性获得1。我想得到零,所以我做了以下几点:

if sheet.max_row == 1 and sheet.max_column == 1 and not sheet['A1'].value:
    start_col = 1
else:
    start_col = sheet.max_column + 2

必须检查单元格的值似乎有点矫枉过正,更不用说容易出错了。我最初期望以下工作:

if sheet.max_column == 0:
    start_col = 1
else:
    start_col = sheet.max_column + 2

是否有max_rowmax_column总是>= 1的原因?这是一个错误,故意特征还是其他东西的合理副作用?最后,是否有解决方法(例如sheet.isempty())。

顺便说一句,我在浏览错误跟踪器时发现了以下注释:https://bitbucket.org/openpyxl/openpyxl/issues/514/cell-max_row-reports-higher-than-actual#comment-21091771

  

具有空单元格的行仍然是行。它们可能会格式化以备将来使用或其他内容,我们不知道。 2.3略有改进的启发式方法,但仍然包含一排空单元格。

这(以及另一个我无法找到链接的评论)让我相信第一个细胞总是存在。在这种情况下,是否值得提交功能请求?

1 个答案:

答案 0 :(得分:3)

确定工作表是否为空的唯一可靠方法#34;是查看_cells属性。但是,这是内部API的一部分,可能会发生变化。事实上几乎肯定会改变。

max_rowmax_column属性在内部用于计数器,必须为1或更多。

没有相关代码和测试的功能请求将被拒绝,我对'#34;空"的想法持怀疑态度。一般的工作表。