excel ハイパーリンク 開かない
excel セルにurl 開かない
これらの検索キーワードで表示される対処法では対処できなかったので、このページを作成しました。同様の事象解消の参考になれば幸いです。
目次
1.発生した事象
2.Webで検索した対処方法と結果
3.対処方法(1)レジストリの変更
4.対処方法(2)Webサイト側の変更
5.参考URL
1 発生した事象
Salesforce上のPDF URLをExcelのセルにリンクとして挿入したものを起動すると、https://aaaaaa.force.com/bbbbbb/apex/NCDS・・・ を開くことができません。必要な情報をダウンロードできません。 という エラーダイアログが表示される。
※本来はブラウザが起動しSalesforceのログイン画面が表示され、ID/PWを入力するとPDFが表示される。
Windows10、IE11、office2016、お客様のゲートウェイ(プロキシ)経由でインターネットへ(セキュリティ対策を種々実施されている)、セキュリティソフトを一時停止しても改善せず。
No |
切り分け |
切り分け結果 |
1 |
IEでURLを入力した場合の起動 |
|
2 |
ExcelでURLを短く修正して起動する。 |
① https://aaaaaa.force.com/bbbbbb/apex/NCDSRM__vfSRMOutPdf 上記までURLを短くしても、Excelからは正常起動せず。 ② https://aaaaaa.force.com/bbbbbb/ 上記までURLを短くすると、Excelから正常起動する。 ⇒上記①URLのレスポンスに対するExcelの挙動に問題あり? |
3 |
IE開発者ツールで挙動を確認する |
上記①②のURLについて挙動の違いを確認した結果、 ① は、HTTP401(Unauthorized)のレスポンスになり、その後、JSで window.location.href = url でリダイレクト処理されていた。 ② は、HTTP200(OK)のレスポンスになり、その後、JSで window.location.href = url でリダイレクト処理されていた。 |
E開発者ツールのリクエスト失敗URL(PDFのURL)のレスポンス結果のHTML抜粋
HTTP401のレスポンスで、以下HTMLが返却されていた。
<html><head> <meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<script> function redirectOnLoad(){ var escapedHash = ''; var url = 'https://aaaaaa.force.com/bbbbbb/login?ec=302&inst= 〜中略〜 Bss1fE%252BWdXcQXuCFIGAwpKigGY3S3xjpH%26dataId%3D0060I00000g06MLQAY'; if (window.location.hash) { escapedHash = '%23' + window.location.hash.slice(1);}
if (window.location.replace){ window.location.replace(url + escapedHash); } else { window.location.href = url + escapedHash;}
} redirectOnLoad(); </script> </head> </html> |
リクエスト成功URL(トップ画面URL)のレスポンス結果のHTML抜粋
HTTP200のレスポンスで、以下HTMLが返却されていた。
<html><head> <meta HTTP-EQUIV=\"PRAGMA\" CONTENT=\"NO-CACHE\">
<script> function redirectOnLoad() { if (this.SfdcApp && this.SfdcApp.projectOneNavigator) { SfdcApp.projectOneNavigator.handleRedirect('/bbbbbb/login'); }else if (window.location.replace){ window.location.replace('/bbbbbb/login'); }else{ window.location.href ='/bbbbbb/login';
} } redirectOnLoad(); </script> </head></html> |
2 Webで検索した対処方法と結果
下記レポートを順に試す(レジストリ変更も試す)も改善せず。
https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_outlook-mso_win10-mso_2016/outlook2016ハイパー/6fce56e2-1999-4a69-bd98-0f5edc0137a8
「原因はよくわからないが、Microsoftが配布しているFix itで修復することができる」との記載があり、以下URLのサイトを元に試してみるも改善せず。
http://support.microsoft.com/ja-jp/kb/310049/ja
※上記URLの対応(fix)は、HKCR\.html のレジストリ値(文字列)を"htmlfile"に設定するもので、この前に試したレジストリ変更と実施内容は変わらずでした。
関連する記事としてこちらも発見しこちらで解消しました。この部分を改めて3で記載しますが、その部分の解説が分かり易かったので引用します。
https://social.msdn.microsoft.com/Forums/ja-JP/ff24d7a6-d0c7-4387-8263-a3ab9cd4d7b9/office?forum=officesupportteamja
※同ページから引用(下線は当ページで追加)
”Office はファイル内のリンクを開くとき、 OS または IE のコンポーネントを用い、そのパスを処理します。
パスを処理する過程では、リンク先のサーバーがどのようなものであり、どのような機能を提供しているかなどを確認します。
このような処理を行う目的は、対象の Web サーバーへの到達確認や、対応している機能を確認するため等が挙げられます。
しかしながら、プロキシサーバを使用している場合などの特定の条件下では、認証ダイアログが表示されたり、正常に開かないといった事象が発生する可能性があります。
この時、レジストリ ForceShellExecute を 1 に設定すると、シンプルな形でリンクを開こうとするようになり、事象が改善する可能性があります。”
3 対処方法(1)レジストリの変更
-
レジストリ ForceShellExecute を変更。
資料Error message when selecting hyperlink in Office: "Cannot locate the Internet server or proxy server"
このレジストリを設定した場合、Office アプリケーションでは Shell の機能を利用してハイパーリンクを処理するとのこと。
結果、直接ブラウザで URL が処理され、本事象を回避できる可能性があるとのこと。
以下のレジストリを設定。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\9.0\Common\Internet
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\9.0\Common\Internet
名前: ForceShellExecute
種類: DWORD
値: 1
- 参考資料
Office のハイパーリンククリックで生じる問題への対処について (ForceShellExecute レジストリによる対処と影響)
4 対処方法(2)Webサイト側
- 認証前のURLをSFDC側で処理する際、HTTP401ではなくHTTP200を返すようWebAPを修正。
ExcelでHTTP401を受信すると障害が発生する場合があるという想定の元、WebAP側を修正し、HTTP401を返却しないようにする対応。ここは追って加筆修正します。
5 参考URL
https://qastack.jp/superuser/444984/excel-hyperlink-not-redirecting-properly-bug
http://houhouzensho.blog110.fc2.com/blog-entry-903.html
https://support.microsoft.com/ja-jp/help/310049/hyperlinks-are-not-working-in-outlook
インターネットの情報を見ると、ExcelのURLリンクにはバグがある記載が多く存在するため、Excelのバージョンやパッチ状況によって、リンク先のURLが正常に起動されない条件が一定存在するようです。
また、Office製品がインターネットにアクセスする際は、 Microsoft Office Protocol Discovery というIE部品を利用してURLをチェックしてからインターネットにアクセスするという情報があり、IEとExcelとではインターネットへのアクセス方法が異なるみたいです。
その結果、HTTP401(認証エラー)とHTTP200(正常)のレスポンスコードの違いによってExcel側のインターネットアクセスの挙動が変わる、または、「HTTP401+リダイレクト」という2つの条件が重なった時、正常処理されないということが起こっていた、という内容と対処方法でした。参考まで。