週末記録

自分メモのため散らかりまくり

openpyxlの使い方

f:id:k111log:20220723090947j:image

お仕事でエクセル自動化することになりopenpyxlを久しぶりに使ったのでメモ。

xlsxの簡単な読み書きはこれまでも実施したことはあったのだが、がっつりエクセル処理を自動化することになり、あたらめてopenpyxlで何ができるのか試してみました。

まずはインストール、

pip install openpyxl

でOK。なはずが、実際には使用している環境にpipすらインストールされておらず、pipもインストールすることになった。linux環境で管理者権限持ってないのですが、問題なくインストールできるのか若干不安だったのですが、基本的にはhome配下の.local下にインストールされていくのでパーミッション問題は何もおきなかった。

pipのインストールは

curl -kL https://bootstrap.pypa.io/get-pip.py | python (python3系)

curl -kL https://bootstrap.pypa.io/pip/2.7/get-pip.py | python  (python2.7系)

です。私の環境はpython2.7系だったので下のpip/2.7のを用いて問題なくインストール完了。

 

openpyxlもインストールし、どういった作業ができるのか試してみたところ、以下のようなエクセル処理は問題なくできるようでした

  • 読み書きなど
    • wb = xl.load_workbook(filename=ファイル名) 
    • ws = wb.worksheets[0] (ワークシート読み込み)
    • ws = wb.create_sheet(title='新規作成シート名')
    • wb.save(ファイル名) (保存)
  • 罫線(top, bottom, right, leftそれぞれに設定可能)
    • import openpyxl (これは基本的に必要だと思う。以降記載は省略)
    • from openpyxl.styles.borders import Border, Side
    • side = Side(style='thin', color='000000')
    • border = Border(top=side, bottom=side, left=side, right=side)
    • ws.cell(行番号, 列番号).border = border
  • 太文字
    • from openpyxl.styles import Font
    • font = Font(bold=True)
    • ws(行番号, 列番号).font = font
  • セルの色変更
    • from openpyxl.styles import PatternFill 
    • fill = openpyxl.styles.PatternFill(patternType='solid', fgColor='FF0000', bgColor='FFCC00')
    • ws.cell(行番号,列番号).fill = fill
      • シート全体の塗りつぶしなどは for 文まわして塗りつぶすらしい(検索したらそのように出てきた。もしかしたら楽なやり方があるnおかもしれない)
  • フォント変更
    • from openpyxl.styles import Font
    • font = Font(name='メイリオ')
    • ws.cell(行番号, 列番号).font = font
  • 条件付き書式設定(DataBar)
    • from openpyxl.formatting.rule import DataBar, FormatObject
    • from openpyxl.formatting.rule import Rule
    • first = FormatObject(type='min')
    • second = FormatObject(type='max')
    • data_bar = DataBar(cfvo=[first, second], color="FFCCAA", showValue=None, minLength=None, maxLength=None)
    • rule = Rule(type='dataBar', dataBar=data_bar)
    • ws.conditional_formatting.add("A1:A20", rule)
      • A1:A20:データバーを設定した範囲指定
  • 表示形式(小数点3桁まで表示)
    • ws.cell(行番号,列番号).number_format = '0.000' (小数点3桁まで表示)
    • ws.cell(行番号,列番号).number_format = 'yyyy-mm-dd' (日付表示)
    • ws.cell(行番号,列番号).number_format = '0.0%' (%表示)
    • ws.cell(行番号,列番号).number_format = '#,##0' (3桁毎にカンマ区切り) 
      • cell指定しているがおそらく列指定などもできるかも?(未確認)
  • 中央揃え
    • from openpyxl.styles import Alignment
    • ws.cell(行番号,列番号).alignment = Alignment(horizotal="centerContinuous")
      • centerContinuous:中央揃え
      • general:左揃え
      • distributed:折り返し中央揃え
      • justify:折り返し左揃え
    • horizontal だけではなく、vertical も設定できるはず(未確認)
    • 角度rotationなどもできるらしい(未確認)
      • Alignment(textRotation=180)

他いろいろできる模様。公式ドキュメントは↓(読んではいない)

openpyxl.readthedocs.io

 

以上