我有一个应用程序,我写入工作表到最后一列+ 2如果已经有数据,那么如果工作表为空,则写入最后一列+ 1。我得到的是我认为的空白工作表,如下所示:
from openpyxl.workbook.workbook import Workbook
book = Workbook()
sheet = book.active
当我执行sheet.max_row
和sheet.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_row
和max_column
总是>= 1
的原因?这是一个错误,故意特征还是其他东西的合理副作用?最后,是否有解决方法(例如sheet.isempty()
)。
顺便说一句,我在浏览错误跟踪器时发现了以下注释:https://bitbucket.org/openpyxl/openpyxl/issues/514/cell-max_row-reports-higher-than-actual#comment-21091771:
具有空单元格的行仍然是行。它们可能会格式化以备将来使用或其他内容,我们不知道。 2.3略有改进的启发式方法,但仍然包含一排空单元格。
这(以及另一个我无法找到链接的评论)让我相信第一个细胞总是存在。在这种情况下,是否值得提交功能请求?
答案 0 :(得分:3)
确定工作表是否为空的唯一可靠方法#34;是查看_cells
属性。但是,这是内部API的一部分,可能会发生变化。事实上几乎肯定会改变。
max_row
和max_column
属性在内部用于计数器,必须为1或更多。
没有相关代码和测试的功能请求将被拒绝,我对'#34;空"的想法持怀疑态度。一般的工作表。