2017-08-30 101 views
3

我想獲得以下輸出。所有的行和列的文字,除了包裹雖然標題:閱讀csv文件,並寫入文本文件包裝的excel文件

Excel screenshot

import pandas as pd 
    import pandas.io.formats.style 
    import os 
    from pandas import ExcelWriter 
    import numpy as np 

    from xlsxwriter.utility import xl_rowcol_to_cell 
    writer = pd.ExcelWriter('test1.xlsx',engine='xlsxwriter',options={'strings_to_numbers': True},date_format='mmmm dd yyyy') 
    df = pd.read_csv("D:\\Users\\u700216\\Desktop\\Reports\\CD_Counts.csv") 
    df.to_excel(writer,sheet_name='Sheet1',startrow=1 , startcol=1, header=True, index=False, encoding='utf8') 
    workbook = writer.book 
    worksheet = writer.sheets['Sheet1'] 

    format = workbook.add_format() 
    format1 = workbook.add_format({'bold': True, 'align' : 'left'}) 
    format.set_align('Center') 
    format1.set_align('Center') 
    format.set_text_wrap() 
    format1.set_text_wrap() 
    worksheet.set_row(0, 20, format1) 
    worksheet.set_column('A:Z', 30, format) 
    writer.save() 

格式適用於除頭部所有的行和列。我不知道爲什麼格式不適用於第一列(標題),或者我想手動添加列標題號碼,如0,1,2等,這樣我就會打開標題,因此所有的行和列將被格式化

在上面的截圖中,文本不適用於A1到E1,C1列有很多空間的頭。如果我手動點擊包裝文本,它會被對齊,否則所有的頭文件都不會使用文本包裝進行格式化。

+0

我建議你編輯這個問題,以包含來自Excel的屏幕截圖,顯示你希望數據如何顯示。 –

+0

列格式不應用於第一行中的標題單元格,因爲Pandas已將單元格格式應用於這些單元格並覆蓋列格式。在這個SO問題和解釋中查看[下面的解決方法](https://stackoverflow.com/questions/36694313/pandas-xlsxwriter-format-h​​eader)。 – jmcnamara

+0

我試過了pd.formats.format.header_style = None它會拋出錯誤模塊'pandas'沒有屬性'格式' – prasi

回答

2

兩個問題:

  1. 您的代碼正確試圖格式化頭,但是當你創建你的文件使用.to_excel()你告訴它的行/列1, 1啓動。細胞雖然編號從0, 0。所以,如果你更改爲:

    df.to_excel(writer,sheet_name='Sheet1', startrow=0, startcol=0, header=True, index=False, encoding='utf8') 
    

    你會看到山坳A和行1都是格式化的:

    excel screenshot

    Col A0Row 10

  2. 當使用熊貓要寫入標題,它將應用自己的格式,它將覆蓋您提供的格式。爲了解決這個問題,請關閉標題並將其從第1行開始寫入,然後手動寫入標題。

下可能會更清楚一點:

import pandas as pd 
import pandas.io.formats.style 
import os 
from pandas import ExcelWriter 
import numpy as np 

from xlsxwriter.utility import xl_rowcol_to_cell 

writer = pd.ExcelWriter('test1.xlsx', engine='xlsxwriter', options={'strings_to_numbers': True}, date_format='mmmm dd yyyy') 
#df = pd.read_csv("D:\\Users\\u700216\\Desktop\\Reports\\CD_Counts.csv") 
df = pd.read_csv("CD_Counts.csv") 
df.to_excel(writer, sheet_name='Sheet1', startrow=1 , startcol=0, header=False, index=False, encoding='utf8') 
workbook = writer.book 
worksheet = writer.sheets['Sheet1'] 

format_header = workbook.add_format() 
format_header.set_align('center') 
format_header.set_bold() 
format_header.set_text_wrap() 
format_header.set_border() 

format_data = workbook.add_format() 
format_data.set_align('center') 
format_data.set_text_wrap() 

worksheet.set_column('A:Z', 20, format_data) 
worksheet.set_row(0, 40, format_header) 

# Write the header manually 
for colx, value in enumerate(df.columns.values): 
    worksheet.write(0, colx, value) 

writer.save() 

這將使你:

header with text wrap from pandas

注:也可以告訴熊貓的風格使用,或強制它到None,所以它會繼承自己的風格。這種方法唯一的缺點是所需的方法取決於正在使用的Pandas版本。這種方法適用於所有版本。

+0

列A是0,列1是0不工作:(中心對齊正在工作,但是文本換行不起作用。在C1列中有一個標題,它有很多空間,它不包含文本: ( – prasi

+0

請添加你正在試圖獲得你的問題的截圖(即在Excel中手動製作一個正確的) –

+0

我已經添加了一個截圖,請看看它 – prasi