プログラミング

Pythonでエクセルの操作を試してみる!

こんにちは、MSKです。
今回はPythonでエクセルの操作を行ってみます!

準備

仮想環境などpythonを実行できる環境を準備します。

Python開発環境としてのおすすめはPyCharmです。

MacでPyCharmをインストールして使ってみよう! こんにちは、MSKです。いつもVisual Studio Codeを使ってコーディングしていますが、Djangoの補完機能がいまいちだ...

環境を作成できたら、openpyxlをインストールします。

エクセルファイルを作成する

まず、エクセルファイルを新規で作成します。

import openpyxl

def create_excel_file() -> Workbook:
    book = openpyxl.Workbook()
    sheet = book["Sheet"]
    sheet.title = "sample"
    return book


if __name__ == '__main__':
    wb = create_excel_file()
    wb.save("./test.xlsx")

実行するとtest.xlsxというファイルが作成され、開くとsampleというシートができていると思います。

openpyxl.Workbook()で新規にExcelファイルを作成
sheet = book[“Sheet”]でシートを取得しています。
このsheetのtitleを変更することでシート名を変更することができます。
最後にbook.save(“./”+name+”.xlsx”)で名前を指定して保存をしています。

エクセルファイルにデータを入力する

とりあえず試しに入力してみる

列と行を指定してデータを入力してみます。

import openpyxl
from openpyxl.workbook import Workbook
from openpyxl.worksheet import worksheet


def create_excel_file() -> Workbook:
    book = openpyxl.Workbook()
    sheet = book["Sheet"]
    sheet.title = "sample"
    return book


def write_data(work_sheet: worksheet, col: int, r: int, val: str):
    work_sheet.cell(column=col, row=r, value=val)


if __name__ == '__main__':
    wb = create_excel_file()
    ws: worksheet = wb["sample"]
    write_data(ws, 1, 1, "1-1")
    write_data(ws, 1, 2, "1-2")
    write_data(ws, 2, 1, "2-1")
    write_data(ws, 2, 2, "2-2")
    wb.save("./test.xlsx")


上で作成したシートを取得して、wsという名前で保存しています。
シートにcellというメソッドがあるので、columnとrowを指定して値を入力します。
最後にsaveで保存します。

指定した行と列に指定した文字列が入力されていることを確認できると思います。

セル記号を指定して入力

上では行と列の番号を指定して値を入力しました。
次はセル記号を使って入力してみます。

import openpyxl
from openpyxl.workbook import Workbook
from openpyxl.worksheet import worksheet


def create_excel_file() -> Workbook:
    book = openpyxl.Workbook()
    sheet = book["Sheet"]
    sheet.title = "sample"
    return book


def write_data(work_sheet: worksheet, cs: str, val: str):
    work_sheet[cs] = val


if __name__ == '__main__':
    wb = create_excel_file()
    ws: worksheet = wb["sample"]
    write_data(ws, "A5", "A5")
    write_data(ws, "B5", "B5")
    write_data(ws, "C5", "C5")
    wb.save("./test.xlsx")


workSheet[セル記号] = (入力する値)で指定したセルに値を入力することができます。

セルを結合してみる

次にセルを結合してみます。

import openpyxl
from openpyxl.workbook import Workbook
from openpyxl.worksheet import worksheet


def create_excel_file() -> Workbook:
    book = openpyxl.Workbook()
    sheet = book["Sheet"]
    sheet.title = "sample"
    return book


def write_data2(work_sheet: worksheet, cs: str, val: str):
    work_sheet[cs] = val


if __name__ == '__main__':
    wb = create_excel_file()
    ws: worksheet = wb["sample"]
    write_data2(ws, "E1", "merge cell")
    ws.merge_cells(start_row=1, end_row=5, start_column=5, end_column=9)
    wb.save("./test.xlsx")


セルの結合にはmerge_cellsを使います。
merge_cellsには開始と終了の行・列の番号を指定します。

セルの色を変えてみる

次に指定したセルの色を変えてみます。

import openpyxl
from openpyxl.workbook import Workbook
from openpyxl.worksheet import worksheet
from openpyxl.styles import PatternFill
from openpyxl.styles.fills import FILL_SOLID, FILL_PATTERN_LIGHTHORIZONTAL


def create_excel_file() -> Workbook:
    book = openpyxl.Workbook()
    sheet = book["Sheet"]
    sheet.title = "sample"
    return book


def color_cell_solid(work_sheet: worksheet, col: int, r: int, code: str):
    work_sheet.cell(column=col, row=r).fill = PatternFill(patternType=FILL_SOLID, fgColor=code, bgColor=code)


if __name__ == '__main__':
    wb = create_excel_file()
    ws: worksheet = wb["sample"]
    color_cell_solid(ws, 1, 1, "FF0000")
    wb.save("./test.xlsx")


今回はセルを塗りつぶしてみました。
patternTypeを変えることで他の塗り方もできます。

枠をつけてみる

最後にセルに枠をつけたいと思います。

import openpyxl
from openpyxl.workbook import Workbook
from openpyxl.worksheet import worksheet
from openpyxl.styles.borders import Border, Side
from openpyxl.styles.borders import BORDER_THICK, BORDER_THIN


def create_excel_file() -> Workbook:
    book = openpyxl.Workbook()
    sheet = book["Sheet"]
    sheet.title = "sample"
    return book


def write_thick_border(work_sheet: worksheet, col: int, r: int, color: str):
    thick_side = Side(style=BORDER_THICK, color=color)
    work_sheet.cell(column=col, row=r).border = Border(top=thick_side, bottom=thick_side, left=thick_side, right=thick_side)


def write_thin_border(work_sheet: worksheet, col: int, r: int, color: str):
    thin_side = Side(style=BORDER_THIN, color=color)
    work_sheet.cell(column=col, row=r).border = Border(top=thin_side, bottom=thin_side, left=thin_side, right=thin_side)


if __name__ == '__main__':
    wb = create_excel_file()
    ws: worksheet = wb["sample"]
    write_thick_border(ws, 1, 1, "c3c3c3")
    write_thin_border(ws, 2, 2, "FF0000")
    wb.save("./test.xlsx")


枠線を引くには、cellのborderにBorderオブジェクトを設定します。
線の指定は上下左右にSideオブジェクトを指定することで設定できます。
Sideオブジェクトは線のスタイルと色を指定します。

上ではオーソドックスな線と太めの線を引いています。

最後に

今回はpythonでエクセルを操作してみました。
colやrowの指定でプログラムとしても好きな場所に値を入力できますし、線を引いたり、セルを結合したりとできることは多いと思います。

以上、「Pythonでエクセルの操作を試してみる!」でした。
最後までご覧頂き、ありがとうございます。

ABOUT ME
MSK
九州在住の組み込み系エンジニアです。 2児の父親でもあります。 数学やプログラミングが趣味です。 最近Webプログラミングと曲面結び目理論にはまっています。