質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2272閲覧

【Python】Excelデータを転記→請求/納品書作成

mangiamo

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/25 12:53

###Excelデータの転記
Python初心者です。
フォルダ内に顧客別に作成している伝票(wb)から必要な情報のみを
転記し、請求書(wb)、納品書(wb)の作成をしたいと思っています。
フォルダ内には5社分のワークブックが入っており、最終、請求書(wb)、納品書(wb)に
顧客別にシートを増やしていきたいと考えています。
ベースのプログラムはインターネットから取ってきました。
請求書、納品書のシートが5つ書き出されるのですが、
最後の顧客情報が5つのシートにコピーされてしまいます。
ご教示頂けると幸いです。

元URL:https://news.mynavi.jp/article/zeropython-37/

該当のソースコード

Python

1ソースコード 2import openpyxl, pprint 3from datetime import datetime 4import glob 5import pandas as pd 6# ファイル名の指定など --- (*1) 7file_list = glob.glob(r'C:\Users\デスクトップ\october*.xlsx')# 納品物一覧 8file_invoice= "invoice.xlsx" # 請求書のテンプレート 9file_delivery = "delivery_slip.xlsx" # 納品書のテンプレート 10file_out_iv = "out-invoice.xlsx" # 生成する請求書 11file_out_ds = "out-delivery_slip.xlsx" # 生成する納品書 12# 納品物一覧を読み込む --- (*2) 13for list in file_list: 14 wb = openpyxl.load_workbook(list, data_only=True) # 数式でなく値を取り出す場合 15 ws = wb.active # sheet1を選ぶ 16 name = ws["C3"].value # 宛名を得る 17 iv_no = ws["J2"].value #伝票number 18 list_data = ws["C8"].value # 任意の範囲を取得 19 price_tax = ws["F20"].value #税込み金額 20# 請求書と領収書のテンプレートを読む --- (*3) 21wb_iv = openpyxl.load_workbook(file_invoice) 22ws_iv = wb_iv.active 23wb_ds = openpyxl.load_workbook(file_delivery) 24ws_ds = wb_ds.active 25# 宛名と日付を書き込む --- (*4) 26for list in file_list: 27 cdate = datetime.now().strftime("%Y/%m/%d") 28 ws_iv["A3"].value = name 29 ws_iv["F2"].value = cdate 30 ws_ds["A3"].value = name 31 ws_ds["F2"].value = cdate 32# 納品物を書き込む --- (*5) 33for list in file_list: 34 ws_iv["A13"].value = list_data 35 ws_iv["F13"].value = price_tax 36 ws_ds["A13"].value = list_data 37 ws_ds["F13"].value = price_tax 38# 新しく保存する --- (*6) 39for list in file_list: 40 ws_new_iv = wb_iv.copy_worksheet(ws_iv) 41 ws_new_iv.title = str(iv_no) 42 ws_new_ds = wb_ds.copy_worksheet(ws_ds) 43 ws_new_ds.title = str(iv_no) 44wb_iv.save("請求書.xlsx") 45wb_ds.save("納品書.xlsx") 46

補足情報(FW/ツールのバージョンなど)

windows10
anaconda3 64bit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

最後の顧客情報が5つのシートにコピーされてしまいます。
この原因は

Python

1# 納品物一覧を読み込む --- (*2) 2for list in file_list: 3 wb = openpyxl.load_workbook(list, data_only=True) # 数式でなく値を取り出す場合 4 ws = wb.active # sheet1を選ぶ 5 name = ws["C3"].value # 宛名を得る 6 iv_no = ws["J2"].value #伝票number 7 list_data = ws["C8"].value # 任意の範囲を取得 8 price_tax = ws["F20"].value #税込み金額

この処理で変数に代入しているのですが、何度も同じ変数に代入するために最後の顧客情報しか得られないためです。
おそらくですが、# 納品物一覧を読み込む --- (*2)の行のfor文から一番最後までを一つのfor文にまとめてあげれば可能な気はします・・・あくまでおそらくですが。

投稿2021/01/26 04:26

norapomu

総合スコア224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問