我正在尝试从.NET Web系统运行一个名为Sheet1.Workbook_Open
的Excel宏。
下面是我当前的代码。
xlApp = New Excel.Application
xlWorkBook = xlApp.Workbooks.Open("C:TestingTempFile.xlsm")
xlWorkSheet = xlWorkBook.Worksheets("TestSpreadsheet")
Dim MacroName As String = "Sheet1.Workbook_Open"
xlApp.Run(MacroName)
Dim FileDate As String = SysdateTextBox.Text
FileDate = FileDate.Replace(" ", "")
FileDate = FileDate.Replace("/", "")
FileDate = FileDate.Replace(":", "")
FileName = "C:TestingFile" & FileDate & ".xlsm"
xlWorkBook.SaveAs(FileName)
xlWorkBook.Close(True)
xlApp.Quit()
但是,它在线路xlApp.Run(MacroName)
上失败并出现错误;
Exception from HRESULT: 0x800A01A8
System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A01A8
为什么会发生这种情况,我该如何解决?当项目托管在我的本地计算机上时,不会发生此错误 - 仅当它位于服务器上时。
怕这不是你想听到的答案,但正确答案是......你没有。
Microsoft明确指出,无人参与代码(包括 Web 应用程序(不支持 Office 自动化:
Microsoft 目前不建议也不支持从任何无人参与、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务(自动化Microsoft Office 应用程序,因为在此环境中运行 Office 时 Office 可能会表现出不稳定的行为和/或死锁。
如果需要与 Excel 文件交互,正确的解决方案是使用支持 Excel 文件格式的 .NET 库。不幸的是,这意味着您将无法使用现有的旧版 Excel VBA 代码。
定义新的公共过程(添加新模块(:
Public Sub MyMacro()
'do something
End Sub
然后这样称呼它:
Dim sMacroName As String = "TempFile.xlsm!MyMacro"
xlApp.Run(sMacroName)
更多内容:
http://forums.asp.net/t/1366665.aspx?How+to+run+a+Macro+of+an+Excel+file+opened+on+web+server
http://www.nullskull.com/articles/create_macro_at_runtime_in_dotnet.asp
http://support.microsoft.com/kb/306682
http://www.siddharthrout.com/2012/03/20/calling-excel-macros-programmatically-in-vb-net/
我希望它有所帮助。