teratail header banner
teratail header banner
質問するログイン新規登録
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

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

Q&A

解決済

2回答

6547閲覧

[python]openpyxlでエクセルを自動保存する時にファイル名に変数を使いたい

perochi

総合スコア5

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

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

0グッド

0クリップ

投稿2021/03/15 22:39

0

0

前提・実現したいこと

現在、openpyxlで元々作成済みのエクセルファイルを編集した後に自動保存するコードを作成中です。
自動保存する時は、作成済みのエクセルファイルの名前に変数(list[0])を追加したファイル名に変更したいです。

発生している問題・エラーメッセージ

エラーは出力しませんがlist[0]がそのままファイル名にlist[0]が追加されてしまいます。

該当のソースコード

コード一部抜粋にて記載します。

import openpyxl wba = openpyxl.load_workbook(r'C:\大フォルダ\中フォルダ\小フォルダ\ファイル名.xlsx') wsa = wba.worksheets[0] list = ["test","test2","test3"] list2 = ["tes","tes2"] for i, name in enumerate(list2): wsa.cell(row=5+i, column=2).value = name wba.save(r'C:\大フォルダ\中フォルダ\小フォルダ\ + list[0] + ファイル名.xlsx')

試したこと

'の位置を変えたりなどは試しましたがその他は検索しても自分のやりたいことが見つかりませんでした。

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

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

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

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

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

guest

回答2

0

別解です。

wba.save(f'C:\大フォルダ\中フォルダ\小フォルダ{list[0]}ファイル名.xlsx')

これはフォーマット済み文字列リテラルとよばれるものです。以下をご覧ください。

使い方はPythonのf文字列(フォーマット済み文字列リテラル)の使い方

投稿2021/03/15 23:13

ppaul

総合スコア24672

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

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

perochi

2021/03/15 23:46

こちらのコードでは以下のようなエラーが出力してしまいました。 Anomalous backslash in string: '\{'. String constant might be missing an r prefix. 何か解決方法はあるでしょうか。
ppaul

2021/03/16 01:55

すみません。よく見ていませんでした。 wba.save(f'C:\大フォルダ\中フォルダ\小フォルダ\{list[0]}ファイル名.xlsx') が正しいです。
guest

0

ベストアンサー

wba.save(r'C:\大フォルダ\中フォルダ\小フォルダ' + list[0] + 'ファイル名.xlsx')

ではどうでしょう


これじゃ'がエスケープされてしまうため面白くない結果となるようです
バックスラッシュは使わずに、
wba.save('C:/大フォルダ/中フォルダ/小フォルダ/' + list[0] + 'ファイル名.xlsx')
ってとこらへんでどうでしょう

投稿2021/03/15 22:49

編集2021/03/15 22:57
y_waiwai

総合スコア88180

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

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

perochi

2021/03/15 23:43 編集

バックスラッシュを使わない方法で想定通りの動作をしてくれました! シンプルで分かりやすい回答でしたのでベストアンサーとさせていただきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問