openpyxlでエクセル内にリンクを貼って、
シート内の別の場所に移動させたい。
別のシートに移動させたい。
Webサイトに移動させたい。
全部できます!
openpyxlでハイパーリンクを貼って、
色々な場所に移動させる方法を紹介いたします!
【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。
openpyxlでハイパーリンクを設定するには
「hyperlink」を使います。まずはコードをご覧ください。
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws['A1'].hyperlink = 'output.xlsx#A10'
ws['A2'].hyperlink = 'output.xlsx#sheet2!A1'
ws['A3'].hyperlink = 'https://utataneblog760.com/'
wb.save('output.xlsx')
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
openpyxlの基礎解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
解説:ハイパーリンクの設定
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
シート内の別のセルへ移動
下記一文を記述することで、シート内の別のセルへ移動させるハイパーリンクを設定できます。
ws['A1'].hyperlink = 'output.xlsx#A10'
実行後、出力された「output.xlsx」を開き、A1セルの文字列をクリックしてみます。
※文字列は事前に記入されているものとします。文字列の記入も含めて設定する方法は後ほど解説いたします。
【結果】
カーソルがA10セルに移動しました。
<テンプレ>
【 ワークシート変数[‘ハイパーリンクを設定するセル名’].hyperlink = ‘ファイル名#移動させたいセル名’ 】
※ファイル名は出力後のファイル名を記述してください
別シートへ移動
エクセル内の別シートへ移動するには、下記のように記述します。
ws['A2'].hyperlink = 'output.xlsx#sheet2!A1'
右辺に「Sheet2(シート名)」が追加されただけです。
実行後、出力された「output.xlsx」を開き、A2セルの文字列をクリックしてみましょう。
【結果】
「Sheet2」の「A1」セルに移動しました。
<テンプレ>
【 ワークシート変数[‘ハイパーリンクを設定するセル名’].hyperlink = ‘ファイル名#移動させたいシート名!移動させたいセル名’ 】
Webサイトへ移動
今度はWebサイトへ移動させてみましょう。
例として、当ブログに移動するコードを書いてみました。
ws['A3'].hyperlink = 'https://utataneblog760.com/'
実行してみます。
【結果】
エクセルから当ブログに移動できました。
<テンプレ>
【 ワークシート変数[‘ハイパーリンクを設定するセル名’].hyperlink = ‘移動させたいWebサイトのURL‘ 】
セルへの書き込みと同時にハイパーリンクを設定
前項では、既に書かれていた文字にハイパーリンクを設定しました。
今度は、「文字の書き込み」と「ハイパーリンク設定」を同時にやってみましょう。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws['A1'].value = 'A10セルへ移動'
ws['A1'].hyperlink = 'output.xlsx#A10'
ws['A2'].value = 'Sheet2のA1セルへ移動'
ws['A2'].hyperlink = 'output.xlsx#sheet2!A1'
ws['A3'].value = 'https://utataneblog760.com/へ移動'
ws['A3'].hyperlink = 'https://utataneblog760.com/'
wb.save('output.xlsx')
6行目、9行目、12行目が追加されています。
他の行は前項と同じです。
セルに文字を書き込むには、
【 ワークシート変数[‘セル名’].value = ‘書き込みたい文字’ 】
というように記述します。
実行してみましょう。
【結果】
これで、「文字の書き込み」と「ハイパーリンクの設定」ができました。
書き込み含め1行で記載
前項で紹介した「文字の書き込み」と「ハイパーリンクの設定」は、2行に分かれた記述でした。
今度はこれを1行で記述してみましょう。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws['A1'].value = '=HYPERLINK("output.xlsx#A10", "A10セルへ移動")'
ws['A2'].value = '=HYPERLINK("output.xlsx#sheet2!A1", "Sheet2のA1セルへ移動")'
ws['A3'].value = '=HYPERLINK("https://utataneblog760.com", "https://utataneblog760.com/へ移動")'
wb.save('output.xlsx')
<テンプレ>
【 ワークシート変数[‘セル名’].value = ‘=HYPERLINK(“移動する場所”, “書き込みたい文字”)’ 】
新しく出てきたのは、「=HYPERLINK」です。
「=」を忘れず記述し、必ず大文字にしてください。
「移動する場所」や「書き込みたい文字」は前項で解説済ですので割愛します。
左辺のセル指定ですが、下記のように記述することもできます。
ws.cell(column=1, row=1).value = "=HYPERLINK('test.xlsx#A10', 'A10セルへ移動')"
ws.cell(column=1, row=2).value = "=HYPERLINK('test.xlsx#sheet2!A1', 'Sheet2のA1セルへ移動"
ws.cell(column=1, row=3).value = "=HYPERLINK('https://utataneblog760', 'https://utataneblog760.com/へ移動')"
<テンプレ>
【 ワークシート変数.cell(column=1, row=3).value = ・・・ 】
「column」は列番号(A列が1、B列が2)、
「row」は行番号(1行目が1、2行目が2)です。
※「A1」なら「column=1, row=1」
【このように記述するメリット】
少し難しくなるので詳細は割愛しますが、
数値の部分(列番号・行番号)を変数に変えれば、for文やif文を使っての書き込みや編集をすることが可能になります。
ハイパーリンクっぽい見た目に変更する方法
前項でハイパーリンクを設定する方法を紹介いたしました。
しかしながら、これでは文字の色が黒のため、ぱっと見ハイパーリンクが設定されているようには見えません。
これではせっかく設定したのにスルーされてしまう可能性が高いです。
ここからはもうひと手間加えて、ハイパーリンクっぽい見た目に変更してみましょう。
やることは簡単です。
文字色を青字にして、下線を追加するだけです。
ひとまず全コードをご覧ください。
import openpyxl
from openpyxl.styles import Font
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws['A1'].value = '=HYPERLINK("output.xlsx#A10", "A10セルへ移動")'
ws['A1'].font = Font(color='0000FF', u='single')
wb.save('output.xlsx')
今回はA1セルのみに設定しています。
コードの2行目と8行目に注目してください。
from openpyxl.styles import Font
2行目は、フォントスタイルの「インポート」をしています。
これは「文字色の変更」と「下線の設定」をするために必要ですので、忘れず記述してください。
ws['A1'].font = Font(color='0000FF', u='single')
8行目で「文字色の変更」と「下線の設定」を行っています。
詳細は下記記事をご参考ください。
これでハイパーリンクっぽい見た目にすることができました。
ハイパーリンクのみを削除する方法
設定されたハイパーリンクのみを削除するには、下記のコードを実行してください。
import openpyxl
from openpyxl.styles import Font
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws['A1'].hyperlink = None
ws['A1'].font = Font(color='000000', u=None)
wb.save('output.xlsx')
7行目と8行目に注目です。
7行目でハイパーリンクを削除し、8行目で「文字色の変更」と「下線の削除」をしています。
実行してみましょう。
ハイパーリンクのみを削除できました。
しかしながら、この方法で削除できない場合があります。
それは、書き込み含め1行で記載の項で紹介したように、「文字入力」と「ハイパーリンク設定」を一度に行った場合です。
ws['A1'].value = '=HYPERLINK("output.xlsx#A10", "A10セルへ移動")'
セルの中身がこのようになっている場合ですね。
セルの中身が「=HYPERLINK(・・・」になっている場合は、ハイパーリンクのみを削除することができません。
この場合は、セルの値を削除するか、別の値を上書きすることでハイパーリンクも削除することができます。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでハイパーリンクを設定する方法を解説いたしました。
記述の補足が書かれた別シートに移動させたり、引用元のWebサイトに移動させたりと、いろいろなことに使えますのでぜひご活用ください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!