Vba Excel,html自动化,将文件名发送到input = file

问题描述 投票:0回答:1

我正在使用Excel VBA自动化网页。在这个页面上我必须上传一个文件,为此我必须单击Browse按钮,然后从窗口中选择文件“选择要上传的文件”。此问题以及此时VBA代码在等待选择文件时崩溃。

图片:

enter image description here

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <Meta Name="Pragma" Content="no-cache">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <link rel="stylesheet" href="/MYPAGE/js-css/calendario/calendario.css" type="text/css">
      </link>
      <link rel="stylesheet" href="/MYPAGE/js-css/Style.css" type="text/css" title="classico"/>
      <link rel="stylesheet" href='/MYPAGE/css/dhtmlxmenu.css'          type="text/css" title="classico"/>
      <link rel="stylesheet" href='/MYPAGE/css/context.css'             type="text/css" title="classico"/>
      <style>
         a {
         font-family: arial, verdana;
         font-size: 8pt;
         }
         #loading{
         position:absolute;
         left:300px;
         top:180px;
         z-index:1;
         font:40px Arial, Helvetica, sans-serif;
         color:#ffffff;
         padding:20px;
         background-color:#000000;
         border:1px solid black;
         /* for IE */
         filter:alpha(opacity=60);
         /* CSS3 standard */
         opacity:0.6;
         visibility: hidden;
         }
      </style>
      <link rel="stylesheet" type="text/css" href='/MYPAGE/js-css/dhtmlxGrid/codebase/dhtmlxgrid.css' />
      <script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/dhtmlxcommon.js"></script>		
      <script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/dhtmlxgrid.js"></script>		
      <script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/dhtmlxgridcell.js"></script>
      <script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/ext/dhtmlxgrid_drag.js"></script>
      <script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/ext/dhtmlxgrid_nxml.js"></script>
      <script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/ext/dhtmlxgrid_selection.js"></script>
      <script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/ext/dhtmlxgrid_deprecated.js"></script>
      <script language="JavaScript" src='/MYPAGE/js-css/dhtmlxTreeGrid/codebase/dhtmlxtreegrid.js' ></script>
      <script language="JavaScript" src="/MYPAGE/js-css/dhtmlGridCellSelfin.js"></script>
      <script language="JavaScript" src="/MYPAGE/js-css/hashTable.js"></script> 
      <script language="JavaScript" src="/MYPAGE/js-css/calcola_totali.js"></script> 
      <script language="JavaScript" src="/MYPAGE/js-css/report.js"></script>	
      <script language="JavaScript" src="/MYPAGE/js-css/calendario/CalendarPopup.js"></script>
      <script language="JavaScript" src="/MYPAGE/js-css/calendario/calendarFunction.js"></script>	
      <script language="JavaScript" src="/MYPAGE/js-css/standardFunction.js"></script>
      <script language="Javascript" type="text/javascript">
         var newwindow = '';
         var mygrid;
         var testata         = "Nome File,Data,Caricatore,Operazione,MSISDN OK,MSISDN Scartate,MSISDN Doppie,Scarica Originale,Scarica Scarti,Scarica Doppi";
         //var footer          = "";
         var ampiezzaColonne = "280,90,100,100,70,70,70,80,80,80";
         var allineamento    = "left,center,left,center,center,center,center,center,center,center";
         var tipoColonne     = "ro,ro,ro,ro,ro,ro,ro,ro,ro,ro";
         var actionUrl       = "/MYPAGE/ElencoFile.do";
         var celleAbilitateDettaglio = "" ;
         var celleAbilitateArray = celleAbilitateDettaglio.split(",");
         
         var celleAbilitateTotali = "" ;
         var celleTotaliArray     = celleAbilitateTotali.split(",");
         var coloreCelleDetail    = "";
         
         
         function doOnLoad(){
         
         //loadError();
         	mygrid = new dhtmlXGridObject('gridbox');
         	buildTreeGrid();			
         }
         function buildTreeGrid(){
         	
         	mygrid.imgURL = '/MYPAGE/immagini/dhtmlxGrid/';
         	mygrid.setHeader(testata);
         	//mygrid.attachFooter(footer);		
         	mygrid.setInitWidths(ampiezzaColonne);
         	mygrid.setColTypes(tipoColonne);
         	mygrid.setColAlign(allineamento);
         	mygrid.setOnLoadingStart(StartLoading);
         	mygrid.setOnLoadingEnd(StopLoading);		
         	mygrid.enableAutoHeigth(true,"350");
         	//mygrid.enableAutoHeigth(false,"150","10");		
         	mygrid.setOnRowDblClickedHandler(dettaglio);		
         	mygrid.enableEditEvents(false, false, false);	
         	mygrid.setOnKeyPressed(selezionaCelle);   
         	mygrid.setColumnColor(coloreCelleDetail); 
         	//PER LA FORMATTAZIONE USARE TYPE EDNRO UTILIZZIAMO le colonne per le quali calcolare i totali
         	mygrid.i18n.decimal_separator=",";
         	mygrid.i18n.group_separator=".";
         	for (var j = 0 ; j < celleTotaliArray.length; j++){
         		var tot = celleTotaliArray[j];
         		var ind = tot.substring(3);
         		mygrid.setNumberFormat("0,000",ind);	
         	}						
         	
         	mygrid.init();
         	mygrid.enableBlockSelection();
         	mygrid.loadXML(actionUrl);
         	//mygrid.loadXML('/MYPAGE/pages/Test.xml');
         }	
         
         function scaricaOriginale(valore){
         	document.ReportForm.action = "/MYPAGE/ScaricaCsv.do";
         	document.ReportForm.id.value = valore;
         	document.ReportForm.submit();
         }
         function scaricaScarti(valore){
         	document.ReportForm.action = "/MYPAGE/ScaricaScartati.do";
         	document.ReportForm.id.value = valore;
         	document.ReportForm.submit();
         }
         function scaricaDoppi(valore){
         	document.ReportForm.action = "/MYPAGE/ScaricaDoppi.do";
         	document.ReportForm.id.value = valore;
         	document.ReportForm.submit();
         }
         
         function scaricaListaVip(){
         	document.ReportForm.action = "/MYPAGE/ScaricaCvsDati.do";
         	document.ReportForm.submit();
         }
         
         function submitControl(){
         	var operation = document.forms[0].tipoOperazione.value;
         	var file = document.getElementById('uploadFile').value;
         	if (operation == 'null' || file == '')
         		alert('- Bisogna selezionare il tipo di operazione da eseguire \n- Bisogna specificare un file da caricare');
         	else{
         		document.getElementById("loading").style.visibility = "visible";
         		document.forms[0].submit();
         	}	
         }
         
         	function selezionaCelle(code,ctrl,shift) {
         	  if(code==67&&ctrl){
         	   mygrid.setCSVDelimiter("\t");
         	   mygrid.copyBlockToClipboard();
         	   return true;
         	  }
         }
         
          function submitPrint(TipoStampa){
         		
         		apriNuovaFinestra('/MYPAGE/pages/common/lanciaAction.jsp', 600 , 300);	
         
         		}
         	
         		
         //richiamato al momento dell'export consente l'apertura della finestra contenente la clessidra
         
      </script>
   </head>
   <body onload="doOnLoad();">
      <form name="FileUpload" method="post" action="/MYPAGE/LoadListe.do" enctype="multipart/form-data">
         <div id="Text_Body">
            &gt;&gt; Report Caricamento Liste
            <div id="loading">
               <img src="/MYPAGE/immagini/indicator.gif">
               Loading...
            </div>
            <div id="body_content">
               <div id ="Table">
                  <div id="tr">
                     <select name="tipoOperazione" class="tipoCalendario" style="width : 300pxpx;">
                        <option value="null">Selezionare un valore per l'operazione</option>
                        <option value="add">Inserimento</option>
                        <option value="del">Cancellazione</option>
                     </select>
                     &#32;&#32; File: &#32;
                     <input type="file" name="theFile" value="" style="width : 500pxpx;" id="uploadFile">
                  </div>
                  <br><br>
                  <div style="text-align: center; padding-top: 7px; padding-bottom: 7px;">
                     <img src='/MYPAGE/immagini/carica_off.gif'
                        onclick="javascript:submitControl();"
                        onmouseover="this.src='/MYPAGE/immagini/carica_on.gif'"
                        onmouseout="this.src='/MYPAGE/immagini/carica_off.gif'"
                        />
                     <img  src='/MYPAGE/immagini/scaricaCVS_off.gif'
                        onclick="javascript:scaricaListaVip();"
                        onmouseover="this.src='/MYPAGE/immagini/scaricaCVS_on.gif'"
                        onmouseout="this.src='/MYPAGE/immagini/scaricaCVS_off.gif'"
                        />
                  </div>
               </div>
            </div>
            <div id="gridbox" style=" width: 100%; height: 400px;" ></div>
            <div id="msg_gridbox" class="messageGrid" ><IMG src="/MYPAGE/immagini/indicator.gif">Caricamento dati ...</div>
         </div>
      </form>
      <form name="ReportForm" method="post" action="/MYPAGE/ScaricaCsv.do">
         <input type="hidden" name="id" value="">
      </form>
</html>

这是我的VBA代码:

Sub ie_automatic
Set objIE = New InternetExplorerMedium
        objIE.Visible = True

        objIE.Navigate "mylink"
        objIE.FullScreen = False

        Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
        objIE.Document.getElementById("j_user").Value = myuser
        objIE.Document.getElementById("j_password").Value = mypsw
        Application.Wait (Now + TimeValue("0:00:10"))
        objIE.Document.getElementById("idsubmit").Click

        Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop

        For Each objLink In objIE.Document.frames(0).Document.body.getElementsByTagName("a")

            If objLink.href = "mylink1" Then
               objLink.Click
               Exit For
            End If

        Next objLink

        Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop

        Application.Wait (Now + TimeValue("0:00:10"))

    For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("select")(0).getElementsByTagName("option")
        If element.innerText = "Cancellazione" Then
            element.Selected = True
        End If
    Next

    For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("input")

        element.Click
        Exit For

    Next

            For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("img")
        If element.src = "mylink/carica_off.gif" Then
            element.Click
        End If
    Next

    Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop

    Application.Wait (Now + TimeValue("0:00:10"))


    For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("select")(0).getElementsByTagName("option")
        If element.innerText = "Inserimento" Then
            element.Selected = True
        End If
    Next

       For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("input")
        element.Click
    Exit For

    Next


    'click tasto Carica
    For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("img")
        If element.src = "mylink/carica_off.gif" Then
            element.Click
        End If
    Next

    Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop

    Application.Wait (Now + TimeValue("0:00:10"))
    Application.SendKeys "(%{1068})"
    DoEvents
    Application.Wait (Now + TimeValue("0:00:10"))


   End If

fine:
    For Each objLink In objIE.Document.getElementsByTagName("a")

        If objLink.href = "mylink/Logoff.do" Then
           objLink.Click
           Application.Wait (Now + TimeValue("0:00:10"))
           Exit For
        End If

    Next objLink
    objIE.FullScreen = False
    objIE.Quit
    Set objIE = Nothing

    'Application.WindowState = xlNormal
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.DisplayAlerts = True
    'Application.WindowState = xlMinimized
    Call emailimage
    Application.WindowState = xlNormal
    Application.Quit

End Sub

当我到达我创建元素的点并在等待您在对话框中选择文件时单击代码崩溃。

帮助我了解如何将值传递给控件

< input type =  "File " name =  "Thefile " value =  "" style =  "width: 500pxpx; " id =  "uploadfile " > 

如果我理解正确,它与函数Submitcontrol()相关联,而不必打开阻止一切的对话框?无限谢谢

html excel vba file input
1个回答
0
投票

这是我点击“浏览”按钮时显示的选择上传文件窗口:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.