使用openpyxl将'wrap_text'应用于所有单元格

时间:2017-02-14 00:34:27

标签: python pandas openpyxl

我有一个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)

5 个答案:

答案 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)

更新openpyxl v3中的对齐方式

许多答案都设置了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)