2016-08-01 129 views
4

有谁知道如何解决OpenOffice Calc无法处理单元格中的新行的问题的方法正确吗?openoffice calc - 换行在单元格中导致重复值(pandas/openpyxl)

我有一个python脚本,它是通过熊猫使用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中查看。

感谢

+0

什么是您的操作系统和Office版本? –

+0

WIndows 10,只是Excel Viewer,但说Excel在Excel中工作正常,只是不是OpenOffice(4.1.2) – GuHuka

回答

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

对不起,在删除敏感数据时我会过分简化代码更新原始帖子)。对于单个项目,它似乎工作正常,但处理超过17个项目时,出现错误的时候。原始脚本正在制作一个包含100个项目的列表。确认了 – GuHuka

+0

。安装了LibreOffice 5.2.0.4,代码已成功处理3000多个项目。 – GuHuka

0

当我运行与最近熊猫和XlsxWriter我得到Excel中的预期输出的例子:

enter image description here

然而,在这种情况下,Excel将自动调整行的高度2来补偿。这在OpenOffice中可能不会发生。

在这种情况下,你可以明确的设置是这样的:

worksheet.set_row(1, 45) 
+0

这个问题不在Excel中,只能在OpenOffice Calc中查看 – GuHuka

相关问题