如何使用 Excel.UriLink.16 更改 Excel URL 的文件关联?

not*_*bit 6 excel powershell cmd

我正在尝试更改文件关联,以便在另一个浏览器中打开 Excel 单元格中的 URL。根据 (CMD)ftype命令的使用Excel.UriLink.16,我应该能够使用以下命令从 powershell (通过 cmd)执行此操作:

\n
# To change it:\ncmd /c \'ftype Excel.UriLink.16=C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe "--single-argument" "%1"\'\n\n# The original is: \n# cmd /c ftype | findstr /i "excel.uri"\n# Excel.UriLink.16=C:\\Program Files\\Microsoft Office\\Root\\Office16\\protocolhandler.exe "%1"\n
Run Code Online (Sandbox Code Playgroud)\n

这似乎根本没有效果,并且总是会在默认浏览器中打开该 URL。

\n

什么控制着 Excel 打开 URL 以及如何更改它?

\n
\n

更新: 2022-07-30

\n

遵循此处的另一个 SO ,声明要检查:

\n

HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\*\\UserChoice

\n

和:

\n
(Get-ItemProperty HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\*\\UserChoice -Name ProgId).ProgID | Where-Object -FilterScript{ $_ -like "*HTM*"}\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
FirefoxHTML-308046B0AF4A39CB\nFirefoxHTML-308046B0AF4A39CB\nMSEdgeHTM\nMSEdgeHTM\nMSEdgeHTM\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是没有帮助。

\n
\n

我开始更好地理解它是如何工作的,看起来它深深地隐藏在操作系统中。这个看似未记录的程序protocolhandler.exe负责处理所有 URI 的打开方式。

\n

此外,assoc显示.URL=InternetShortcut, 链接到:
\n InternetShortcut="C:\\WINDOWS\\system32\\rundll32.exe" "C:\\WINDOWS\\system32\\ieframe.dll",OpenURL %l

\n

检查其他人,我们发现:

\n
# (cmd /c ftype |Select-String protocol |Select-String excel ) -replace ("=","=`t")\n\nExcel.UriLink.16=  C:\\Program Files\\Microsoft Office\\Root\\Office16\\protocolhandler.exe "%1"\nms-excel=          C:\\Program Files\\Microsoft Office\\Root\\Office16\\protocolhandler.exe "%1"\n
Run Code Online (Sandbox Code Playgroud)\n

URI如 MS 文档、uri-schemes和 Excel\n 信息所示Hyperlinks,该程序需要能够处理任何事情...

\n
\n

更新: 2022-07-31

\n

assoc显然,和的可见用法ftype只是确定(FTA )的烟雾弹。根据这个SU的回答、MS assoc XML和安全研究人员博客,自Win8以来,Win10+中文件的关联方式已经完全改变,阻止用户通过散列关联来控制它,以确保用户无法轻易更改它们。File Type Associations

\n

要查询文件关联 XML,可以使用:

\n
# Run as Admin\nDism.exe /online /export-defaultappassociations:.\\myCurrentFileAssoc.xml\n\n...\n<Association Identifier=".url" ProgId="IE.AssocFile.URL" />\n...\n\n# If there are any errors, you can find a LOG file in:\nC:\\WINDOWS\\Logs\\DISM\\dism.log\n
Run Code Online (Sandbox Code Playgroud)\n

用于查询和更改这些的非官方工具*有:
\n *非官方,因为 MS 不希望您模拟文件关联。)

\n\n
\n

重要提示
\n必须在用户SetUserFTA上下文中运行,而不是使用管理或系统权限。有时,计时可能很重要,请确保它在加载用户配置文件后运行。

\n
\n

运行它:

\n
# SetUserFTA.exe get | Select-String url\n\n.url, IE.AssocFile.URL\nhttp, FirefoxURL-308046B0AF4A39CB\nhttps, FirefoxURL-308046B0AF4A39CB\n\n# To see all installed browsers\n# SetDefaultBrowser.exe\n\n...\nHKLM Brave\n  name: Brave\n  path: "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe"\n...\n
Run Code Online (Sandbox Code Playgroud)\n

您还可以按照此处的说明关联便携式浏览器。

\n

\xe2\x9b\x94 处理 Excel 关联仍然没有进展...

\n

not*_*bit 2

这不是答案,但在类似情况下可能会有所帮助。

使用VBA

我设法使用不同(非默认)浏览器有条件地从 Excel 单元格打开 URL 的唯一方法是使用 VBA 代码片段并将其添加到Microsoft Excel Objects. 这有几个缺点,但也有一个惊喜。

Drawbacks:

  • 强制您在 Excel 中启用 VBA
  • 强制您将 Excel 文件类型从 更改*.xlsx*.xlsm

Surprise:

Long-Click单元格上的 可以用来分隔用于打开超链接URL 的浏览器。这与单击超链接与单元格的空白部分相结合。换句话说,按(匹配的)超链接将打开默认浏览器,而按将在(编码的)浏览器中打开 URL。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    On Error Resume Next
    Dim Link As String
    Dim bravePath As String
    
    Link = Target.Value
    
    bravePath = """C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe"""

    SubString = "bing"
    
    If InStr(Link, SubString) <> 0 Then
        'if str contains 'bing'
        'Call OpenBrave
        'Application.Run "Module1.OpenBrave", Link
         Shell (bravePath & " -tab " & Link)
         
    'ElseIf InStr(Link, SubString) = 0 Then
        'if str does not contain it
        'Call OpenDefault
        'MsgBox "That is a normal URL", , "No Party Like This"
        'ActiveWorkbook.FollowHyperlink Address:=Link, NewWindow:=True, AddHistory:=True
        
    End If

End Sub

Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我注释掉了ActiveWorkbook.FollowHyperlink(默认行为),因为不需要它,并且可以用其他浏览器替换。

这就是它的样子。

在此输入图像描述

再次添加 VBA 代码:

  • 将 Excel 工作表另存为*.xlsm类型
  • 在设置中启用 VBA 和宏
  • Left-click在工作表选项卡上并选择View Code
  • 粘贴上面的代码。

完毕!