尝试从asp站点检索电子表格,没有任何提示

时间:2012-02-27 15:01:51

标签: asp.net excel excel-vba vba

我有一个公司网站发布大型报告,我将其下拉并分成我需要的内容。我可以打开网页并获取我需要打开的电子表格的链接,但是我得到一个用于打开/保存/取消的IE弹出窗口,当我点击打开电子表格时,我得到第二个弹出窗口(来自Excel的这个表示电子表格的格式与扩展名指定的格式不同。“我不知道如果可能的话,如何让第一个弹出窗口离开;我知道的唯一方法通常是防止弹出up with excel是使用DisplayAlerts = False,但添加它似乎没有任何影响。此自动化项目的开始代码如下:

[编辑]我编辑并替换了原始编码,以反映最近的尝试。我已经设法通过第一个文件下载弹出窗口(虽然使用了sendkeys),我正在努力获得第二个弹出窗口(我想这是将焦点转移到excel的问题)。任何关于替换sendkeys部分的建议都是受欢迎的,以及将焦点恢复到excel的建议,以便我可以使用excel来控制第二个弹出窗口(如果这是最好的方法)。更新后的代码如下:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub Automation()

  Dim IeApp As Object
  Dim IeDoc As Object
  Dim URL, URL2 As String

    Application.DisplayAlerts = False

    URL = "https://companysite.com/directorypage/default.aspx"
    URL2 = "https://companysite.com/directorypage/Reports/MyReport.aspx?Format=Excel"
    Set IeApp = CreateObject("InternetExplorer.Application")

    IeApp.Visible = True
    IeApp.Navigate URL

    While IeApp.Busy Or IeApp.ReadyState <> 4: DoEvents: Wend
    IeApp.Document.All.Item("MainContent_btnAuthenticate").Click
    While IeApp.Busy Or IeApp.ReadyState <> 4: DoEvents: Wend

    Set IeApp = CreateObject("InternetExplorer.Application")
    IeApp.Visible = False
    IeApp.Navigate URL2

    Do Until thewindow <> 0 'wait for the "File Download" popup window to appear
        thewindow = FindWindow(vbNullString, "File Download")
    Loop

    SendKeys "{LEFT}"
    Application.Wait Now + TimeValue("00:00:01")
    SendKeys "{LEFT}"
    Application.Wait Now + TimeValue("00:00:01")
    SendKeys "{ENTER}"

End Sub

3 个答案:

答案 0 :(得分:1)

您无法在代码中禁止显示该消息,这是用户工作站上的设置,以防止恶意文件受到损害。

用户必须编辑其Windows注册表或通过组策略设置对其进行控制。 http://support.microsoft.com/kb/948615

我在服务器上生成的Excel文档遇到了同样的问题。我做的唯一解决方法是使用Open XML SDK创建文件。

编辑:我再次阅读了您的问题并注意到它更专注于第一个弹出窗口,而JMax链接的答案(How to disable file download popup in Internet Explorer?)应该解决这个问题。

答案 1 :(得分:0)

乔恩,我的两分钱。

如果您拥有对PC的管理访问权限,那么JMax建议将对其进行排序。如果您是管理员,除非您知道自己在做什么,否则我不鼓励编辑注册表。

如果是办公室电脑,那么编辑注册表甚至都不是一个选择。您必须联系IT部门。他们可以作为管理员登录您的电脑,然后关闭该选项,或者他们可以调整GP作为zeroef建议。我最好的猜测是,如果它是办公室电脑,那么他们将以管理员身份登录并单独为您进行更改,而不是在GP中进行更改(除非您是该组的唯一成员)。在企业环境中,很难通过GP实现这一目标,因为它会影响很多用户。如果您的请求是Office PC,则可能无法就您的请求达成一致。

顺便说一句,从我看到的,你的问题与Excel问题无关:)

HTH

西特

答案 2 :(得分:0)

你可以直接下载文件......

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
            "URLDownloadToFileA" (ByVal pCaller As Long, _
             ByVal szURL As String, ByVal _
             szFileName As String, ByVal dwReserved As Long, _
             ByVal lpfnCB As Long) As Long

    Sub DownloadFile(sURL, sSaveAs)
    Dim rv As Long
        rv = URLDownloadToFile(0, sURL, sSaveAs, 0, 0)
        If rv <> 0 Then
            MsgBox "Error with download!"
        End If
    End Sub

不知道https是否会成为问题。

要尝试的另一件事是:

Workbooks.Open "https://companysite.com/directorypage/Reports/MyReport.aspx?Format=Excel"