【问题标题】:Assign contents of Excel cell to string variable in AutoIT [closed]将 Excel 单元格的内容分配给 AutoIT 中的字符串变量 [关闭]
【发布时间】:2015-01-08 15:52:40
【问题描述】:

我正在编写一个脚本,我想从包含用户名和密码的 Excel 电子表格中提取单元格值。我希望使用两个变量 USERNAME 和 PASSWORD。我想使用每一行的数据,并在每次循环时向下移动一行。

我查看了 AutoIT 中包含的 Excel UDF 和第三方编写的 ExcelCOM_UDF。我似乎无法找到我正在寻找的答案。这应该是其中任何一个的非常基本的功能,但是我遇到了麻烦。

我不是在寻找讲义,所以只要一个不错的参考页面就可以了。但是如果你有我需要的东西,它不会伤害我的感受,因为我并没有决心独自编写这段代码。

我的“A”列将包含 USERNAME 变量,而“B”列将包含我的 PASSWORD 变量。

添加了我目前所拥有的一些代码的 sn-p。我还没有尝试从 Excel 中提取任何内容,因为我找不到似乎可以执行我想要执行的操作的命令。希望看到代码可以更好地了解我的目标。

我不希望以编程方式修改电子表格,仅设置单元格文本中的字符串变量。

...
    $USERNAME = "usernameHere"  ;I want to set this variable as the text from A1 of c:\test.xls
    $PASSWORD =  "passwordHere" ;I want to set this variable as the text from B1 of c:\test.xls

         ;Username Box
        MouseClick("left",1179,488,1)

        ;Type username
        Send($USERNAME)

        ;Password Box
        MouseClick("left",1179,578,1)

        ;Type Password
        Send($PASSWORD)
...

【问题讨论】:

    标签: excel autoit


    【解决方案1】:

    为了阅读包含用户名和密码列表的电子表格。此函数创建一个二维数组。第一列包含用户名,第二列包含密码。有了这个

    #include <Array.au3>
    #include <Excel.au3>
    
    Func get_data_Excel($filePathExcel)
    
       Local $error
       Local $oExcel = _ExcelBookOpen($filePathExcel, 0)
       $oExcel.Application.DisplayAlerts = False
       $oExcel.Application.ScreenUpdating = False
       $error = Int(@error)
       Select
          Case $error = 1
             msgbox(16, "Erreur : Fermeture de l'application", "Code erreur _ExcelBookOpen : 1"&@CRLF&@CRLF&"Impossible de creer l'objet $oExcel avec _ExcelBookOpen")
          Case $error = 2
             msgbox(16, "Erreur : Fermeture de l'application", "Code erreur _ExcelBookOpen : 2"&@CRLF&@CRLF&"Impossible d'ouvrir le fichier "&$filePathExcel&" avec _ExcelBookOpen")
       EndSelect
       If $error > 0 Then
          _ExcelBookClose($oExcel, 0) ; Close without save
          Exit
       EndIf       
    
       ; Read column A (login) and column B (pwd)
       _ExcelSheetActivate($oExcel, "sheet1")
       $nb_columns = $oExcel.ActiveSheet.UsedRange.Columns.Count   
       $nb_rows = $oExcel.ActiveSheet.UsedRange.Rows.Count
       Local $array_data_excel[$nb_rows][2]
       Local $idx
       For $idx = 0 To $nb_rows-1
          $array_data_excel[$idx][0] = $oExcel.Activesheet.Cells($idx+1, 1).Value
          $array_data_excel[$idx][1] = $oExcel.Activesheet.Cells($idx+1, 2).Value
       Next   
    
       _ExcelBookClose($oExcel, 0)
       _ArrayDisplay($array_data_excel, "Data from excel file")         
    EndFunc
    

    并使用此功能:

    get_data_Excel("d:\users.xlsx")
    

    【讨论】:

      【解决方案2】:

      如果您想通过 COM/Automation Excel 获得所有控制权,请不要使用 UDF ,而是使用 AutoIt ObjCreate 函数深入 Com/Automation 内部。使用此功能,您可以在 AutoIt 中控制 Excel 对象


      COM/Excel 自动化

      1) 在目标应用程序的 COM 对象上创建引用(这里是 Excel)

      $oExcel = ObjCreate("Excel.Application")
      

      2) 在这个实例上添加一些选项

      With $oExcel
          .Visible = 1
          .WorkBooks.Add
      EndWith
      

      3) 现在可以开始工作了(添加一些工作表或数据,保存工作簿...)

      With $oExcel
          .ActiveWorkbook.Worksheets(1).Name = "SHEET_ONE"
          .ActiveWorkbook.Worksheets(1).Cells(1,1) = "I believe i can fly !!!"
      EndWith
      

      技巧一:另存为

      ; Create new file with one sheet named "SHEET_ONE"
      Local $oExcel = ObjCreate("Excel.Application")
      With $oExcel
          .SheetsInNewWorkbook = 1
          .Visible = 1
          .WorkBooks.Add
          .ActiveWorkbook.Worksheets(1).Name = "SHEET_ONE"
          .ActiveWorkbook.Worksheets(1).Cells(1,1) = "I believe i can fly !!!"
      EndWith
      
      Local $filename = @WorkingDir&"\saveas_excel.xls" 
      $oExcel.Application.DisplayAlerts = 0
      $oExcel.Application.ScreenUpdating = 0
      $oExcel.ActiveWorkBook.SaveAs($filename, 1, Default, Default, Default, Default, 2, 1)
      $oExcel.Quit
      

      更多信息(法语)http://www.autoitscript.fr/forum/viewtopic.php?t=3272&f=11

      【讨论】:

      • 我仍然认为你回答了这个问题。我不想更改电子表格/工作簿上的任何数据。我正在编写一个应用程序,它将使用包含用户名和密码列表的电子表格来登录门户,然后完成其他一些所需的功能。它将仅将电子表格用作源登录到基于 Web 的门户,然后执行我想要的愿望或执行我的自定义宏。
      • 我认为要完美地表达它或让它变得高效和简单,我需要将电子表格上指定单元格的内容复制到剪贴板。这就对了。将单元格复制到剪贴板。我更愿意在我的脚本中将其设置为字符串变量,但将其放在剪贴板上也可以。
      • 不要发布两个答案。将所有答案放在一个答案中,然后为每个答案加上一个标题,这样用户就可以轻松浏览它们并找到最适合自己的答案。
      【解决方案3】:
      #include <Excel.au3>
      
      Local $MyUsernameArray[5] = [ "Hans", "Gerd", "Walter", "Klaus", "Peter" ] ;Your Username Array
      Local $MyPasswordArray[5] = [ "12345", "I", "am", "so", "creative" ] ;Your Password Array
      
       $oExcel =  _ExcelBookNew(1) ;Set this to 0 if you want it to work in background
      _ExcelWriteCell ( $oExcel, "Usernames", "A1" ) ;self explaining (i hope)
      _ExcelWriteArray ( $oExcel, 2, 1, $MyUsernameArray ,1) ;^
      _ExcelWriteCell ( $oExcel, "Passwords", "B1" );^
      _ExcelWriteArray ( $oExcel, 2, 2, $MyPasswordArray ,1);^
      
      _ExcelBookSaveAs($oExcel, @ScriptDir & "\PleaseAtleastPostSomeCodeNextTimeSoWeSeeYouTried", "xls") ;save the file
      _ExcelBookClose($oExcel, 1, 0) ;exit and save
      

      【讨论】:

      • 木马,首先感谢您的帮助。其次,我认为你误解了这个问题。我不希望以编程方式将数据添加到电子表格中。我希望有一个电子表格,该电子表格将不断更新(由我自己或其他人手动),我的程序将从中提取数据。我将使用我正在使用的一些代码发布更多详细信息。
      • 这与成为菜鸟无关。这是关于进入这样的支持论坛,让人们为您完成工作。
      猜你喜欢
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多