Python openpyxl中的水平文本对齐

Python openpyxl中的水平文本对齐,python,xlsx,openpyxl,Python,Xlsx,Openpyxl,我试图将文本对齐方式更改为2个合并销售的中心,我发现了一些不适用于我的案例的答案 currentCell = ws.cell('A1') currentCell.style.alignment.horizontal = 'center' #TypeError: cannot set horizontal attribute #or currentCell.style.alignment.vertical = Alignment.HORIZONTAL_CENTER #AttributeError:

我试图将文本对齐方式更改为2个合并销售的中心,我发现了一些不适用于我的案例的答案

currentCell = ws.cell('A1')
currentCell.style.alignment.horizontal = 'center' #TypeError: cannot set horizontal attribute
#or
currentCell.style.alignment.vertical = Alignment.HORIZONTAL_CENTER #AttributeError: type object 'Alignment' has no attribute 'HORIZONTAL_CENTER'

这两种方法都不起作用,还有其他方法吗?

您可以通过使用Python库来实现这一点

import xlsxwriter

workbook = xlsxwriter.Workbook('example.xlsx')
worksheet = workbook.add_worksheet()

cell_format = workbook.add_format({'align': 'center'})

worksheet.merge_range('A1:B1', "")
worksheet.write_rich_string('A1','Example', cell_format)

workbook.close()
在这里,我合并了单元格A1、B1,并添加了一个单元格格式参数,其中包括指定为“中心”的“对齐”参数


是的,使用openpyxl有一种方法可以做到这一点:

from openpyxl.styles import Alignment

currentCell = ws.cell('A1') #or currentCell = ws['A1']
currentCell.alignment = Alignment(horizontal='center')

希望这将对您有所帮助

这就是我最终使用PIP(2.2.5)的最新版本所做的工作

更新:

从openpyxl 2.4.0版(~2016年)起,
.copy()
方法被禁用

尝试将最后两行更改为:

from copy import copy
alignment_obj = copy(cell.alignment)
alignment_obj.horizontal = 'center'
alignment_obj.vertical = 'center'
cell.alignment = alignment_obj

其他的解决方案都不适合我,因为我的解决方案需要openpyxl,至少在2.1.5单元中是这样。对齐不能直接设置

from openpyxl.styles import Style, Alignment

cell = ws.cell('A1')
cell.style = cell.style.copy(alignment=Alignment(horizontal='center')) 
以上内容复制当前样式并替换路线。 您还可以创建一个全新的样式-任何未指定的值都可以从中获取默认值


问题标题是«openpyxl中的水平文本对齐»,重点是我的。请注意,我的话并不意味着你没有回答问题的一部分,同样,OP也不能决定切换到其他库并批准您的答案。在这种情况下,我认为您必须使用xlsxwriter,因为我们不支持Openpyxl中合并单元格的样式,因为规范没有定义如何处理它。@Tanveer:不需要使用
write\u rich\u string()
。您可以获得如下相同的效果:
工作表。合并单元格区域('A1:B1',“示例”,单元格格式)
@Charlie:我不确定是否指定了它,但实际上合并区域的样式应用于该区域第一个单元格中的字符串/数字/公式,然后应用于该区域其余单元格中的空白单元格。我在Pandas中实现了Openpyxl合并单元处理,就像这样(通过openpyxlapi)。XlsxWriter在内部也做同样的事情。@jmcnamara是的,我看到了Excel的一些功能。我发现在读/写情况下创建的单元格存在一个问题:这些单元格中的任何值如何,以及如何处理更复杂的格式,如边框?我们有两个与此相关的错误,使用空白单元格方法,甚至可以将完全不同的格式化应用到单元格,这显示了它实际上是多少。(我将向ECMA提交一份“缺陷报告”以供澄清。
样式
类不再使用;您直接分配给各个样式元素。在本例中,您将分配
cell.font=font(bold=True)
cell.alignment=alignment(horizontal='center')
和(不在示例中)
cell.fill=PatternFill(fgColor='33489F',fill_type='solid')
@hlongmore是否可以一次分配到一列中的所有单元格?@AsheKetchum这是个好问题;我必须自己解决。如果我发现你可以,我会更新或添加新的注释。
from openpyxl.styles import Style, Alignment

cell = ws.cell('A1')
cell.style = cell.style.copy(alignment=Alignment(horizontal='center')) 
cell.style = Style(alignment=Alignment(horizontal='center'),font=Font(bold=True))

# or - a tidier way

vals = {'alignment':Alignment(horizontal='center'),
        'font':Font(bold=True),
       }
new_style = Style(**vals)
cell.style = new_style