今開いているエクセルファイルにハイパーリンクを設定したいんだけど、
xlwingsでハイパーリンクを設定する方法は無いの?
ありますよ!
では今回は、「xlwingsでハイパーリンクを設定する方法」を
できるだけわかりやすく解説いたします。
また、「別のシートに移動させる方法」や「ホームページへ移動させる方法」
も紹介いたしますので、ぜひ最後まで読んでいってください。
xlwingsでハイパーリンクを設定するには
「HYPERLINK()」を使います。まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import xlwings
workbook = xlwings.books.active
worksheet1 = workbook.sheets.active
hyperlink_text = 'A2セルへ'
worksheet1['A1'].value = f'=HYPERLINK("#A2", "{hyperlink_text}")'
hyperlink_text = 'A2セルへ'
worksheet1['A1'].value = f'=HYPERLINK("#A2", "{hyperlink_text}")'
xlwingsの処理は、予想以上に時間がかかることがあります。
プログラムの最後に「print(‘実行完了’)」などを追記し、完了したのを確認してから結果を見ましょう。
事前準備
- xlwingsのインストール
エクセルファイルを実際に操作するには、「xlwings」のインストールが必要になります。
xlwingsのインストール方法
xlwingsを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install xlwings
※xlwingsを使用したことがある場合は、このインストール作業は不要です。
インストール方法詳細やインストールができない場合の対処法、
基本的な使い方などは下記記事をご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート~シートの取得
import xlwings
workbook = xlwings.books.active
worksheet = workbook.sheets.active
上記コードにて、「xlwingsのインポート」「アクティブブック・アクティブシートの取得」をしています。
詳細は「アクティブシートの取得」の記事をご覧ください。
ハイパーリンクの設定
hyperlink_text = 'A2セルへ'
worksheet1['A1'].value = f'=HYPERLINK("#A2", "{hyperlink_text}")'
上記コードにて、A1セルにハイパーリンクを設定することができます。
(移動先はセルA2)
6行目で「セルA1」に書き込む文字をひとまず変数に入れます。
7行目の右辺には、「f’=HYPERLINK()’」を記述し、()内に「移動先のセル」と「6行目の変数」を記述します。
7行目の左辺は、取得したシートが入った変数とセル名を記述し、続けて「.value」を書いて完了です。
<テンプレ>
【 変数 = ‘セルに書き込む文字’ 】
【 シート変数[‘ハイパーリンクを設定するセル名’].value = f’=HYPERLINK(“#移動先のセル名”, “{変数}”)’ 】
- 「HYPERLINK」は全て大文字で記述する
- 「移動先のセル名」の前に「#」を記述する
- 「”」を「’」で代用すると動かないので、このまま記述する
実行してみましょう。
ハイパーリンクが設定できました。
では、設定したハイパーリンクをクリックしてみましょう。
カーソルがA2に移動し、リンクが働いていることがわかります。
別シートへ移動するハイパーリンク
前項では同一シート内のハイパーリンクでしたが、今度は「Sheet2」へ移動するハイパーリンクを設定してみましょう。
import xlwings
workbook = xlwings.books.active
worksheet1 = workbook.sheets.active
worksheet2 = workbook.sheets['Sheet2']
hyperlink_text = 'Sheet2へ'
worksheet1['A1'].value = f'=HYPERLINK("#{worksheet2.name}!A1", "{hyperlink_text}")'
前項と違うのは
- 5行目:Sheet2の取得を追加
- 8行目:移動先の指定
くらいです。
▼同一シート内の移動
worksheet1['A1'].value = f'=HYPERLINK("#A2", "{hyperlink_text}")'
▼別シートへの移動
worksheet1['A1'].value = f'=HYPERLINK("#{worksheet2.name}!A1", "{hyperlink_text}")'
実行してみましょう。
Sheet2へのハイパーリンクが設定できました。
リンクをクリックしてみましょう。
Sheet2へ移動できました。
ホームページへ移動するハイパーリンク
最後に、ホームページ(インターネット)へ移動するハイパーリンクを設定してみましょう。
import xlwings
workbook = xlwings.books.active
worksheet1 = workbook.sheets.active
hyperlink_text = 'utataneblogへ'
utataneblog = 'https://utataneblog760.com/'
worksheet1['A1'].value = f'=HYPERLINK("{utataneblog}", "{hyperlink_text}")'
今回は、7行目に「URL」を変数に入れるコードが追加されています。
また、移動先の設定も少し違います。見比べてみてください。
▼同一シート内の移動
worksheet1['A1'].value = f'=HYPERLINK("#A2", "{hyperlink_text}")'
▼別シートへの移動
worksheet1['A1'].value = f'=HYPERLINK("#{worksheet2.name}!A1", "{hyperlink_text}")'
▼ホームページへの移動
worksheet1['A1'].value = f'=HYPERLINK("{utataneblog}", "{hyperlink_text}")'
では、実行してみましょう。
当ブログへのハイパーリンクを設定できました。
リンクをクリックしてみます。
正常に移動できました。
うまく動作しない時
エラーが出る
‘NoneType’ object has no attribute ‘books’
エクセルブックやエクセルファイルを開いていないのに、ブックやファイルを取得しようとした場合に出るエラーです。
事前に対象のファイルを開くように指定するなど、構文を見直してみましょう。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
空のブックが生成される・残る
作業環境によっては「空のブック(Book1)」が生成されたり、残ってしまう場合があります。
このまま作業を続けると、空のブックがどんどん増えていく可能性があるため対処が必要です。
対処法としましては、何か別のエクセルを開いたままにしておきましょう。
そうすることで、空のブックは生成されません。
作業を始める前に、適当なエクセルファイルをひとつ開いておくことをおすすめします。
いつまでたっても実行されない
エラーは出ていないのに、いつまでたっても実行されない場合は、実行内容がエクセルに届いていない可能性があります。
「books.active」「sheets.active」を使用していて、エクセルファイルが最小化されていると、実行内容がエクセルに届かない場合があります。(もう1度実行すると、同じ内容が2回実行される)
エクセルは最小化せず、コードエディタとエクセルを並べて表示させた状態で実行するとうまくいきやすいです。
最後に
xlwingsでハイパーリンクを設定する方法を解説いたしました。
当ブログでは、xlwingsやopenpyxlなど、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!