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

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

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

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

Python

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

Q&A

解決済

2回答

995閲覧

Pythonでフォルダ内のExcelとその全シートをひとつにまとめたい

pythontarou

総合スコア7

Python 3.x

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

Python

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

1グッド

0クリップ

投稿2022/04/27 08:11

編集2022/04/27 08:13

pythonで、フォルダ内のエクセルデータとその全シートを取得しひとつのファイルにまとめたいのでpythonを利用しプログラムを作成しています。

しかし試行錯誤を繰り返し数週間経ちましたが、あと一歩のところで未だにできず、困っているためアドバイスをお願い致します。


現段階で行いたいこと

1.ダイアログフォルダを選択
2.フォルダ内のエクセルデータを抽出
3.エクセルデータの全シートを抽出※ここができません
4.New.xlsxに上記をすべてコピー


シート番号を指定して1枚目は取得できたものの全てのシートにしようとすると色々おかしくなってしまいます。

ファイルの名前から番号を取得しようとするとエラーになってしまい困惑しています。

プログラミング初心者というのとこのサイトも日が浅いためご迷惑をおかけしますが何かとご教示お願い致します。

python

1import openpyxl 2import pandas as pd 3import seaborn as sns 4import datetime 5import glob 6import os 7import time 8import xlwings as xw 9from tkinter import filedialog 10 11 12names = xw.Book("C:\\Users\\tarou\\Desktop\\new\\New.xlsx") 13 14 15#時間 16 17 18def openning(): 19 dir = 'C:\\pg' 20 fld = filedialog.askdirectory(initialdir=dir) 21 return fld 22 23list = glob.glob(openning() + '/*.xlsx') 24print(list) 25 26 27 28 29#list = glob.glob("C:\\Users\\910143\Desktop\\*.xlsx") #Excel抽出 30time.sleep(3) 31print("start") 32#繰り返し 33 34 35for file in list: 36 filer1 = xw.Book(os.path.abspath(file))#ファイルの絶対パス 37 time.sleep(2) 38 print("---------------------------------------------------------------") 39 print("ファイル名:",file)#ファイルの名前 40 riss.append(filer1)#リストに格納(不要) 41 time.sleep(1) 42 wb = openpyxl.load_workbook(file)#ファイル読み込み 43 for ws in wb.worksheets: 44 create_title = ws.title + "_New" 45 # Nsheet = Neww.create_sheet(index=len(Neww.sheetnames), title=create_title) 46 print("シート名:",create_title) 47 filer1.sheets[0].copy(names.sheets[0]) 48 time.sleep(1) 49 names.save() 50 # filer1.close() 51 time.sleep(1) 52 53for file in list: 54 filer1 = xw.Book(os.path.abspath(file))#ファイルの絶対パス 55 print(filer1) 56 filer1.close() 57 58input("-------------finish----------------------------------------------") 59 60 61 62
kentpython👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

試行錯誤をしたあとだからでしょうが、xlwings と openpyxl の処理が混っています。 これらは別のものですから、それぞれで処理しても同じブックへの処理にはなりません。
filer1.sheets[0].copy(names.sheets[0])
この記述でコピーしようとしているのですからxlwingsで統一する必要があります。openpyxlの記述はすべて消してしまいましょう。

また、このcopyメソッドはシートオブジェクトのメソッドですから、

python

1for ws in filer1.sheets: 2 ws.copy(xxx)

こんな感じにすれば、コピーできるはずです。
ここで、xxxにはコピー先のブックのシートを指定する必要があります。残念ながら現在のコードにはその対象のブックの記述がありませんので、追加する必要があります。
それをoutputbookであるとしたら、末尾に追加するなら、

python

1 ws.copy(outputbook.sheets[-1])

のような感じにすればいいんじゃないかと思います。

まずは、1つのブックのシートを全て別のブックにコピーする処理を作ってみるのが確実だと思います。

投稿2022/04/27 09:13

編集2022/04/27 09:16
TakaiY

総合スコア12765

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

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

0

1つのブックのシートを全て別のブックにコピーする処理を作ってみたところうまく処理できました。
大変感謝いたします。

Python

1import xlwings as xw 2import glob 3import os 4from tkinter import filedialog 5from tkinter import messagebox 6 7names = xw.Book("Download_Book.xlsx") 8 9#ファイルダイアログ 10def openning(): 11 dir = 'C:\\pg' 12 fld = filedialog.askdirectory(initialdir=dir) 13 return fld 14#フォルダの中身をみるか 15 16Fin = messagebox.askyesno("サブフォルダがありますか?","フォルダを一つ飛ばして取得しますか?\n(いいえ:A\a,b,cの各excelを取得))") 17if Fin == True: 18 deside = "" 19else: 20 deside = "/*" 21 22print(deside) 23 24list = glob.glob(openning() + deside + "/*.xlsx") 25if not list: 26 print("ありません") 27 sys.exit() 28else: 29 print(list) 30 31i = 1 32#繰り返し処理 33for file in list: 34 print("--------------------------------------------------------") 35 print(file) 36 riss = xw.Book(file) 37#シート処理 38 for ws in riss.sheets: 39 paste = ws.copy(names.sheets[-1]) 40 print(i,"枚目 シート名:",ws) 41 i += 1 42 43names.save("Download_Book.xlsx") 44names.close() 45 46 47scsess= messagebox.askyesno('保存', 'Download_Book.xlsxが保存されました\nExcelを全て閉じますか?') 48if scsess == True: 49 app = xw.apps.active 50 app.quit() 51 print("close") 52 53 54else: 55 sys.exit() 56 57 58 59 60#for file in xw.books.active: 61 62#file.close() 63 64 65 66

投稿2022/04/28 08:11

pythontarou

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問