openpyxlで既存のエクセルファイルに名前の定義を設定したいんだけど、
すでに定義された名前がある…。
わかりやすくするためにいったん定義を削除して改めたいんだけど、
openpyxlでできるの?
なるほど…。
では今回は、「openpyxlで定義された名前を削除する方法」を
できるだけわかりやすく解説いたします。
また「エクセル内に定義された名前があるか確認する方法」も
紹介いたしますので、ぜひ最後まで読んでいってください。
エクセル内の定義された名前をopenpyxlで削除する方法
「defined_names.delete」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
下記コードは「Utatane」という名前の定義を削除した例です。
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
wb.defined_names.delete('Utatane')
wb.save('C:/Utatane/output.xlsx')
wb.defined_names.delete('Utatane')
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート~ブック・シートの取得
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
上記コードにて、エクセル操作に必要な「openpyxl」のインポートと、エクセルブック・シートを取得しています。
詳細は、「インストール方法」の記事をご参考ください。
定義された名前の削除
wb.defined_names.delete('Utatane')
上記コードにて、エクセル内にある「定義された名前」を削除することができます。
(今回は、「Utatane」と定義された名前を削除)
【コードの解説】
ワークブックが入った変数(今回はwb)に続けて、「.defined_names.delete()」を書きます。
()内には削除したい定義の名前を記述しましょう。
【注意点】
定義の名前は「’(クォーテーション)」で囲ってください。
下図が実行前の見本です。
左上の名前ボックスに「Utatane」という定義が入っています。
では、プログラムを実行してみましょう。
定義「Utatane」が削除されました。
新たに名前の定義を設定したい場合は、下記記事をご参考ください。
しかしながら、定義された名前がわからない場合もあるかと思います。
そこで、定義された名前を確認する方法や、シート内の定義を一括削除する方法も紹介いたします。
エクセル内の定義された名前を確認する方法
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
for defined_name in wb.defined_names.definedName:
print(defined_name.name, defined_name.attr_text)
上記コードにて、エクセル内(ワークブック内)の定義された名前を確認・表示することができます。
ワークブック内なので、Sheet1だけではなくSheet2など、他のシートも取得されます。
▼表示例
定義された名前が存在しない場合は、何も表示されません。
【コードの解説】
ワークブック内の定義された名前の配列を取得し、for文を使って順々に表示しています。
- defined_names:定義(definedName)の配列
(今回の例:[Baumkuchen, saleprice, Utatane]) - defined_name:定義を1つ入れるための変数
- defined_name.name:定義の名前
- defined_name.attr_text:定義された範囲
for文や定義については下記記事をご参考ください。
エクセル内の定義された名前を一括削除する方法
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
all_defined_names = list(wb.defined_names.definedName)
for defined_name in all_defined_names:
wb.defined_names.delete(defined_name.name)
wb.save('C:/Utatane/output.xlsx')
上記コードにて、エクセル内(ワークブック内)の定義された名前を一括削除できます。
簡単に解説します。
6行目で「定義された名前」を配列(all_defined_names)に入れています。
8~9行目で、「配列(all_defined_names)」に入った定義たちの中から1つを「変数(defined_name)」に入れ、削除しています。
for文で「配列(all_defined_names)」の中身が無くなるまで繰り返します。
10行目は「定義された名前の削除」の時とほぼ同じです。
(直接名前を書いてたのが、変数に変わっただけ)
これで定義された名前がわからなくても、エクセル内(ワークブック内)の定義をすべて削除することができます。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
エクセル内の定義された名前をopenpyxlで確認・削除する方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!