【问题标题】:Excel links not loading pages, but when the link is pasted in the browser it works.Excel链接不加载页面,但是当链接粘贴到浏览器中时它可以工作。
【发布时间】:2012-03-11 16:39:47
【问题描述】:

通过我的 ruby​​-on-rails 应用程序,我已将超链接放置在 Excel 电子表格中。这些链接指向一些需要的特权页面,登录后我应该被带到请求的页面。但是,发生的事情是登录后我在网站的主页上登录。有趣的是,当我右键单击 excel 中的链接并将链接粘贴到网络浏览器 url 中时,它按预期工作。所以我认为这不是我的应用程序的错,而是我缺少的 excel 中的某些内容?

我的场景和这个场景差不多: http://www.geekstogo.com/forum/topic/289186-excel-2007-hyperlink-loads-web-login-screen-not-linked-urlplease-help-me/

【问题讨论】:

  • 你确定超链接文本和 URL ae 相同吗?文本可能显示完整地址(因此在复制粘贴时有效)但基础 URL 格式错误?
  • 我复制它的方式是在 excel-sheet 中右键单击它,然后将地址字段中的所有内容复制粘贴到浏览器,这样就可以了。如果已经登录,复制粘贴链接会将我带到页面,但在 excel 中单击相同的链接会将我带到登录页面(然后到主页。)

标签: ruby-on-rails excel hyperlink


【解决方案1】:

我已经更新了@Bharath 回答中的redirect.html,用现在可用的Web API 替换了正则表达式操作:

请参阅@Bharath 的original answer 以获得进一步的解释。

<!DOCTYPE html>
<html lang="en">
<body>
One moment please. We are trying to connect you ...
<script type="text/javascript">
    const url = new URL(window.location.href);
    const params = new URLSearchParams(url.search);
    const redirectTo = params.get('page');
    location = `${url.origin}/${redirectTo}`;
</script>
</body>
</html>

当然,还有处理错误的空间(例如if (params.has('page'))等。

另请参阅 Google 的 Eric Bidelman 的 Easy URL Manipulation with URLSearchParams

【讨论】:

    【解决方案2】:

    这个问题通常发生在 IE 中,我也遇到了同样的问题。

    解决方法很简单

    1. 在您的公用文件夹(公用文件夹,因为您使用 ROR)中创建一个 redirect.html 页面
    2. 将此复制到您的redirect.html

    <html>
    <body>
    Please wait, loading your page... 
    <script type="text/javascript">
    function getQuerystring(key) {
    key = key.replace(/[\[]/,"\\\[").replace(/    [\]]/,"\\\]");
    var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
    var query = regex.exec(window.location.href);
    return query[1];
    }
    window.location = window.location.protocol + "//" + window.location.host + "/" + getQuerystring('page');
    </script>
    </body>
    </html>
    

    1. 你在excel中构建的链接应该修改

      例如旧链接 - http://test.com/post/comments/1 新链接应该是 - http://test.com/redirect.html?page=post/comments/1

    2. 您需要将 URL 的一部分(在基本 url 之后)作为参数传递

    这是如何工作的。

    当用户单击 excel 中的链接时,它指向 redirect.html,javascript 构造实际 URL 并再次重定向到正确的页面,如果已经登录,用户将被导航到实际页面,否则重定向到登录/主页。

    【讨论】:

    【解决方案3】:

    这是 Excel 的 internal URL handling 的问题,它与现代 Web 设计模式(例如会话 + 重定向)存在问题。

    这是一个绕过 Excel 内部机制并使用操作系统默认 URL 处理程序的客户端解决方案。请注意,由于它使用宏,因此这种方法需要适当的安全设置。

    在工作表的 VBA 模块中,添加以下代码:

    Option Explicit
    
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hWnd As Long, _
        ByVal Operation As String, _
        ByVal Filename As String, _
        Optional ByVal Parameters As String, _
        Optional ByVal Directory As String, _
        Optional ByVal WindowStyle As Long = vbMinimizedFocus _
    ) As Long
    
    Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
        ShellExecute 0, "Open", Target.Address
    End Sub
    

    这是基于twoother SO 的回答。

    【讨论】:

      【解决方案4】:

      不确定这是否真的是一个答案,但我的应用程序遇到了同样的问题。

      整个应用程序,包括主页,都受到保护(我正在使用 Devise)。 因此,每当用户想要访问http://myapp 时,它会将他重定向到http://myapp/users/sign_in

      我认为 Devise 使用 301 或 302 重定向到登录屏幕。

      我的发现是在 Office 中单击并在 IE 中打开的链接无法适应此重定向(当 Chrome 是默认浏览器时没有问题)。是否符合您的设置?

      最终,我没有找到其他解决方案,只能直接链接到登录页面...也许还有其他选项,但我仍在寻找它们。

      编辑:发现这篇文章(从 2006 年开始)about a bug in Outlook 完全符合我们的情况。 同样,这不是一个解决方案,但至少是一个解释。

      【讨论】:

      • 确实 Chrome 是我的默认浏览器。此错误在 Firefox 和 Chrome 上都可以重现。我还没有在 IE 上检查它。谢谢你的帮助!请发布您提出的任何解决方案。
      • 提到的错误与我们的情况完全吻合。我无权访问服务器,@Bharath 提出的其他解决方案对我不起作用。所以这个答案不是一个答案,但至少它是一个解释,它应该被标记为有效。感谢 Pierre 的研究。
      • MS QA 并不容易达到。我尽了最大努力并在a related forum post 上发布了这个问题。我希望这个错误能够从 ASP.NET 论坛传播到 Excel 工程。如果您知道更好的联系方式,请随时联系!
      猜你喜欢
      • 1970-01-01
      • 2013-11-12
      • 2021-07-17
      • 2014-02-20
      • 2013-01-13
      • 2021-07-02
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多