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

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

```python
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
```