セルの値を読み書き
シートの指定をする用法
import openpyxl wb = openpyxl.load_workbook("Data/売上データ.xlsx") #シート名で指定(シート名を記載) ws = wb["4月売上"] print(ws.title) #インデックス番号で指定する ws2 = wb.worksheets[1] print(ws2.title)
シートからセルを取得する
import openpyxl wb = openpyxl.load_workbook("売上データ_ copy") ws = wb["4月売上"] #セル番地で指定 c = ws["A1"] print(c.coordinate) print(c.row) print(c.colum) #行列番号で指定 c2 = ws.cell(1, 1) print(c2.coordinate) print(c2.row) print(c2.column)
結果
A1(セル番地) 1(行番号) 1(列番号) A1 1 1
セルの読み取り
変数.value
出力結果について
①数値や文字はそのまま出力される ②日付⇨datetime型で出力される 例)セル表示では2020/04/01でも出力では「2020-04-01 00:00:00」と時刻まで表示される ③数式 ⇨数式そのものが取得される
数式の値だけを取得したいとき
以下のようにブック名の後にdata_only=Trueと入れる!
import openpyxl wb = openpyxl.load_workbook("_____.xlsx", data_only=True) : :
セルに値を書き込む
c.value = 値
コード例
import openpyxl import datetime wb = openpyxl.load_workbook("売上データ_ copy.xlsx") ws = wb["4月売上"] # 日付のデータを作成 c = ws["A10"] c.value = datetime.datetime(2020, 4, 30) c2 = ws["B10"] c2.value = "株式会社 鈴木商店" c3 = ws["C10"] c3.value = "商品B" c4 = ws["D10"] c4.value = 3400 c5 = ws["E10"] c5.value = 12 # 数式 c6 = ws["F10"] c3.value = "=D10*E10" wb.save("売り上げデータ_4月修正.xlsx")
補足
日付は「datetime型」という「日時専用のデータ型」で値を代入する。
値を作成するためには、import datetimeでモジュールをインポートすること。
import datetime #日付データ d = datetime.datetime(年、月、日) # dt = datetime.datetime(年、月、日、時、分、秒)
セルの表示形式を設定
#変数Cにセルが代入されている場合 c.number_format = 表示形式(ユーザー定義の書式記号)
書式記号
#日付 yyyy/mm/dd yyyy/m/d yyyy/mm/dd hh:mm:ss yyyy/mm/dd h:mm:ss #数値 #,##0 (1,200) 0000 (0020) #### (20) 0.0 (12.0)
使用例
import openpyxl import datetime wb = openpyxl.load_workbook("売上データ_ copy.xlsx") ws = wb["4月売上"] c = ws["A10"] c.value = datetime.datetime(2020, 4, 30) # 日付の表示形式 c.number_format = "yyyy/m/d" c2 = ws["B10"] c2.value = "株式会社 鈴木商店" c3 = ws["C10"] c3.value = "商品B" c4 = ws["D10"] c4.value = 3400 # 数値の表示形式 c4.number_format = "#,##0" c5 = ws["E10"] c5.value = 12 c6 = ws["F10"] c6.value = "=D10*E10" # 数値の表示形式 c6.number_format = "#,##0" wb.save("売り上げデータ_4月修正2.xlsx")