本日の目的
- 開いたExcelに書かれているデータを取得して別なExcelに保存する。
フォルダ構成
root/
├ code/
│ └ 実行ソース達
└ data/
└ 開きたいExcel
ポイント的なアレ
- Excelを操作する
import
- openpyxl
とりあえずやってみる
- Excel操作
-
エクセル開く
- 既存ファイル例:wb = openpyxl.load_workbook(targetExcel, data_only=True)
- 新規ファイル例:wb2 = openpyxl.Workbook()
- targetExcelは対象エクセル(パス付き)
- Excel内の計算結果がほしいのでdata_only = Trueを記載。
-
保存
- 例:wb2.save(newFileName)
- newFileNameはファイル名
- 既存ファイルの保存も同様で、同じ名前なら上書き保存、違う名前なら別名保存。
- 例:wb2.save(newFileName)
-
Excel内のSheetにアクセスする。
- 例1:ws = wb[targetSheetName]
- 例2:ws = wb.worksheets[0]
- targetSheetNameはシート名
- シート名が不明な場合でも、例2のようにシート番号指定でアクセス可能。
-
まとめ
- 慣れるまでは苦戦しそうです。。がんばります。
参考
書いたコード
import sys
import os
import openpyxl
# 実際の売上データではありません。
# 直書きはしたくない。
targetExcel = r"../data/売上.xlsx"
targetSheetName = "先月売上"
newFileName = "新.xlsx"
newSheetName = "test"
targetRow = 5
maxCellNum = 6
# エクセル開く
# data_only=Trueで式の結果がとれる。無いと式自体がとれる。
wb = openpyxl.load_workbook(targetExcel, data_only=True)
# エクセル内のデータにアクセスする
ws = wb[targetSheetName]
# 空のリストをよーい
datalist = []
# 開いたエクセルから対象行のデータをリストにつっこむ
for num in range(maxCellNum):
datalist.append(ws.cell(targetRow, num+1).value)
print(datalist[num])
# 新しいエクセルをよーい
wb2 = openpyxl.Workbook()
ws2 = wb2.worksheets[0]
ws2.title = newSheetName
# 元のエクセルと同じ位置にset
for num in range(maxCellNum):
ws2.cell(targetRow, num+1).value = datalist[num]
# ほぞーん
wb2.save(newFileName)
追記:タイトル更新しました。