2016-08-01 84 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

相關問題