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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

663閲覧

実行したが何も表示されていない、エラーメッセージもなし

esg22

総合スコア3

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/11/17 07:35

前提

Pythonを用いて、Excelで集計を行っています。
フォルダ内にある複数(1000以上)のExcelファイルを1つのExcelファイルにまとめたいと考えています。
1段目では、ライブラリをインポートをしています。
2段目では、対象フォルダとその保存先、保存ファイル名を指定しています。
3段目では、フォルダ内にあるExcelファイルを列挙、各Excelを1つずつ、中身を次々と読んでいく。
4段目では、実行するプログラムです。
フォルダ内にある全てのExcelファイルの中身は52行×30列のデータで、このExcelファイルが1000個以上あります。このデータを新規Excelに1ファイルを1行で集計したいと考えています。成功例は画像のように1行目に1ファイル目、2行目に2ファイル目、・・・となるようにしたいです。イメージ説明
このプログラミング自体はネットから取ってきており、実際に使えることは1つのファイルを用いて確認済みなのですが、フォルダ内にある複数のExcelファイルで実行できるようにしたいのですが、上手くいきません。

実現したいこと

まとめとして、
フォルダ内にある全てのExcelファイルに4段目のプログラミングを実行できるようにしたいです。また、成功例として、画像のように1行に1ファイルとなるように集計したいと考えています。
どのようにすれば出来るのでしょうか。教えていただきたいです。

該当のソースコード

コード import openpyxl as px import os import glob from openpyxl import Workbook #対象ファイルが格納されているフォルダ target_dir = 'C:/Users/student/Documents/MyPython/hukusu' #保存先 save_file = 'C:/Users/student/Documents/MyPython/hukusu/まとめ.xlsx' #「まとめ.xlsx」作成 wb = px.workbook() ws = wb.active #「target_dir」にあるエクセルファイル一覧を取得 files = glob.glob(target_dir + '/*.xlsx') #「target_dir」にあるエクセルファイルを読み込む for fname in files: book = px.load_workbook(fname, data_only=True) sheet = book.active #行をループして、コピー&ペースト n=1 t=30 for i in range(1,53): for j in range(1,31): copy = ws.cell(row=i,column=j).value #j+t*(n-1)これにより1列目からスタートできる。2列目は+1する。 ws.cell(row=1,column=j+t*(n-1)+1,value=copy) n+=1 wb.save(save_file)

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

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

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

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

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

TakaiY

2022/11/17 12:01

「上手くいきません。」とはどういう状況なのでしょう。 「実際に使えることは1つのファイルを用いて確認済み」とあるときのプログラムも見せていただけますか。
esg22

2022/11/17 14:53 編集

import openpyxl as px import os import glob from openpyxl import Workbook ​ path_name ='./**.xlsx' load_path_name = './20140910-2300.xlsx' ​ for f in glob.glob(path_name): wb = px.workbook() ws = wb.active ws.title='Sheet1' wb1 = px.load_workbook(load_path_name) ws1 = wb1['Sheet1'] ​ n=1 t=30 for i in range(1,53): for j in range(1,31): copy = ws1.cell(row=i,column=j).value #j+t*(n-1)これにより1列目からスタートできる。2列目は+1する。 ws.cell(row=1,column=j+t*(n-1)+1,value=copy) n+=1 wb.save('matome.xlsx') このコードで、1つのExcelファイルを用いたときは、1行に並びました。 これをフォルダ内にある複数のファイルで実行したいのですが、ソースコードに載せているコードでは作成されたExcelファイルに何も出力されていませんでした。これを参考に実行するプログラム以外を、フォルダ内にある複数のファイルで実行するように変更させました。
guest

回答1

0

ベストアンサー

python

1import openpyxl as px 2import os 3import glob 4from openpyxl import Workbook 5 6#対象ファイルが格納されているフォルダ 7target_dir = 'C:/Users/student/Documents/MyPython/hukusu' 8#保存先 9save_file = 'C:/Users/student/Documents/MyPython/hukusu/まとめ.xlsx' 10#「まとめ.xlsx」作成 11wb = px.workbook() 12ws = wb.active 13 14#「target_dir」にあるエクセルファイル一覧を取得 15files = glob.glob(target_dir + '/*.xlsx') 16#「target_dir」にあるエクセルファイルを読み込む 17 18cnt=1#ファイルを一つ処理するごろに1行ずらす 19for fname in files: 20 book = px.load_workbook(fname, data_only=True) 21 sheet = book.active 22 23#行をループして、コピー&ペースト 24 n=0 25 t=30 26 for i in range(1,53): 27 for j in range(1,31): 28 copy = sheet.cell(row=i,column=j).value 29 30 ws.cell(row=cnt,column=j+(t*n)+1,value=copy) 31 n+=1 32 cnt+=1 33wb.save(save_file)

投稿2022/11/17 07:45

編集2022/11/17 09:29
pig_vba

総合スコア807

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

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

esg22

2022/11/17 08:02

wsの部分はそのままでも問題ないと思います。転記先についてはrow=iにしてしまうと1ファイルが1行でまとまらなくなってしまいます。 フォルダ内にある全てのExcelファイルに同じ処理させる方法を教えていただきたいです。
pig_vba

2022/11/17 08:11 編集

見落としてました。確かにiではなかったです。今なんファイル目かを表す変数が新たに必要ですね。 wsがそのままで問題ないとおっしゃる意味は理解しかねます。wsは新規作成した「まとめ.xlsx」のシートであって実際のデータが入っているエクセルファイルを管理しているのはbookとsheetなのですが…今のままだと新規作成した空ブックのデータの入ってないセルを延々とコピペする処理に見えるのですが
esg22

2022/11/17 14:52

確かにwsはsheetに直さなければなりませんでした。訂正、ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問