web-dev-qa-db-ja.com

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: type object 'Alignment' has no attribute 'HORIZONTAL_CENTER'

どちらも機能しませんでしたが、他に方法はありますか?

14
Pythonizer

はい、openpyxlでこれを行う方法があります:

from openpyxl.styles import Alignment

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

これがあなたを助けることを願っています

32
samsemilia7

これが、PIPの最新バージョン(2.2.5)で私にとって最終的に機能したものです。

    # center all cells
    for col in w_sheet.columns:
        for cell in col:
            # openpyxl styles aren't mutable,
            # so you have to create a copy of the style, modify the copy, then set it back
            alignment_obj = cell.alignment.copy(horizontal='center', vertical='center')
            cell.alignment = alignment_obj
6
nmz787

私のソリューションはopenpyxlを必要とし、少なくとも2.1.5ではcell.alignmentを直接設定できないため、他のソリューションはどれも私にとってはうまくいきませんでした。

from openpyxl.styles import Style, Alignment

cell = ws.cell('A1')
cell.style = cell.style.copy(alignment=Alignment(horizontal='center')) 

上記は現在のスタイルをコピーし、配置を置き換えます。まったく新しいスタイルを作成することもできます-指定されていない値は https://openpyxl.readthedocs.org/en/latest/styles.html からデフォルト値を取得します

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
4
mhorne

これは、Python XlsxWriter ライブラリを使用して実現できます。

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をマージし、中央に割り当てられたalignパラメーターを含むセル形式パラメーターを追加しました。

enter image description here

0
Tanveer Alam