openoffice calc - newline导致单元格中的重复值(pandas / openpyxl)

时间:2016-08-01 21:57:08

标签: python openoffice-calc xlsxwriter

有没有人知道如何解决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单元格中显示如下:

Openoffice Cells

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

查看列表或通过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中查看。

由于

2 个答案:

答案 0 :(得分:2)

在Windows上使用OpenOffice 4.1.2,代码工作正常:

enter image description here

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

修改

好的,我现在可以确认问题了。如你所说,它出现了神秘数量的18项。它看起来像是OpenOffice中的一个错误,因为通过解压缩file.xlsx查看的XML文件没有太大区别。

我还尝试将CR和LF直接添加到XML文件中,但这只会导致:

enter image description here

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

  1. 请使用LibreOffice,它没有此问题(已测试LO 5.1.0.3)。
  2. Report the bug并等待新版本。
  3. 使用OpenOffice的首选.ods格式,而不是MS Office的首选格式。

答案 1 :(得分:0)

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

enter image description here

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

在这种情况下,您可以像这样明确地设置它:

worksheet.set_row(1, 45)