Python xlsxwriter:文本_wrap()不工作

Python xlsxwriter:文本_wrap()不工作,python,excel,xlsxwriter,Python,Excel,Xlsxwriter,我正在创建和格式化excel文件,并希望将文本包装到列中。我在xlsxwriter中找到了text_wrap()方法,但当我使用此方法时,它对我不起作用。我什么都试过了,但失败了 我在脚本中所做的 使用熊猫阅读csv 创建数据框架并将其保存到excel文件中 在其上应用文本换行 脚本 text_format = workbook.add_format({'text_wrap': True}) worksheet.conditional_format('A1:W{}'.format(len(d

我正在创建和格式化excel文件,并希望将文本包装到列中。我在xlsxwriter中找到了text_wrap()方法,但当我使用此方法时,它对我不起作用。我什么都试过了,但失败了

我在脚本中所做的

  • 使用熊猫阅读csv
  • 创建数据框架并将其保存到excel文件中
  • 在其上应用文本换行
脚本

text_format = workbook.add_format({'text_wrap': True})
worksheet.conditional_format('A1:W{}'.format(len(df)), {'type': 'no_errors',
                                      'format': text_format})
任何帮助都将不胜感激


谢谢

我花了好几个小时来解决这个问题。我尝试了以下方法:

header_format = workbook.add_format({'bold': True, 'text_wrap': True, 'valign': 'top'})
并通过其自身的声明进行设置:

header_format.set_text_wrap()
header_format.set_text_wrap(True)
并向语句中添加布尔值:

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)
我认为,可能是因为它在语句之前设置了它下面的列宽,所以它可能需要在最末尾(即使没有其他格式设置显示这种行为)。那没用

我试着使用一种格式,只设置了文本包装,没有其他格式,也没有在其他地方使用。那没用

我尝试过,它是整个工作表的唯一格式设置。那没用

我尝试将XLSXWriter更新为1.3.7。那没用


在这一点上,我可以100%肯定地说,文本包装在XlsxWriter 1.3.7和Python 3.7.4以及Excel for Microsoft 365 MSO 64位中不起作用。这不起作用的原因是Excel不支持条件格式的文本包装。从XlsxWriter:

注意:在Excel中,条件格式叠加在现有单元格格式上,并且不能修改所有单元格格式属性。不能以条件格式修改的属性包括字体名称、字体大小、上标和下标、对角线边框、所有对齐属性和所有保护属性

在条件格式之外,它应按预期工作:

导入xlsxwriter
工作簿=xlsxwriter.workbook('test.xlsx')
工作表=工作簿。添加工作表()
my_format=工作簿。添加_格式({'text_wrap':True})
工作表。写(0,0,“你好,世界,你好”,我的表格)
工作簿.关闭()
输出

jmcnamara的示例确实有效,但它不适用于来自数据帧的数据。你可以看到它有粗体和valign两种颜色,但包装不起作用。我对条件格式也没有问题(只要它不是来自数据帧)

如中所述,不能使用
set\u row()
覆盖数据帧格式。更改数据帧标题格式的最简单方法是使用单个单元格条目覆盖标题,覆盖每个单元格的值和格式:

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()
上述代码将产生以下结果:

header_format = workbook.add_format({'bold': True, 'text_wrap': True, 'valign': 'top'})

当我从
工作簿更改为
工作簿时。添加\格式()。设置\文本\包装()
工作簿。添加\格式({'text \包装:True})
工作正常。

请显示您尝试的代码,并描述到底发生了什么(包括堆栈跟踪,如果有)。@glibdud post updatedI对此也有问题。我的解决方法是
write()
每个相关单元格的数据,并可以按照我的要求进行格式化。这是一种高度自信的做法。:-)Excel不支持条件格式的文本换行(或任何其他对齐属性)。它只是忽略了它。但是,文本换行应该可以在XlsxWriter的其他地方使用。也许可以添加一个小的完整的工作示例,您认为它不起作用。不幸的是,我正在处理相同的问题,尽管我使用libre-calcre:以上是我的问题。我还没有测试过它,但它可能会在ExcelInterest上工作,这对我来说确实有效,但是我仍然无法让它在最简单的数据帧上工作。下面的代码…XlsxWriter文档中解释了发生这种情况的原因以及解决方法。“Pandas使用默认单元格格式写入数据帧标头。由于它是单元格格式,因此无法使用set_row()覆盖它。”。看见