0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

csvから、excel自動入力(csv使って)

Last updated at Posted at 2025-03-26

入れたいdata : 単発バイト給料 + 面接交通費

スクリーンショット 2025-03-27 1.02.38.png

スクリーンショット 2025-03-27 1.02.51.png


用意するもん

meisai.csv
train.csv
sam明.xlsx

sam明.xlsx中身

スクリーンショット 2025-03-27 1.08.00.png


やり方 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 = 
for i, row in enumerate(meisai_data, start=5):
    print(f"書き込み予定: {i}行目 → {row}")
    処理
    print(f"meisai_data のデータ数: {len(meisai_data)}")

チェック出力結果

スクリーンショット 2025-03-27 1.27.22.png


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 の中に入らずスキップされる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?