对openpyxl的iter_rows()方法使用cell.value与cell.internal_value

时间:2016-05-27 13:33:34

标签: python openpyxl

我正在处理来自两台计算机的一段代码。我使用openpyxl从Excel工作表中读取数据,并使用load_workbook关键字参数data_only=Trueuse_iterators=True。根据我使用的计算机,我需要使用cell.valuecell.internal_value。为什么会这样?

这里是阅读:

raw_rows = []
for row in openpyxl_sheet.iter_rows():
    #  raw_rows.append([cell.internal_value for cell in row])
    raw_rows.append([cell.value for cell in row])
return raw_rows

作为一种临时解决方法,我已经在第3和第4行之间进行了交换。

在一台计算机上,cell.value向我提供了单元格数据,cell.internal_value会抛出以下属性错误:

AttributeError: 'RawCell' object has no attribute 'value'

在另一台计算机上,cell.valuecell.internal_value都会向我提供数据,但只有cell.internal_value才能提供正确的数据。

从我在阅读网站上的其他问题时可以看出,我应该使用cell.internal_value。我已经使用Anaconda在两台计算机上安装openpyxl。

1 个答案:

答案 0 :(得分:0)

我在每台计算机上使用不同版本的openpyxl。我以为他们是相同的,因为我使用Anaconda安装每个。这些问题已通过conda update openpyxl修复。更新后,使用cell.value适用于两者。

我会留下这个问题,以防其他用户可以识别出一个不会假设您能够更改openpyxl版本的解决方案。