網頁連結直接開啟 Word/Excel 檔
1 | 9,344 |
SharePoint 有項蠻酷功能,文件庫有個「在 Word/Excel 中編輯」連結,點下去可直接啟動 Word 或 Excel 開啟檔案:
反觀一般在網頁放 .docx、.xlsx 檔案 <a> 連結,都得儲存成本機檔案再開啟,流暢度輸了一截,讓我很不甘心,於是便研究了原理,發現我們也能辦到:
祕訣是將 href 網址改成「ms-word:ofv|u|可下載docx的網址」,例如:
- ms-word:ofv|u|http://localhost/aspnet/officefiles/%E6%96%87%E4%BB%B6.docx
- ms-excel:ofv|u|http://localhost/aspnet/officefiles/%E5%B7%A5%E4%BD%9C%E8%A1%A8.xlsx
這種格式的專業術語叫 Office URI Schemes,規則為:
< scheme-name >:< command-name >"|"< command-argument-descriptor > "|"< command-argument >
- scheme-name 指定要啟動的軟體,Excel 為 ms-excel,Word 為 ms-word。
- command-name 決定動作,ofv 為唯讀開啟或檢視模式,ofe 則為編輯模式。
- command-argument-descriptor 固定傳 "u"
- command-argument 下載檔案內容的 URL。
所以,只需在下載 docx/xlsx 的 URL 前面加上 ms-word:ofv|u| 或 ms-excel:ofv|u| 並換成絕對網址即可,完整範例如下:
<%@Page Language="C#"%>
<script runat="server">
string GetAbsUrl(string fileName)
{
return new Uri(Request.Url, fileName).AbsoluteUri;
}
</script>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<ul>
<li><a href="ms-word:ofv|u|<%=GetAbsUrl("文件.docx")%>">文件.docx</a></li>
<li><a href="ms-excel:ofv|u|<%=GetAbsUrl("工作表.xlsx")%>">工作表.xlsx</a></li>
</ul>
</body>
</html>
最後補充一個眉角,如果 Office 檔案是靠 ASP.NET MVC 加上參數傳回,例如 /ControllerName/Download?f=fileName.docx,實測 URL 檔名結尾若不是 .docx、.xlsx 等副檔名,Word/Excel 開啟會出錯,故需使用 MVC 路由功能讓下載網址改為 .xlsx/.docx 結尾,但要注意檔名結尾 URL 導致 MVC 路由失效問題,web.config 要稍做調整。
Tips of how to sue Office URI scheme to launch Word/Excel to open Office file from links in web pages.
Comments
# by Lik
試驗了在MVC下,在不設定權限下 /ControllerName/actionName/fileid.docx 可以順利打開。 但是加了 [Authorize]ActionName 下,就無法用word打開。有碰到過類似的問題嗎?