Pythonを使ってExcel操作をするうえでセルの値を自由に変更できないと意味がないですよね。
文字列や数値の書き込みだけでなく数式の書き込みもできるようになりましょう。
今回はセルの基本的な扱い方を紹介していきます。
もちろん、Excelファイルとシートは開いている前提で解説していきます。
これから紹介するコードは以下のコードの続きになると考えてください。
シートまで開いた状態からのスタートになります。
1 2 3 4 5 6 7 8 |
>>> import openpyxl >>> path = r"C:\Documents\sample.xlsx" >>> wb = openpyxl.load_workbook(path) >>> sheet = wb['シート1'] #この続きのコードを紹介します。 #最後は必ず保存します。 >>> wb.save(path) |
これらの開き方に関しては以下の記事にまとめています。
PythonでExcel操作をするためにはopenpyxlモジュールが必要です。pipでインストールしてから使う必要があります。 以下ではワークブック(Excelファイル)は開いているものとして解説していきます。これから紹介するメソ[…]
PythonでExcel操作をするときには必ずファイル(ワークブック)の読み込みからシートの指定をする必要があります。 今回はそんな基本的な部分のコードの書き方を3ステップで紹介していきます。 1:openpyxlモジュールの[…]
- Excelファイルを取得するとWorkbookオブジェクトが作られます
- シートを取得するとWorksheetオブジェクトが作られます
- セルを取得するとCellオブジェクトが作られます(←この記事の内容)
セルを指定する方法
行列名を使う
Excelの行名には1から始ま整数が、列名にはAから始まるアルファベットがそれぞれ割り振られています。
ですから、行列名は「A2」「F25」のようにアルファベットと整数の組み合わせで決められています。
この行列名をWorksheetオブジェクトに指定ストとそのCellオブジェクトを作ることができます。
1 2 3 4 5 |
#A2のセルを指定 >>> sheet['A2'] #F25のセルを指定 >>> sheet['F25'] |
cellメソッドを使う
- Worksheetオブジェクトにcellメソッドを使う
- row(行)とcolumn(列)をキーワード引数で渡す
- 行も列も整数で指定する
上のように行列名で指定するとアルファベットと整数が出てくるので煩雑になります。また、for文などのループ処理では扱いにくくなります。
そこで、行と列を両方とも整数で指定するためにcellメソッドを使います。このメソッドを使うと行と列を1から始まる整数で指定できます。
1 2 3 4 5 |
#A2のセルを指定 >>> sheet.cell(row=2, column=1) #F25のセルを指定 >>> sheet.cell(row=25, column=5) |
このように整数でセルを指定することによって以下のようにループ処理させることができます。
1 2 3 4 |
#A列の1~10までを表示 >>> for i in range(10): col_a = sheet.cell(row=i, column=1).value print(col_a) |
このとき使っているセルの値を取得するvalue属性の使い方は下に続きます。
セルの読み書き
value属性:セルの値を取得
- セルを指定する
- value属性でセルの値を取得
- 数値と文字列は区別される
上のExcelデータをもとに値を取り出しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#A1のセルの値を取得 >>> sheet['A1'].value 123 >>> sheet.cell(row=1, column=1).value 123 #B1のセルの値を取得 >>> sheet['B1'].value 'セルです' >>> sheet.cell(row=1, column=2).value 'セルです' #C1のセルの値を取得 #値がない場合は表示されない >>> sheet['C1'].value >>> sheet.cell(row=1, column=3).value |
セルに何も入力されていないときは「None」扱いになります。
以下のように書くとセルに書き込むことができます。
数式の書き込み
- 数式ごと文字列で入力する
- イコールから入力する
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#数式の入力 >>> sheet['C1'].value = '=5+6' #数式の出力 >>> sheet['C1'].value '=5+6' >>> sheet['A1'].value = 200 >>> sheet['A2'].value = 300 >>> sheet['A3'].value = 500 >>> sheet['A4'].value = '=SUM(A1:A3)' #出力しても式が表示される >>> sheet['A4'].value '=SUM(A1:A3)' |
'=SUM(A1:A3)'
のように数式を書き込んで計算することは可能です。画像でも実際のExcelファイルには計算された1000が書き込まれていることが分かります。
ですがその値を出力しようとすると'=SUM(A1:A3)'
となり計算結果が分かりません。
そこで計算結果を確認するにはWorkbookオブジェクトの読み込み方を変える必要があります。
数式の読み込み
- openpyxl.load_workbook関数を使う
- キーワード引数に「data_only=True」を指定する
- デフォルトでは「data_only=False」になっている
1 2 3 4 |
>>> wb_data = openpyxl.load_workbook(path, data_only=True) >>> sheet_data = wb_data['シート3'] >>> sheet_data['A4'].value 1000 |
先ほどの例でA4のセルに1000と計算されている値を取得しています。このようにWorkbookオブジェクトにキーワード引数を指定するとデータのみ取得できます。
Workbookオブジェクトは複数個作ることができます。数式を入力する用と計算結果を取得するようで一つずつオブジェクトを作ると編集しやすいですね。
もしこの方法で計算結果を取得できない場合は、数式を入力した後に一度Excelを開いて上書き保存してから試してみましょう。
まとめ
- セルを指定
- Worksheetオブジェクトに行列名を指定
- cellメソッドに行列番号を指定
- セルの読み書き
- value属性を使う
- 数式の読み書き
- イコールから文字列で入力
- 読み込みはopenpyxl.load_workbook関数のキーワード引数「data_only=True」を指定
プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]