Python openoffice calc-换行符导致单元格中的值重复(pandas/openpyxl)

Python openoffice calc-换行符导致单元格中的值重复(pandas/openpyxl),python,openoffice-calc,xlsxwriter,Python,Openoffice Calc,Xlsxwriter,有人知道如何解决OpenOffice Calc无法正确处理单元格中新行的问题吗 我有一个python脚本,通过pandas使用openpyxl动态生成excel工作簿 该脚本工作正常,但当我在OpenOffice中查看包含换行符的单元格时,所有值都会重复多次。如果我使用Microsoft Excel Viewer打开同一个文件,所有内容都会正确显示,如果我使用了新行以外的字符(例如逗号、#等),则这两个字符的显示都很好 我有一个变通方法,可以进入excel并使用宏替换随机字符,但如果可能的话,我

有人知道如何解决OpenOffice Calc无法正确处理单元格中新行的问题吗

我有一个python脚本,通过pandas使用openpyxl动态生成excel工作簿

该脚本工作正常,但当我在OpenOffice中查看包含换行符的单元格时,所有值都会重复多次。如果我使用Microsoft Excel Viewer打开同一个文件,所有内容都会正确显示,如果我使用了新行以外的字符(例如逗号、#等),则这两个字符的显示都很好

我有一个变通方法,可以进入excel并使用宏替换随机字符,但如果可能的话,我希望避免这种情况,因为这个过程确实需要完全自动化。另外,由于文件将由另一个内部工具处理,我确实需要用新行处理这些单元格,并且我无法更改字符

我也尝试过使用chr(10)和/或chr(13),但在前一种情况下,它在输出中被替换为“\n”,正如预期的那样

我当前使用的代码类似于:

test_list = []
for x in range(1,18):
    test_list.append([
        "value1",
        "\n".join(['element1', 'element2', 'element3']),
        "value3"
    ])

data_df = pd.DataFrame(test_list)

fn = r'/path/to/excel/file.xlsx'

writer = pd.ExcelWriter(fn, engine='xlsxwriter')
data_df.to_excel(writer, sheet_name='Data', index=False, header=0)
workbook = writer.book
worksheet = writer.sheets['Data']
worksheet.set_column('A:ZZ',50,
                     workbook.add_format({'text_wrap': True}))
writer.save()
元素数据在OpenOffice Calc单元格中显示为:

奇怪的是,最后一项似乎是正确的

作为列表或通过DataFrame.head()查看的相同数据显示良好:

pprint(test_list)
[['value1', 'element1\nelement2\nelement3', 'value3'],
['value1', 'element1\nelement2\nelement3', 'value3'],
['value1', 'element1\nelement2\nelement3', 'value3'],
['value1', 'element1\nelement2\nelement3', 'value3'],
['value1', 'element1\nelement2\nelement3', 'value3'],
['value1', 'element1\nelement2\nelement3', 'value3'],
...
['value1', 'element1\nelement2\nelement3', 'value3']]

data_df.head(18):
         0                             1       2
0   value1  element1\nelement2\nelement3  value3
1   value1  element1\nelement2\nelement3  value3
2   value1  element1\nelement2\nelement3  value3
...
15  value1  element1\nelement2\nelement3  value3
16  value1  element1\nelement2\nelement3  value3
就在它被传递到openpyxl库并在OpenOffice中查看时


感谢

当我使用最近的Pandas和XlsxWriter运行您的示例时,我在Excel中得到了预期的输出:

但是,在这种情况下,Excel会自动调整第2行的高度以进行补偿。这在OpenOffice中可能不会发生

在这种情况下,您可以这样显式设置:

worksheet.set_row(1, 45)

我在Windows上使用OpenOffice 4.1.2时,代码运行良好:

对于这个屏幕截图,我双击了第二行的底部来展开它。在此之前,它只显示了带有红色三角形的
element3
。但这似乎与你描述的行为不同

编辑

好的,我现在可以确认问题了。正如你所说,它出现在神秘的18件物品中。这看起来像OpenOffice中的一个bug,因为解压缩
file.xlsx
查看的XML文件没有太大差别

我还尝试将CR和LF直接添加到XML文件中,但结果是:

这就给我们留下了三个解决方案:

  • 改用LibreOffice,它没有这个问题(测试LO 5.1.0.3)
  • 等待新版本
  • 使用OpenOffice首选的
    .ods
    格式,而不是MS Office首选的格式

  • 您的操作系统和Office版本是什么?WIndows 10,只是Excel查看器,但正如所说的,在Excel中工作良好,而不是OpenOffice(4.1.2)。对不起,在删除敏感数据时,我过于简化了代码(更新了原始帖子)。对于单个项目,它似乎可以正常工作,但当处理超过17个项目时,它就会出错。原始脚本正在生成100个项目的列表。已确认。已安装LibreOffice 5.2.0.4,代码已成功处理3000多个项目。问题不在Excel中,仅在OpenOffice Calc中查看