python自動化学習 openpyxl学習 2

python自動化学習 openpyxl学習 2

学習目標

基本的なエクセル操作を学ぶ。
openpyxlのライブラリを使用してpthonからエクセルを操作してみる。

エクセルのワークシートのセルに値を設定する

今回は以下のコードを作成しました。
3つの方法でセルを指定しました。

import openpyxl as excel

book = excel.Workbook()
sheet = book.active

#セル名指定
sheet["A1"] = "セル名指定"

#行番号・列番号指定
sheet.cell(row=2, column=1, value="行列指定")

#任意のセルを取得して値を指定
cell = sheet.cell(row=3, column=1)
cell.value = "任意のセルを取得して値を指定"

book.save("cell_tes.xlsx")

セル名指定

#セル名指定
sheet["A1"] = "セル名指定"

ここでは直接セルの名前を「A1」を指定しました。

行番号・列番号指定

#行番号・列番号指定
sheet.cell(row=2, column=1, value="行列指定")

ここではcellメソッドを使用して、列・行を指定しています。
pyhonではリストなどの指定をする時は、0から数え始めますが、エクセルの場合は1から数え始めるので注意が必要です。

任意のセルを取得して値を指定

#任意のセルを取得して値を指定
cell = sheet.cell(row=3, column=1)
cell.value = "任意のセルを取得して値を指定"

ここでもcellメソッドを使用しています。先ほどと違うのは、1度セルを示すオブジェクトを取得して、それに対し値を設定しています。

考察

セル名を指定する方法と行番号・列番号を指定する方法は、プログラム初心者にも分かりやすい。「ここにこれを入れて!」と言っているようなものだと感じた。1度だけ値を設定して変更する必要がない場合などにはこの方法でも十分機能しそう。しかし、それならばエクセルに直接入力で事足りるのが正直な感想。

任意のセルを取得して値を指定する方法は、プログラミングらし方法と感じた。
セルを変数に格納することで、セルの値を後で再利用できたり、修正がしやすくなるのだろう、今回のように1つのセルのみを対象にする場合はややこしいだけではあるが、今後のpythonでエクセル操作の中では重要な方法の1つになると思う。

for文を使用して連続したセルに記入

import openpyxl as excel

book = excel.Workbook()
sheet = book.active

for i in range(10):
    sheet.cell(row=(i+1), column=1, value=(i+1))

book.save("sigoto2-3-2.xlsx")

for文を使って、値が10になるまで繰り返し、セルに代入していく。

sheet.cell(row=(i+1), column=1, value=(i+1))

ここではrowによってセルを指定しています。
iに+1を繰り返すことで読み込まれるごとに指定されるセルが変わっていきます。10までの時点でfor文が終了しますのでセルA10までが順番に指定されます。

columnはそのままカラムを示しています。

valueではiに対して+1したものを指定していますのでrow同様に10まで繰り返されます。

ここまでの内容を組み合わせてみよう

import openpyxl as excel

book = excel.Workbook()
sheet = book.active

for y in range(1, 10):
    for x in range(1, 10):
        cell = sheet.cell(row=y, column=x)
        cell.value = x * y


book.save("sigoto2-3-3.xlsx")

「任意のセルを取得して値を指定」とfor文を組み合わせて九九の表を作成。

for y in range(1, 10):
  for x in range(1, 10):

この部分で1から10になるまでの繰り返し、つまり9回の繰り返しを設定しています。
入れ子構造になっているので「y」と「x」がそれぞれ9になるまで繰り返されるようになります。

cell = sheet.cell(row=y, column=x)
cell.value = x * y

「任意のセルを取得して値を指定」しています。

for文の「y」が1の状態で、for文の「x」が9になるまで繰り返されます。
そのあとは、「y」が9になるまで繰り返されるので9×9が実現されます。

あと5秒で記事が閲覧できます。