入れたいdata : 単発バイト給料 + 面接交通費
用意するもん
✅
meisai.csv
train.csv
sam明.xlsx
sam明.xlsx中身
やり方 1️⃣
データを入れたい行を決め、行を指定
# 5行目からデータ入れる
start_row = 5
for i, row in enumerate(meisai_data, start=5):
# 17行目からデータ入れる
start_row = 17
for i, row in enumerate(train_data, start=17):
やり方 2️⃣
列を指定
[ 1. dataが "14,コンビニ,梅屋敷→生麦,6418,456" なら]
ws[f'A{start_row}'] = row[0] # 日付
ws[f'B{start_row}'] = row[1] # 勤務先
ws[f'C{start_row}'] = row[2] # 経路
ws[f'D{start_row}'] = row[3] # 交通費(往復)
ws[f'E{start_row}'] = row[4] # 給料
start_row += 1
[ 2. dataが "21,大森→恵比寿,460" なら]
ws[f'A{start_row}'] = row[0] # 日付
ws[f'B{start_row}'] = row[1] # 経路 ws[f'C{start_row}'] = row[2] # 交通費
start_row += 1
データがちゃんと入力できてるかチェック
✅
start_row = 5
for i, row in enumerate(meisai_data, start=5):
print(f"書き込み予定: {i}行目 → {row}")
※処理
print(f"meisai_data のデータ数: {len(meisai_data)}")
チェック出力結果
csvファイル読み込み
✅
def read_csv_file(file_name):
data = []
with open(file_name, newline="", encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
next(reader) # ヘッダーをスキップ
for row in reader:
row = [cell.strip() if cell else '' for cell in row] # Noneを空文字に変換
if any(row): # 1つでもデータが入っていれば追加
data.append(row)
return data
# CSVデータを読み込む
meisai_data = read_csv_file('meisai.csv')
train_data = read_csv_file('train.csv')
excelF3の数式 自動コピペ
from openpyxl.formula.translate import Translator
ws[f'F{start_row}'] = Translator(ws["F3"].value, origin="F3").translate_formula(f"F{start_row}")
数式 自動コピペ
from openpyxl.formula.translate import Translator
ws[f'F{start_row}'] = Translator(ws["コピペしたい数式があるセル"].value, origin="コピペしたい数式があるセル").translate_formula(f"F{start_row}")
code全文
☑️
import csv
from openpyxl import load_workbook
# CSVファイルの読み込み
def read_csv_file(file_name):
data = []
with open(file_name, newline="", encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
next(reader) # ヘッダーをスキップ
for row in reader:
row = [cell.strip() if cell else '' for cell in row] # Noneを空文字に変換
if any(row): # 1つでもデータが入っていれば追加
data.append(row)
return data
# CSVデータを読み込む
meisai_data = read_csv_file('meisai.csv')
train_data = read_csv_file('train.csv')
# Excelファイルを開く
wb = load_workbook('sam明.xlsx')
ws = wb["シート1"]
# meisai.csvのデータをA5から書き込む
start_row = 5
for i, row in enumerate(meisai_data, start=5):
print(f"書き込み予定: {i}行目 → {row}")
# 必要なデータが揃っている場合のみ書き込む
ws[f'A{start_row}'] = row[0] # 日付
ws[f'B{start_row}'] = row[1] # 勤務先
ws[f'C{start_row}'] = row[2] # 経路
ws[f'D{start_row}'] = row[3] # 交通費(往復)
ws[f'E{start_row}'] = row[4] # 給料
start_row += 1 # 次の行に進む
print(f"meisai_data のデータ数: {len(meisai_data)}")
# train.csvのデータをA17から書き込む
start_row = 17
for i, row in enumerate(train_data, start=17):
print(f"書き込み予定: {i}行目 → {row}")
ws[f'A{start_row}'] = row[0] # 日付
ws[f'B{start_row}'] = row[1] # 経路
ws[f'C{start_row}'] = row[2] # 交通費
start_row += 1 # 次の行に進む
print(f"train_data のデータ数: {len(train_data)}")
# Excelファイルを保存
wb.save('sam明.xlsx')
コピペしたい合計の数式があるが、一回目のみ、数式コピペしない
first_formula = ws['G3'].value
セルG4から、合計関数コピペ
for row in range(4, ws.max_row + 1):
ws[f'G{row}'] = f'={first_formula[1:]}{row}'
解説後
start 列 、end 行 で調べてる
df.loc[end, start]
→ 行 "新橋" & 列 "大森"の値(例: 378)取得
取得dataを "交通費(往復)" のセル(D{start_row})に代入
列 に "大森", "渋谷" ある?
行 に "新橋", "原宿" ある?
for start, end in zip(start_stations, end_stations):
start_stations と end_stations から「出発駅」 /「到着駅」を2つ同時に取り出す」
💡 zip() 、2つのリストを 同時に1つずつ取り出せる
if start in df.columns and end in df.index:
start(出発駅)が 列にあり、end(到着駅)が 行にあるか?」チェック
df.columns → 列(カラム名)のリスト
df.index → 行(インデックス)のリスト
サンプル
start_stations = ["大森", "渋谷", "池袋"]
end_stations = ["新橋", "新宿", "品川"]
for start, end in zip(start_stations, end_stations):
print(start, end)
結果
大森 新橋
渋谷 新宿
池袋 品川
サンプル2
df がこんな形なら👇
大森 渋谷 池袋
新橋 378 420 500
新宿 300 350 450
品川 250 270 320
df.columns → ["大森", "渋谷", "池袋"]
df.index → ["新橋", "新宿", "品川"]
例えば start = "大森", end = "新橋" なら
"大森" in df.columns → ✅(ある)
"新橋" in df.index → ✅(ある)
→ 処理続行!
start = "横浜"
"横浜" in df.columns → ❌(ない)
if の中に入らずスキップされる。