无法获得文本换行或垂直居中以与 xlsxwriter 一起使用
Unable to get text wrapping or vertical centering to work with xlsxwriter
我正在处理 Pandas 中的一组数据帧。将这些数据帧打印到 .xlsx 文件时,我将每个数据帧打印到不同的选项卡。我在保存之前使用 xlsxwriter 来格式化工作表。当我尝试做除了将单元格与 'center' 对齐之外的任何事情时,我 运行 遇到了麻烦。该脚本在设置列宽或行高方面没有问题。我无法使用文本环绕或垂直居中。
我试过使用以下代码,但它从不将文本换行到 .xlsx 文件中已保存的或垂直居中的位置。它什么都不做。
cell_format2.set_text_wrap()
cell_format2.set_align('center')
cell_format2.set_align('vcenter')
我也试过在add_format函数中进行如下格式化:
cell_format2 = workbook.add_format({'text_wrap': True, 'valign': True})
使用add_format函数总是给我以下错误:
AttributeError: 'bool' object has no attribute 'lower'
这是我的代码,我使用 xlsxwriter 将 3 个数据帧打印到 3 个单独的选项卡
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter(r'Ashland_Detailed_MTO.xlsx', engine='xlsxwriter')
# Write each dataframe to a different worksheet.
df1.to_excel(writer, index=None, header=True, sheet_name='List A')
df3.to_excel(writer, index=None, header=True, sheet_name='List B')
df5.to_excel(writer, index=None, header=True, sheet_name='List C')
workbook = writer.book
cell_format = workbook.add_format()
cell_format.set_align('center')
cell_format2 = workbook.add_format()
cell_format2.set_text_wrap()
cell_format2.set_align('center')
worksheet = writer.sheets['List A']
worksheet.freeze_panes(1, 0)
worksheet.set_column('A:A', 35, cell_format)
worksheet.set_column('B:B', 12, cell_format)
worksheet.set_column('C:C', 6, cell_format)
worksheet.set_column('D:D', 118, cell_format)
worksheet.set_column('E:H', 7, cell_format)
worksheet.set_column('I:J', 15, cell_format)
worksheet.set_column('K:N', 10, cell_format)
worksheet = writer.sheets['List B']
worksheet.freeze_panes(1, 0)
worksheet.set_column('A:G', 15, cell_format)
worksheet = writer.sheets['List C']
worksheet.set_row(0, 45, cell_format2)
worksheet.freeze_panes(1, 0)
worksheet.set_column('A:G', 12, cell_format)
worksheet.set_column('H:H', 17, cell_format)
worksheet.set_column('I:I', 26, cell_format)
worksheet.set_column('J:J', 20, cell_format)
worksheet.set_column('K:K', 57, cell_format)
worksheet.set_column('L:L', 20, cell_format)
worksheet.set_column('M:M', 57, cell_format)
worksheet.set_column('N:N', 16, cell_format)
worksheet.set_column('O:O', 20, cell_format)
worksheet.set_column('P:AL', 13, cell_format)
worksheet.set_column('AM:AM', 40, cell_format)
writer.save()
每次我打开保存的.xlsx 文件时,格式如下所示(第一个图像)。我希望它的格式如第二张图片所示。
在 xlsxwriter
(https://xlsxwriter.readthedocs.io/working_with_pandas.html) 的文档站点上,您可以找到以下信息:
Pandas writes the dataframe header with a default cell format. Since it is a cell format it cannot be overridden using set_row(). If you wish to use your own format for the headings then the best approach is to turn off the automatic header from Pandas and write your own.
他们还提供了一个示例,其中 headers 是在数据帧写入 xlsx 文件后单独写入的,没有 headers:
# Turn off the default header and skip one row to allow us to insert a
# user defined header.
df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False)
# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Add a header format.
header_format = workbook.add_format({
'bold': True,
'text_wrap': True,
'valign': 'top',
'fg_color': '#D7E4BC',
'border': 1})
# Write the column headers with the defined format.
for col_num, value in enumerate(df.columns.values):
worksheet.write(0, col_num + 1, value, header_format)
在您的情况下,代码将更改为:
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter(r'Ashland_Detailed_MTO.xlsx', engine='xlsxwriter')
# Write each dataframe to a different worksheet.
df1.to_excel(writer, index=None, startrow=1, header=False, sheet_name='List A')
df3.to_excel(writer, index=None, startrow=1, header=False, sheet_name='List B')
df5.to_excel(writer, index=None, startrow=1, header=False, sheet_name='List C')
# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
# Add a header format.
header_format = workbook.add_format({
'bold': True,
'text_wrap': True,
'valign': 'top',
'border': 1})
# Write the column headers with the defined format.
worksheet = writer.sheets['List A']
for col_num, value in enumerate(df1.columns.values):
worksheet.write(0, col_num + 1, value, header_format)
worksheet = writer.sheets['List B']
for col_num, value in enumerate(df3.columns.values):
worksheet.write(0, col_num + 1, value, header_format)
...
当数据帧太多时,您可以考虑将格式打包成一个循环并遍历所有工作表。
我正在处理 Pandas 中的一组数据帧。将这些数据帧打印到 .xlsx 文件时,我将每个数据帧打印到不同的选项卡。我在保存之前使用 xlsxwriter 来格式化工作表。当我尝试做除了将单元格与 'center' 对齐之外的任何事情时,我 运行 遇到了麻烦。该脚本在设置列宽或行高方面没有问题。我无法使用文本环绕或垂直居中。
我试过使用以下代码,但它从不将文本换行到 .xlsx 文件中已保存的或垂直居中的位置。它什么都不做。
cell_format2.set_text_wrap()
cell_format2.set_align('center')
cell_format2.set_align('vcenter')
我也试过在add_format函数中进行如下格式化:
cell_format2 = workbook.add_format({'text_wrap': True, 'valign': True})
使用add_format函数总是给我以下错误:
AttributeError: 'bool' object has no attribute 'lower'
这是我的代码,我使用 xlsxwriter 将 3 个数据帧打印到 3 个单独的选项卡
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter(r'Ashland_Detailed_MTO.xlsx', engine='xlsxwriter')
# Write each dataframe to a different worksheet.
df1.to_excel(writer, index=None, header=True, sheet_name='List A')
df3.to_excel(writer, index=None, header=True, sheet_name='List B')
df5.to_excel(writer, index=None, header=True, sheet_name='List C')
workbook = writer.book
cell_format = workbook.add_format()
cell_format.set_align('center')
cell_format2 = workbook.add_format()
cell_format2.set_text_wrap()
cell_format2.set_align('center')
worksheet = writer.sheets['List A']
worksheet.freeze_panes(1, 0)
worksheet.set_column('A:A', 35, cell_format)
worksheet.set_column('B:B', 12, cell_format)
worksheet.set_column('C:C', 6, cell_format)
worksheet.set_column('D:D', 118, cell_format)
worksheet.set_column('E:H', 7, cell_format)
worksheet.set_column('I:J', 15, cell_format)
worksheet.set_column('K:N', 10, cell_format)
worksheet = writer.sheets['List B']
worksheet.freeze_panes(1, 0)
worksheet.set_column('A:G', 15, cell_format)
worksheet = writer.sheets['List C']
worksheet.set_row(0, 45, cell_format2)
worksheet.freeze_panes(1, 0)
worksheet.set_column('A:G', 12, cell_format)
worksheet.set_column('H:H', 17, cell_format)
worksheet.set_column('I:I', 26, cell_format)
worksheet.set_column('J:J', 20, cell_format)
worksheet.set_column('K:K', 57, cell_format)
worksheet.set_column('L:L', 20, cell_format)
worksheet.set_column('M:M', 57, cell_format)
worksheet.set_column('N:N', 16, cell_format)
worksheet.set_column('O:O', 20, cell_format)
worksheet.set_column('P:AL', 13, cell_format)
worksheet.set_column('AM:AM', 40, cell_format)
writer.save()
每次我打开保存的.xlsx 文件时,格式如下所示(第一个图像)。我希望它的格式如第二张图片所示。
在 xlsxwriter
(https://xlsxwriter.readthedocs.io/working_with_pandas.html) 的文档站点上,您可以找到以下信息:
Pandas writes the dataframe header with a default cell format. Since it is a cell format it cannot be overridden using set_row(). If you wish to use your own format for the headings then the best approach is to turn off the automatic header from Pandas and write your own.
他们还提供了一个示例,其中 headers 是在数据帧写入 xlsx 文件后单独写入的,没有 headers:
# Turn off the default header and skip one row to allow us to insert a
# user defined header.
df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False)
# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Add a header format.
header_format = workbook.add_format({
'bold': True,
'text_wrap': True,
'valign': 'top',
'fg_color': '#D7E4BC',
'border': 1})
# Write the column headers with the defined format.
for col_num, value in enumerate(df.columns.values):
worksheet.write(0, col_num + 1, value, header_format)
在您的情况下,代码将更改为:
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter(r'Ashland_Detailed_MTO.xlsx', engine='xlsxwriter')
# Write each dataframe to a different worksheet.
df1.to_excel(writer, index=None, startrow=1, header=False, sheet_name='List A')
df3.to_excel(writer, index=None, startrow=1, header=False, sheet_name='List B')
df5.to_excel(writer, index=None, startrow=1, header=False, sheet_name='List C')
# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
# Add a header format.
header_format = workbook.add_format({
'bold': True,
'text_wrap': True,
'valign': 'top',
'border': 1})
# Write the column headers with the defined format.
worksheet = writer.sheets['List A']
for col_num, value in enumerate(df1.columns.values):
worksheet.write(0, col_num + 1, value, header_format)
worksheet = writer.sheets['List B']
for col_num, value in enumerate(df3.columns.values):
worksheet.write(0, col_num + 1, value, header_format)
...
当数据帧太多时,您可以考虑将格式打包成一个循环并遍历所有工作表。