LoginSignup
0
0

More than 1 year has passed since last update.

Openpyxlの基本操作(シート、セル、スタイル、背景色、書式付きフォーマット)及び性能について

Last updated at Posted at 2022-07-18

経緯

Excelあまり好きじゃないですが、現場で色んなExcelの成果物がほしいなので、できるだけ自動化するために、Openpyxlを学習。
以下のソースの一部はソースからコピーしたので、クラス内部の部分もあって、selfなどがそのまま残っていますが、読み替えてください。

workbook, worksheet, cellに関する基本操作

import openpyxl
...
        # 新規Excelを作成して保存
        wb=openpyxl.Workbook()
        wb.save(self.fileName)
...
        # Excelを開いて新規シートを作成
        wb=openpyxl.load_workbook(self.fileName)
        wb.create_sheet(self.currentSheetName)
        wb.save(self.fileName)
...
        # Excelを開いて特定のシートを指定
        wb=openpyxl.load_workbook(self.fileName)
        ws=wb[self.currentSheetName]
...
        # 特定セルの中身と枠(後で説明)のスタイルを指定
        ws.cell(row=1, column=1).value='hello'
        ws.cell(row=1, column=1).border=self.border
...
        # Excelを開いて特定シートの最大行数を取得
        wb=openpyxl.load_workbook(self.fileName)
        ws=wb[self.currentSheetName]
        lastRowIndex=ws.max_row
...
        # 列の番号から列のアルファベットを取得(例:1からAを取得)、列のサイズを自動に変更
        colName=openpyxl.utils.cell.get_column_letter(idx)
        ws.column_dimensions[colName].auto_size = True
...
        # 特定のシートが存在すれば、削除
        if 'Sheet' in wb.sheetnames:
            wb.remove(wb['Sheet'])
            wb.save(self.fileName)
...

border設定例

from openpyxl.styles.borders import Border, Side
...
        # 黒の細目の実線
        self.border=Border(top=Side(style='thin', color='000000'),
        bottom=Side(style='thin', color='000000'),
        left=Side(style='thin', color='000000'),
        right=Side(style='thin', color='000000'))
...
        # 特定セルのborderを設定
        ws.cell(row=excelCurrentRowNum, column=colIdx+1).border=self.border

fill(背景色)設定例

from openpyxl.styles import PatternFill
...
        # 単色で黄色
        self.fill=PatternFill(fill_type='solid', bgColor='00FFFF00')
...
        # 書式付きフォーマットで式を指定して色を適用(例、A7とA4が一致しないと黄色に変更)
        rule=FormulaRule(formula=['A7<>A4'], fill=self.fill)

fomular rule(書式付きフォーマット)設定例

from openpyxl.formatting.rule import FormulaRule
...
        # 式と色を指定してルールを作成して、セルの適用範囲を指定
        rule=FormulaRule(formula=['A7<>A4'], fill=self.fill)
        ws.conditional_formatting.add('A7:Z10', rule)
...

性能について

①セルを1個1個で書き込みをするよりは、ws.append(data)のほうが速い。
 ※dataは['1', '2', '3', '4']のようなリストであれば自動的に複数のセルに書き込み。

②wb.save(filename)はできるだけ避けること。
 ※保存操作は1回だけでも数秒ぐらいかかる。

0
0
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
0
0