我正在尝试从.NET Web系统运行名为Sheet1.Workbook_Open
的Excel宏。
以下是我目前的代码。
xlApp = New Excel.Application
xlWorkBook = xlApp.Workbooks.Open("C:\Testing\TempFile.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:\Testing\File" & 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
为什么会发生这种情况,我该如何解决?当项目托管在我的本地计算机上时,只有当它在服务器上时才会发生此错误。
答案 0 :(得分:2)
我担心这不是你想听到的答案,但正确答案是...... 你没有。
Microsoft explicitly states无人值守代码不支持 Office自动化,其中包括网络应用程序:
Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office可能会出现不稳定Office在此环境中运行时的行为和/或死锁。
如果您需要与Excel文件进行交互,那么正确的解决方案是use a .NET library that supports the Excel file format。不幸的是,这意味着您将无法使用现有的旧版Excel VBA代码。
答案 1 :(得分:0)
定义新的公共程序(添加新模块):
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/
我希望它有所帮助。