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

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

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

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

解決済

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

esg22
esg22

総合スコア3

Python 3.x

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

1回答

0グッド

0クリップ

332閲覧

投稿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)

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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ファイルに何も出力されていませんでした。これを参考に実行するプログラム以外を、フォルダ内にある複数のファイルで実行するように変更させました。

回答1

1

ベストアンサー

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

総合スコア648

spoofy_dragon👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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に直さなければなりませんでした。訂正、ありがとうございます

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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