1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

openpyxlでよく使う操作をライブラリにまとめてみる

Posted at

openpyxl で EXCEL を作成できるのはとても便利ですが、見た目も揃えたいことが多いです。
毎回書式を設定する操作を記述するのが面倒なので、利用頻度が高い操作を staticメソッドにまとめてみました。

import openpyxl
from openpyxl import Workbook
from openpyxl.worksheet.worksheet import Worksheet

from openpyxl.styles import Font, Alignment, PatternFill
from openpyxl.styles.borders import Side, Border

class MyOpenPyXlLib:
    """
    openpyxlでよく使う操作をまとめたメソッド
    """
    @staticmethod
    def remove_allsheets(workbook: Workbook):
        """
        既存のシートを削除する
        """
        for worksheet in workbook.worksheets:
            workbook.remove(worksheet)

    @staticmethod
    def convert_cell_letter(col: int, row: int):
        """
        「A1」などの文字を作成する
        row 行番号(1~)
        col 列番号(1~)
        """
        return '{}{}'.format(openpyxl.utils.get_column_letter(col), row)
    
    @staticmethod
    def set_font_allcells(worksheet: Worksheet, name: str='メイリオ', fontsize: int=10):
        """
        フォントを設定する
        """
        # set font
        font = Font(name=name, size=fontsize)
        MyOpenPyXlLib.set_allcells(worksheet=worksheet, font=font)

    @staticmethod
    def set_alignment_allcells(worksheet: Worksheet, wrapText: bool=True, horizontal: str='center', vertical: str='center'):
        """
        すべてのセルに配置を設定する
        """
        alignment = Alignment(wrapText=wrapText, horizontal=horizontal, vertical=vertical)
        MyOpenPyXlLib.set_allcells(worksheet=worksheet, alignment=alignment)

    @staticmethod
    def set_boder_allcells(worksheet: Worksheet):
        """
        すべてのセルに枠線を付ける
        """
        side = Side(style='thin', color='000000')
        border = Border(left=side, right=side, top=side, bottom=side)
        MyOpenPyXlLib.set_allcells(worksheet=worksheet, border=border)

    @staticmethod
    def set_auto_filter(worksheet: Worksheet, s_col: int, s_row: int, e_col: int, e_row: int):
        """
        フィルターを設定する
        s_col 開始位置のcol
        s_row 開始位置のrow
        e_col 終了位置のcol
        e_row 終了位置のrow
        """
        worksheet.auto_filter.ref = '{}:{}'.format(
            MyOpenPyXlLib.convert_cell_letter(row=s_row, col=s_col),
            MyOpenPyXlLib.convert_cell_letter(row=e_row, col=e_col))
        
    @staticmethod
    def set_column_width(worksheet: Worksheet, col: int, width: int = 80):
        """
        列幅を設定する
        worksheet ワークシート
        col 列番号
        width 列幅
        """
        letter = openpyxl.utils.get_column_letter(col)
        worksheet.column_dimensions[letter].width = width

    @staticmethod
    def set_allcells(worksheet: Worksheet, font: Font=None, border: Border=None, alignment: Alignment=None, fill: PatternFill=None):
        """
        すべてのセルに適用する
        """
        # 文字が入っている範囲を選択する
        range_letter = '{}:{}'.format(
            MyOpenPyXlLib.convert_cell_letter(row=worksheet.min_row, col=worksheet.min_column),
            MyOpenPyXlLib.convert_cell_letter(row=worksheet.max_row, col=worksheet.max_column))
        
        MyOpenPyXlLib.set_cells(worksheet=worksheet, range_letter=range_letter, font=font, border=border, alignment=alignment, fill=fill)

    @staticmethod
    def set_cells(worksheet: Worksheet, range_letter, font: Font=None, border: Border=None, alignment: Alignment=None, fill: PatternFill=None):
        """
        指定したセルに適用する
        """
        for row in worksheet[range_letter]:
            for cell in row:
                if border is not None:
                    cell.border = border
                if font is not None:
                    cell.font = font
                if alignment is not None:
                    cell.alignment = alignment
                if fill is not None:
                    cell.fill = fill
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?