openpyxlの使い方
お仕事でエクセル自動化することになり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)
他いろいろできる模様。公式ドキュメントは↓(読んではいない)
以上