在使用openpyxl的数千行代码中,我们更新了openpyxl(版本为2.6.2),似乎影响向后兼容性的更改缺少文档。
有人(查理?)能否确认以前返回字母的.column
现在返回数字,并且必须使用新方法.column_letter
来返回字母? (我从文档中正确理解了吗?)
在新版本中,.column
和.col_idx
返回的内容之间有什么区别吗? (这些基本返回的是相同的东西,还是一个从零开始而另一个从一个开始?还是...?)
要更新我们的代码,如果仅用.column
搜索/替换.column_letter
(期望列字母),还有其他需要注意的地方吗? (例如,.column_letter
返回的col ltr是否会完全偏移,或与旧.column
完全相同?)
答案 0 :(得分:0)
是的,OpenPyXL 2.6+中有一些重大更改,以某种方式错过了足够的文档。
.column
的功能是一个值得注意的更大变化,因为它也会影响.column_letter
/ .merge_cells
方法。
在合并范围内的某个单元格上不再可以使用.column_letter
或.col_idx
-您必须使用.column
(用于数字)或{{1 }}方法的字母。 (请注意,您必须从utils导入方法get_column_letter(cell)
:
get_column_letter
现在,回答您的特定问题:
1)是的,您现在必须使用from openpyxl.utils import get_column_letter
(不再是.column_letter
)来获取列字母-但是如上所述,使用.column
是更安全的。是的,get_column_letter(cell)
现在将返回一个数字,而不是字母。
2)是,.column
现在返回一个数字,就像.column
一样。 实际上,我建议不再使用.col_idx
,因为它不再适用于合并单元格范围内的单元格。
3)由于合并单元格范围的处理方式发生变化,因此将.col_idx
替换为.column
而不是get_column_letter(cell)
。因此,简单的搜索/替换是不可取的。但是,在合并的单元格之外,.column_letter
现在返回.column_letter
曾经做过的事情。