我通过对 Crystal Report Viewer 的基于 Web 的访问来下载报告。 (诚然,我的第一个问题是我对 Crystal 一点也不精通。)我通常在使用 Excel VBA 自动化 IE 导航和 HTML 表单操作方面取得了成功,但我遇到了这个 Crystal Report Viewer 的难题。
例如,我可以通过 Crystal Report Viewer 下载报告,方法是指定我想要报告的 50 个州中的哪一个。我正在尝试使其自动化,以便它一次导出所有 50 份报告(或者,更确切地说,在我去吃午饭时连续导出)。
我已经提取了相关网站的 outerHTML。它在开头包含一个 OBJECT 标记,其中包含 23 个 PARAM NAME 标记,后跟以下 VBScript:
Sub window_onLoad()
Page_Initialize()
End Sub
Sub Page_Initialize
On Error Resume Next
Dim webBroker
Set webBroker = CreateObject("WebReportBroker.WebReportBroker")
If err.number <> 0 then
window.alert "The Crystal ActiveX Viewer is unable to create resource objects."
CRViewer.ReportName = "[a URL...redacted]"
Else
Dim webSource0
Set webSource0 = CreateObject("WebReportSource.WebReportSource")
webSource0.ReportSource = webBroker
webSource0.URL = "[a URL...redacted]"
webSource0.PromptOnRefresh = True
webSource0.AddParameter "password", "[somepassword]"
webSource0.AddParameter "user", "[someuser]"
CRViewer.ReportSource = webSource0
End if
CRViewer.ViewReport
End Sub
该脚本之后是另外三个 OBJECT 标记,每个标记都引用代码库。我导航到这些引用以查找 DLL,我假设这些引用指示我需要在我的 VBA 中调用的引用。凭直觉,我将 VBScript 移到 Excel VBA 中(这很愚蠢吗?),并将其放在我通常的登录和导航代码之后。我在行上收到“编译错误: undefined variable ”
window.alert "The Crystal ActiveX Viewer..." 'highlighting the word "window"
CRViewer.ReportName = "[a URL...redacted]" 'highlighting "CRViewer"
CRViewer.ReportSource = webSource0 'highlighting "CRViewer"
CRViewer.ViewReport 'highlighting "CRViewer"
这是我遇到问题的地方。首先,我可能走错了路,或者根本不可能;但我不知道。其次,如果我走在正确的轨道上,Excel VBA 的可用引用中列出了很多 Crystal 引用。我不知道要使用哪些。顺便说一句:代码库引用
任何帮助,将不胜感激。我意识到我可能没有在这里提供所有必要的信息。如果需要更多,请告诉我。谢谢阅读。
最佳答案
Web 查看器是更广泛的 Business Objects 设置的一部分,还是简单地启动带有报告的查看器的更基本的东西?
如果是前者,您已经有了通过基于 Web 的 CMC 自动分发的更简单的选项,其中可以使用各种分发选项安排报告刷新,包括到 UNC 路径。
如果是后者,或者由于某种原因标准 CMC/BO 选项不合适,您可以考虑使用为此目的制作的代码库。 Python 的 splinter 库就是其中之一,也是我首选的 Web 自动化包:http://splinter.cobrateam.info/
如果 VBA 是您的编码舒适区,那么有几种方法可以将 python 集成到 VBA 中,所有这些都只是谷歌而已......我不会在这里详细介绍它们,因为这是一个副业,我的回答更像是一个替代方案而不是一个直接的答案。
关于excel - 我可以通过 Excel VBA 访问和查询基于 Web 的 Crystal Report Viewer 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22276987/