ASP.NET 呼叫 Microsoft.Office.Interop.Excel (如 new ApplicationClass()) 時拋出 UnauthorizedAccessException (0x80070005),核心原因是 **ASP.NET 執行身分 (IIS 5: ASPNET / IIS 6+: Network Service) 無 DCOM 啟動/存取權限**。
完整解決步驟 (Windows Server 2003 / IIS 6 為例)
- 伺服器安裝 Microsoft Office Excel (不可僅裝 Viewer)。
- 執行
dcomcnfg.exe 開啟「元件服務」。
- 展開:元件服務 → 電腦 → 我的電腦 → DCOM 設定。
- 找到 **「Microsoft Excel 應用程式」**,右鍵「內容」。
- 身分識別 分頁:選擇 **「互動式使用者」**。
- 安全性 分頁 → **啟動與啟用權限** → 「自訂」→「編輯」→ 新增 **NETWORK SERVICE** (本機帳號) → 勾選 **本地啟動**、**本地啟用**。
- 同分頁 → **存取權限** → 「自訂」→「編輯」→ 新增 **NETWORK SERVICE** → 勾選 **本地存取**。
- 若為 Windows XP/2000 (IIS 5),帳號改為 **ASPNET**。
- 確定所有對話框,重啟 IIS (
iisreset) 或回收應用程式池。
原理說明
- 互動式使用者:Excel 於當前登入使用者桌面會話啟動,擁有完整 UI 權限,避免服務帳號無桌面導致掛起。
- Network Service / ASPNET:ASP.NET 處理序身分,需顯式授予 DCOM 啟動/存取權。
重要警示與現代替代方案
| 風險 | 說明 |
| 穩定性差 | Excel 非伺服器端元件,易掛起、記憶體洩漏、彈窗阻塞 |
| 授權問題 | 伺服器安裝 Office 需額外授權 (VL/订阅) |
| 併發極低 | 單進程單執行緒,無法支援高併發 |
強烈建議改用純 .NET 程式庫:
- EPPlus (xlsx, 免費 LGPL/商業)
- ClosedXML (xlsx, MIT)
- NPOI (xls/xlsx, Apache 2.0)
- DocumentFormat.OpenXml (Microsoft 官方, 低階)
無需安裝 Office、無 DCOM 權限地獄、高效能、支援 Linux/Docker 容器化部署。