Horizontal text alignment in openpyxl

后端 未结 4 1391
迷失自我
迷失自我 2021-02-07 05:48

I\'m tryign to change the text alignment to the center of 2 merged sells, I\'ve found some answers that didn\'t work for my case

currentCell = ws.cell(\'A1\')
cu         


        
相关标签:
4条回答
  • 2021-02-07 06:07

    None of the other solutions worked for me, since my solution requires openpyxl, and at least in 2.1.5 cell.alignment can't be set directly.

    from openpyxl.styles import Style, Alignment
    
    cell = ws.cell('A1')
    cell.style = cell.style.copy(alignment=Alignment(horizontal='center')) 
    

    The above copies the current style and replaces the alignment. You can also create a whole new style - with any values not specified taking the default values from 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
    
    0 讨论(0)
  • 2021-02-07 06:16

    You can achieve this by using Python XlsxWriter library.

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

    Here i have merged cells A1, B1 and added a cell format parameter which includes the align parameter assigned as center.

    enter image description here

    0 讨论(0)
  • 2021-02-07 06:21

    yes, there is a way to do this with openpyxl:

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

    hope this will help you

    0 讨论(0)
  • 2021-02-07 06:24

    This is what finally worked for me with the latest version from 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
    

    Update:

    As of openpyxl version 2.4.0 (~2016) the .copy() method is deprecated for StyleProxy objects.

    Try changing the last two lines to:

    from copy import copy
    alignment_obj = copy(cell.alignment)
    alignment_obj.horizontal = 'center'
    alignment_obj.vertical = 'center'
    cell.alignment = alignment_obj
    
    0 讨论(0)
提交回复
热议问题