openpyxlでエクセルファイルを編集しているんだけど、
元々設定してある入力規則を別のセルにコピーしたい…。
なるほど…。
では今回は、「セルに設定された入力規則をopenpyxlで取得・コピーする方法」を
できるだけわかりやすく解説いたします。
セルに設定された入力規則をopenpyxlで取得・コピーする方法
for文を使ってセルの「dataValidation」を取得し、コピーします。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
下記コードは、A1セルの入力規則をA2セルにコピーした例です。
import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
for dv in ws.data_validations.dataValidation:
if 'A1' in dv.cells:
new_dv = DataValidation(
type=dv.type,
operator=dv.operator,
formula1=dv.formula1,
formula2=dv.formula2,
allowBlank=dv.allowBlank,
showErrorMessage=dv.showErrorMessage,
errorTitle=dv.errorTitle,
error=dv.error,
showInputMessage=dv.showInputMessage,
promptTitle=dv.promptTitle,
prompt=dv.prompt
)
ws.add_data_validation(new_dv)
new_dv.add('A2')
wb.save('C:/Utatane/output.xlsx')
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート~ブック・シートの取得
import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
上記コードにて、エクセル操作に必要な「openpyxl」や入力規則を設定するための「DataValidation」のインポートをしています。
詳細は、「入力規則の設定方法」の記事をご参考ください。
また、既存のエクセルファイルのブック・シートを取得しています。
こちらの詳細は、「インストール方法」の記事をご参考ください。
入力規則を取得
for dv in ws.data_validations.dataValidation:
if 'A1' in dv.cells:
new_dv = DataValidation(
type=dv.type,
operator=dv.operator,
formula1=dv.formula1,
formula2=dv.formula2,
allowBlank=dv.allowBlank,
showErrorMessage=dv.showErrorMessage,
errorTitle=dv.errorTitle,
error=dv.error,
showInputMessage=dv.showInputMessage,
promptTitle=dv.promptTitle,
prompt=dv.prompt
)
上記コードにて、入力規則を取得しています。
今回は、A1セルに設定された入力規則を取得した例です。
【コード要約】
まずはfor文でシート全体の入力規則をチェックし、A1セルに関連付けられているものが無いかチェックします。
A1セルに関連付けられているものがあれば、各プロパティを新しい変数に代入して取得完了です。
for文やif文、変数については、下記記事をご参考ください。
for dv in ws.data_validations.dataValidation:
if 'A1' in dv.cells:
new_dv = DataValidation(
type=dv.type,
operator=dv.operator,
formula1=dv.formula1,
formula2=dv.formula2,
allowBlank=dv.allowBlank,
showErrorMessage=dv.showErrorMessage,
errorTitle=dv.errorTitle,
error=dv.error,
showInputMessage=dv.showInputMessage,
promptTitle=dv.promptTitle,
prompt=dv.prompt
)
【コード詳細】
シート全体(ws)の入力規則(.data_validations.dataValidation)の中から1つ、変数(dv)に代入します。
変数(dv)に代入された入力規則が、A1に関連付けられているかをif文でチェックします。
(入力規則が複数あっても、for文で繰り返しチェックされます)
A1に関連付けられていれば、その入力規則のプロパティを新しい変数(new_dv)に代入し、入力規則の取得が完了となります。
【プロパティ】
type:規則のタイプ(「整数のみ」や「日付のみ」など)
operator:規則の条件(「○○以上」「○○以下」など)
formula1:指定の値1(0以上、100以上など)
formula2:指定の値2(10以下、1000以下など)
allowBlank:空白を許可するかどうか
showErrorMessage:エラーメッセージを表示するかどうか
errorTitle:エラーメッセージのタイトル
error:エラーメッセージの本文
showInputMessage:入力メッセージを表示するかどうか
promptTitle:入力メッセージのタイトル
prompt:入力メッセージの本文
入力規則をコピー(適用)
ws.add_data_validation(new_dv)
new_dv.add('A2')
上記コードにて、入力規則をコピー(適用)しています。
詳細は下記記事をご参考ください。
これでA1セルの入力規則が、A2セルにコピーされました。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでセルの入力規則を取得・コピーする方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!