【问题标题】:Apply 'wrap_text' to all cells using openpyxl使用 openpyxl 将“wrap_text”应用于所有单元格
【发布时间】:2017-02-14 00:34:27
【问题描述】:

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

【问题讨论】:

  • 您必须将格式应用于每个相关单元格。

标签: python pandas openpyxl


【解决方案1】:
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') 

【讨论】:

    【解决方案2】:

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

    from openpyxl.styles import Alignment
    
    ws['A1'].alignment = Alignment(wrap_text=True)
    

    【讨论】:

      【解决方案3】:

      大概,当您遍历您的单元格时,我们的想法是应用该格式。

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

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

      希望这会有所帮助。

      【讨论】:

      • 当使用索引调用单元格时,应该可以:from openpyxl.styles import Alignment_sheet.cell(1, 2).alignment = Alignment(wrapText=True)
      【解决方案4】:

      在 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)
      

      【讨论】:

        【解决方案5】:

        迭代所有单元格

          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 *

        【讨论】:

          猜你喜欢
          • 2016-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多