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

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

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

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

Q&A

4回答

3181閲覧

pythonでExcelシート名を特定の名前に変更したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2021/05/30 03:04

編集2021/05/30 03:19

前提・実現したいこと

最近pythonをはじめ、google colaboratoryを使用しています。
調べて試行錯誤したのですが、違う結果が返ってくるため質問させてください。

■内容:シート名Sheet1~Sheet1280までのシートの名前を
Sheet1=P001_1,Sheet2=P001_2,Sheet3=P002_1,Sheet4=P002_2...
Sheet1279=P640_1,Sheet1280=P640_2のように一括変更したいです。

シート数は1280シートで、1シート目の名前はSheet1です。

試したこと

import openpyxl wb = openpyxl.load_workbook('data.xlsx') ws1 = wb['Sheet1'] idx = 0 for i in range(0,641): ws1 = wb.worksheets[idx] idx = idx + 1 file_name_1 = f'P{i:03}_1' file_name_2 = f'P{i:03}_2' ws1.title = file_name_1 ws1.title = file_name_2 wb.save('test.xlsx')

ここに問題に対して試したことを記載してください。
ws1のみ定義して試しましたが、ws1.title = file_name_2が最終的に採用されてしまうため全て_2となってしまい、1回の処理で2シート分の変更をしたいためfile_namae1とfilename2の定義をしていますが交互に処理できていません。

お手数ですが、よろしくお願いいたします。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答4

0

シート名生成部分とシート名変更部分を分けるのはどうでしょうか?

Python

1sheetnames = [] 2 3for i in range(1, 641): 4 file_name_1 = f'P{i:03}_1' 5 file_name_2 = f'P{i:03}_2' 6 7 sheetnames.append(file_name_1) 8 sheetnames.append(file_name_2) 9 10for i in range(0, len(sheetnames)): 11 wb.worksheets[i].title = sheetnames[i]

投稿2021/05/30 04:02

編集2021/05/30 04:04
meg_

総合スコア10602

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

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

so_men

2021/05/30 08:33

部分的に分けて考えるやり方の視点も大事ですね!すごくわかりやすくなるほど!!って思いました! 上記のやり方で解決できました。ありがとうございます!
guest

0

以下のように番号を振れば、1回の処理で1シート分の変更でよいです。

Python

1for idx in range(0,1280): 2 #ws1 = wb.worksheets[idx] 3 i1 = idx // 2 + 1 4 i2 = idx % 2 + 1 5 file_name = f'P{i1:03}_{i2}' 6 print(file_name) 7""" 8P001_1 9P001_2 10P002_1 11P002_2 12 : 13P640_1 14P640_2 15"""

投稿2021/05/30 03:57

can110

総合スコア38268

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

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

so_men

2021/05/30 08:29

ありがとうございます!//や%の使い方がよくわからないですができました!意味を調べて参考知識として吸収させていただきます!
guest

0

ファイル名に利用する数値を二つの変数で管理するとできそうです。

python

1import openpyxl 2 3wb = openpyxl.load_workbook('data.xlsx') 4 5#サンプル作成のため############# 6wb.create_sheet(title='Sheet_2') 7wb.create_sheet(title='Sheet_3') 8wb.create_sheet(title='Sheet_4') 9wb.create_sheet(title='Sheet_5') 10wb.create_sheet(title='Sheet_6') 11print(wb.sheetnames) 12################################ 13 14#count_1変数はファイル名前半,count_2変数はファイル名後半 15count_1 = 1 16count_2 = 1 17 18for i in range(len(wb.sheetnames)): 19 ws = wb['Sheet_' + str(i+1)] 20 print(ws.title) 21 file_name = 'P' + str(count_1).zfill(3) +'_' + str(count_2) 22 ws.title = file_name 23 count_2 +=1 24 if count_2 == 3: 25 count_2 =1 26 count_1 +=1 27 28print(wb.sheetnames)

投稿2021/05/30 03:52

t05708hn

総合スコア31

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

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

so_men

2021/05/30 08:30

やはり二つの変数でもできるんですね!サンプル作成もしていただきありがとうございます! 無事解決できました!
guest

0

ponponkさんは、どうしてJj646464さんの方の名前で質問しないのですか。
一連の質問なのですから、全体像が分かるように同じ名前で質問した方が、良い答えが返ってきますよ。

1つのシート内のデータを分割して複数のシートに展開したい。

指定のカウント数になったときに隣のシートに処理を移したい

リストを上から順に120個ずつExcelシートに転記したい

リストの値をExcelに反映していく

投稿2021/05/30 04:34

編集2021/05/30 05:10
ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問