我想获得以下输出。除了标题之外,所有行和列都是文本换行的:
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等,以便我将转向标题因此所有的行和列将被格式化< / p>
在上面的截图中,换行文本不适用于A1到E1,C1列有很多空格的标题。如果我手动点击换行文本它会对齐,否则所有标题都不会使用文本换行格式化。
答案 0 :(得分:3)
有几个问题:
您的代码正在尝试格式化标题,但是当您使用.to_excel()
创建文件时,您会告诉它从行/列1, 1
开始。虽然单元格的编号为0, 0
。所以,如果你改为:
df.to_excel(writer,sheet_name='Sheet1', startrow=0, startcol=0, header=True, index=False, encoding='utf8')
您会看到col A
和行1
都是格式化的:
即。 Col A
为0
,Row 1
为0
使用Pandas编写标题时,它会应用自己的格式,这将覆盖您提供的格式。要解决此问题,请关闭标题并使其仅从第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()
哪会给你:
注意:也可以告诉Pandas使用的样式,或强制它None
,以便它继承自己的风格。该方法的唯一缺点是,执行此操作所需的方法取决于正在使用的Pandas的版本。这种方法适用于所有版本。