我通过基于Web的访问Crystal Report Viewer来下载报告。 (不可否认,我的第一个问题是我完全不熟悉Crystal。)我通常在使用Excel VBA自动化IE导航和HTML表单操作方面取得了成功,但我遇到了这个Crystal Report Viewer的问题。
例如,我可以通过Crystal Report Viewer下载报告,指定我想要报告的五十个州中的哪一个。我正在尝试将其自动化,以便它一次性导出所有50个报告(或者更确切地说,在我,例如,去吃午餐时)。
我已经取消了相关网站的外部HTML。它在开头包含一个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(这是愚蠢的吗?)并将其放在我通常的登录和导航代码之后。我在行
上得到“编译错误:变量未定义”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引用。我不知道使用哪些。 BTW:代码库引用
任何帮助将不胜感激。我意识到我可能没有在这里提供所有必要的信息。如果需要更多,请告诉我。谢谢你的阅读。
答案 0 :(得分:0)
Web查看器是更广泛的Business Objects设置的一部分,还是更基本的东西,它只是简单地使用报告启动查看器?
如果是前者,您已经有了更简单的选项,可以通过基于Web的CMC自动分发,其中可以使用各种分发选项(包括UNC路径)安排报告刷新。
如果是后者,或由于某种原因标准CMC / BO选项不合适,您可以考虑使用为此目的而制作的代码库。 Python的splinter库就是这样,我首选的Web自动化包:http://splinter.cobrateam.info/
如果VBA是你的编码舒适区,有几种方法可以将python整合到VBA中,所有这些只是谷歌的一部分...我不会在这里详细介绍它们,因为这是对此的副作用,并且我的答案不仅仅是一个直接的答案。