我有一个Pandas数据框,我正在使用openpyxl写入XLSX。电子表格中的许多单元格都包含长句,我想在工作表的所有内容(即每个单元格)上设置“wrap_text”。
有办法做到这一点吗?我看到openpyxl为'wrap_text'有一个'Alignment'选项,但我看不到如何将它应用于所有单元格。
编辑:
感谢您的反馈,以下是诀窍。注意 - 由于样式不可变而复制。
for row in ws.iter_rows():
for cell in row:
cell.alignment = cell.alignment.copy(wrapText=True)
答案 0 :(得分:6)
我一直在使用openpyxl == 2.5.6。假设我们要为单元格A1换行,然后可以使用以下代码。
from openpyxl.styles import Alignment
ws['A1'].alignment = Alignment(wrap_text=True)
答案 1 :(得分:5)
据推测,当你遍历你的单元格时,我们的想法就是应用格式。
for row in ws.iter_rows():
for cell in row:
cell.style.alignment.wrap_text=True
此处还有更多有关如何使用换行文字样式的详细信息 Writing multi-line strings into cells using openpyxl
希望这有帮助。
答案 2 :(得分:4)
import os
import openpyxl
from openpyxl.styles import Alignment, Font
from openpyxl.cell import Cell
#format cells with word wrap and top alignment
for row in ws2.iter_rows():
for cell in row:
cell.alignment = Alignment(wrap_text=True,vertical='top')
答案 3 :(得分:1)
迭代所有单元格
for rows in ws.iter_rows(min_row=1, min_col=1):
for cell in rows:
print('cell %s %s' % (cell.coordinate,cell.value))
*使用Python测试:3.4.2 - openpyxl:2.4.1 *
答案 4 :(得分:0)
许多答案都设置了wrapText=True
,但掩盖了现有的对齐选项。这不好。
使用openpyxl v3.0.4,我执行了以下操作:
import copy
for row in ws.iter_rows():
for cell in row:
alignment = copy.copy(cell.alignment)
alignment.wrapText=True
cell.alignment = alignment
原始海报的解决方案使用:
cell.alignment = cell.alignment.copy(wrapText=True)
但这会产生以下警告:
DeprecationWarning: Call to deprecated function copy (Use copy(obj) or cell.obj = cell.obj + other).
cell.alignment = cell.alignment.copy(wrapText=True)