![見出し画像](https://assets.st-note.com/production/uploads/images/47293670/rectangle_large_type_2_1955cfd700dda7ff74e08979078e8f02.png?width=1200)
Python "openpyxl" No.4 データの抽出と振り分け
1. Excelシートのデータ抽出
データは本で勉強してる分のサンプルです。
こんな感じ。3行目からデータが入ってるのでA3からF9までのデータ抽出。
values = [cell.value for cell in row]
ってのがリスト内包表記ってやつらしい。リストの中で値を抽出していってるって感じかな。それを3行目から9行目まで繰り返してるって感じ。
とりあえずそんな仕組みだって事だ(笑)。
右端の計算式はExcel上でセル内に計算式が入ってるからそのまんま抽出しているみたい。
load_workbookメソッドに data_only = Trueを追加してやると計算された値が抽出される。
ちなみにどこまでデータが入っているか分からない場合、データが空かどうかを調べてデータを抽出する範囲を調べて実行する。
こんな感じ。sheetの範囲をF9999にしておいて、cellの値が空白のところで繰り返し処理が終わるって感じです。
iter_rows メソッドを使うとこんな感じ。
引数のmaxを省略して空のセルまでのデータを抽出してる。
2.ブックとシートの操作
ブックの操作
book = excel.workbook() #新規ワークブック作成
book = excel.load_workbook("ファイル名.xlsx") #ブックを開く
book = excel.load_workbook("ファイル名.xlsx", date_only = True) #セル内に計算式がある場合
book.close #ブックを閉じる
シートの選択
sheet = book.active #アクティブなシートの取得
sheet = book.worksheet[シート番号] # 任意のシート番号のシートを取得
sheet = book["シート名"] # シート名を指定して取得
print(book.sheetnames) # ブックないのシート名の一覧を作る。
シート作成、コピー、削除とシート名変更。
sheet = book.create_sheet(title = "シート名") # 新規シートを作成
sheet = book.copy_worksheet(book["シート名"]) # 既存のシートをコピーして得る
sheet.title = "新しい名前" # シート名を変更する
book.remove(book["シート名"]) # シートを削除
3.項目を抽出して別ブックに保存
本のサンプル。これを横浜と名古屋の名簿だけ抽出して別ブックに貼り付けする。
うーん。分かりにくいので分解。
最初の部分。ブック呼び出してシート選択。
分かりにくいところはレッツprint(笑)
最初のcustomersに項目だけのリストを作成かな。
んでExcelのデータをvaluesに放り込むと。
そのvaluesからリストの2項目め(values[1])が横浜か名古屋のデータのみを抽出して、customersのリストに放り込んでいくと。
んで新しいブックを作成して、A1にコメント。
んでcustomersのリストから1項目ずつ取り出してセルに書き出していくと。
最後にセーブ!
完成がこちらでございます。
1個ずつ考えていけばよく分かるかな。んーまだまだだねw
プランごとに別シートに分ける。
プログラムと実行結果はこんな感じ。
一個ずつ確認指定くと、(レッツprint)
sells に名簿のデータを書き出してるのかな。
nameにはこんな感じ。
てか、(name,area,plan) = cells って書き方できるんやね。便利w
snameは後ろに”プラン”をつけてるんやね。
下の if と else でsnameに含まれるシート名があるかチェックしているんやね。なければ新しいシート作成して項目(名前、住所、プラン)を作成。あればcellsのデータを順に書き込んでいくと。
それを元の顧客データがある分くり返すと。難しい〜。
そんな感じで今回はここまで。
この記事が気に入ったらサポートをしてみませんか?