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

Apply 'wrap_text' to all cells using openpyxl

我有一个 Pandas 数据框,我正在使用 openpyxl 将其写入 XLSX。 spreadsheet 中的许多单元格包含长句,我想在 sheet 的所有内容(即每个单元格)上设置 'wrap_text'。

有办法吗?我看到 openpyxl 有一个 'Alignment' 选项用于 'wrap_text',但我看不出如何将它应用到所有单元格。

编辑:

感谢反馈,下面的方法可以解决问题。注意 - 由于样式不可变而复制。

for row in ws.iter_rows():
    for cell in row:      
        cell.alignment =  cell.alignment.copy(wrapText=True)

迭代所有单元格

  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 *

测试

据推测,当您遍历单元格时,想法是应用该格式。

for row in ws.iter_rows():
    for cell in row:
        cell.style.alignment.wrap_text=True

这里还有更多关于如何使用自动换行样式的详细信息 Writing multi-line strings into cells using openpyxl

希望对您有所帮助。

我一直在用openpyxl>=2.5.6。假设我们要为单元格 A1 换行,那么我们可以使用下面的代码。

from openpyxl.styles import Alignment

ws['A1'].alignment = Alignment(wrap_text=True)
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') 

更新 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)