【问题标题】:Fastest way to format a column with openpyxl (Python)使用 openpyxl (Python) 格式化列的最快方法
【发布时间】:2018-08-13 20:55:55
【问题描述】:

我正在使用 Openpyxl 并为动态确定的列数和行数(基于可用数据)应用数字格式,例如

ws.cell(row=i, column=idx + 1).number_format = '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'

格式化一些较大的工作簿需要很长时间。

我想要完成的只是创建将整数和浮点数视为数字(没有小数位或两位小数)而不是字符串的工作簿,我希望所有idx 列都这样。我读过它是可能的,大概与此有关:https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/numbers.html 但我不确定如何实现这一点。

【问题讨论】:

  • 使用命名样式可能会获得更好的性能,但这里没有真正的捷径:必须更改每个单元格的样式信息。
  • 为什么不在将字符串“插入”到工作簿之前将它们转换为浮点数?

标签: python openpyxl


【解决方案1】:

如果您想要完成的只是让 Excel 将数字视为数字而不是字符串,您可以尝试将它们转换为 python 中的浮点数。这种方法比为每个单元格分配格式快近 50%;

ws.cell(row=i, column=idx + 1).value = float(ws.cell(row=i, column=idx + 1).value)

【讨论】:

  • 我在一列中测试了 100000 个数字,并将单元格格式分配给每个单元格需要 0.6240622997283936,而在 python 中转换值并将其分配回来只需要 0.3340334892272949
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 2019-02-11
相关资源
最近更新 更多