我正在创建和格式化Excel文件,并希望将文本包装在列中。我在xlsxwriter中找到了text_wrap()的方法,但是当我使用这个方法时,它对我不起作用。我尝试了一切但失败了。
我在剧本中做了什么。
脚本
text_format = workbook.add_format({'text_wrap': True})
worksheet.conditional_format('A1:W{}'.format(len(df)), {'type': 'no_errors',
'format': text_format})
任何帮助将不胜感激。
由于
答案 0 :(得分:1)
我花了几个小时来解决同样的问题。我尝试了以下方法:
header_format = workbook.add_format({'bold': True, 'text_wrap': True, 'valign': 'top'})
并通过自己的语句设置它:
header_format.set_text_wrap()
并在语句中添加一个布尔值:
header_format.set_text_wrap(True)
我想可能是因为我使用了条件格式:
worksheet.conditional_format(0, 0, 0, 21, {'type': 'no_blanks', 'format': header_format})
所以我没有尝试:
worksheet.set_row(0, 45, testing_format)
我认为这可能是因为它出现在设置其下方列宽的语句之前,所以它可能需要在最后(即使没有其他格式设置表现出这种行为)。那没用。
我尝试使用一种格式,只设置 text_wrap 而没有其他格式,并且没有在其他地方使用。那没用。
我尝试过,它是整个工作表的唯一格式集。那没用
我尝试将 XlsxWriter 更新到 1.3.7。那没用。
在这一点上,我可以 100% 确信文本换行在 XlsxWriter 1.3.7 和 Python 3.7.4 以及适用于 Microsoft 365 MSO 64 位的 Excel 中不起作用。
答案 1 :(得分:1)
这不起作用的原因是 Excel 不支持条件格式的文本换行。来自 XlsxWriter docs:
<块引用>注意:在 Excel 中,条件格式叠加在现有单元格格式上,并非所有单元格格式属性都可以修改。 不能以条件格式修改的属性包括字体名称、字体大小、上标和下标、对角线边框、所有对齐属性和所有保护属性。
在条件格式之外,它应该按预期工作:
import xlsxwriter
workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
my_format = workbook.add_format({'text_wrap': True})
worksheet.write(0, 0, "hello world, how are you", my_format)
workbook.close()
答案 2 :(得分:1)
jmcnamara 的示例确实有效,但它不适用于来自熊猫数据框的数据。你可以看到它做了粗体和 valign,但包装不起作用。我也没有遇到条件格式问题(只要它不是来自数据帧)。
import pandas as pd
import xlsxwriter
df = pd.DataFrame({'this is a very long header that should wrap': ['a2', 'a3', 'a4'],
'header2': [1, 2, 3],
'header3': [4, 5, 6]})
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, "Sheet1", index=False)
worksheet = writer.sheets['Sheet1']
workbook = writer.book
header_format = workbook.add_format({'bold': True, 'text_wrap': True, 'valign': 'top'})
worksheet.set_column(0, 0, 10)
worksheet.write(0, 3, "hello world, how are you")
worksheet.set_row(0, 70, header_format)
workbook.close()
答案 3 :(得分:1)
如 XlsxWriter docs 中所述,无法使用 set_row()
覆盖 DataFrame 格式。更改 DataFrame 标头格式的最简单方法是使用单个单元格条目覆盖标头,覆盖每个单元格的值和格式:
import pandas as pd
import xlsxwriter
df = pd.DataFrame({'this is a very long header that should wrap': ['a2', 'a3', 'a4'],
'header2': [1, 2, 3],
'header3': [4, 5, 6]})
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
header_format = workbook.add_format({'bold': True, 'text_wrap': True, 'valign': 'top'})
# Overwrite both the value and the format of each header cell
for col_num, value in enumerate(df.columns.values):
worksheet.write(0, col_num + 1, value, header_format)
workbook.close()
上面的代码将产生以下结果:
答案 4 :(得分:1)
当我从 workbook.add_format().set_text_wrap()
更改为 workbook.add_format({'text_wrap': True})
时,它按预期工作