Что нового

Вставка данных через табуляцию

m4e

Новичок
Сообщения
21
Репутация
0
Версия AutoIt: 3.
3.3.10.2

Описание:
По работе приходится пользоваться программой, которая не умеет импортировать данные из файла. Есть данные, есть две колонки. Приходится каждый раз забивать руками, есть вероятность ошибиться.
Каждое значение беру из экселя, забиваю руками, нажимаю TAB, перекидывает к следующей строчке (например 1010 -> 270), снова нажимаю TAB - появляется новая строчка.
Обычно нужно забить 15-20 строчек. Данные у меня обычно в экселе и в любом другом текстовом виде. Помогите автоматизировать процесс, господа. Регулярно трачу по 20 минут впустую. Спасибо!


Примечания:
Во вложении скриншот, охотно отвечу на любые вопросы. Спасибо!


Добавлено:
Сообщение автоматически объединено:

zzn7.png
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Т.к. не знаю из какого файла берутся данные... А так же не знаю в какое окно вбивать надо:

Код:
Sleep(1000)
;~ Дается 10 секунд, чтобы активировать окно - в каком нужно забить данные*

Send('1010{TAB}270{TAB}')
Send('1042{TAB}280{TAB}')
Send('1074{TAB}290{TAB}')
...


после запуска скрипта у тебя 10 сек. чтобы сделать окно, в которое будет вбиваться данные
 
Автор
M

m4e

Новичок
Сообщения
21
Репутация
0
Если бы данные были одинаковые, никаких проблем не было бы. Но значения всегда разные. Я думал реализовать какое-то "скармливание" переменных автоиту, а потом их вставку по типу Send('X1{TAB}Y1{TAB}'), но у меня с циклами беда ((
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
Global $aInfo[4][2] = [ [ 3 ], _
	[ 1010, 270 ], _
	[ 1042, 280 ], _
	[ 1074, 290 ], _
	[ 1107, 300 ] ]

WinActivate( "Заголовок окна" )
For $Idx = 1 To $aInfo[0][0] Step 1
	Send( $aInfo[$Idx][0] & "{TAB}" & $aInfo[$Idx][1] & "{TAB}" )
Next
 
Автор
M

m4e

Новичок
Сообщения
21
Репутация
0
Не совсем понятно начало (видимо массив?), но копировать данные с запятыми в скрипт не быстрее, чем забивать руками в таблицу. Тут уж не автоматизация получается :smile:
Может научить автоит брать данные из экселя для начала?
9764.png


Код:
WinActivate( "Microsoft Excel - Данные" )
;~ Первая сточка всегда 0
 Send("^f")
 sleep (500)
 Send("0")
 sleep (500)
 Send ("{ENTER}")
 sleep (500)
 Send ("{ESC}")
;~ Нашли ноль в перовой строчке.


Дальше я застрял ))
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
m4e
Код:
Global $aInfo = StringSplit( StringStripCR( ClipGet() ), @LF )

WinActivate( "Заголовок окна" )
For $Idx = 1 To $aInfo[0] Step 1
    Send( $aInfo[$Idx] & "{TAB}" )
Next


Выделяете область в Excel, копируете в буфер (Ctrl+C), запускаете скрипт.


Добавлено:
Сообщение автоматически объединено:

Хотя было бы проще удобнее написать макрос в VBA:

Код:
Private Declare Function SetActiveWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Sub macros()
    Dim hWnd As Long, i As Byte, j As Byte, sStr As String
    
    hWnd = FindWindow(vbNullString, "Заголовок")
    If hWnd = 0 Then
        MsgBox ("Окно не найдено")
        Exit Sub
    End If
    SetActiveWindow (hWnd)
    
    Set d = Range("A1").CurrentRegion
    For i = 1 To d.Rows.Count Step 1
        sStr = ""
        For j = 1 To d.Columns.Count Step 1
            sStr = sStr & d.Cells(i, j).Value & "{TAB}"
        Next j
        
        SendKeys sStr
    Next i
End Sub
 
Автор
M

m4e

Новичок
Сообщения
21
Репутация
0
Низкий поклон! Вот что значит инженерное мышление! Благодарю!!!

А не могли бы вы мне расписать чуток первую строчку на автоите? А то работать-работает, а как - загадка для дурака...
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
m4e
Код:
Global $aInfo = StringSplit( StringStripCR( ClipGet() ), @LF )

ClipGet() ;Получаем текст из буфера обмена
StringStripCR() ;Удаляем в полученном тексте все @CR
StringSplit() ;Делим строку на подстроки в массив делителем @LF

$aInfo ;Будет содержать массив строк


Вы можете прочитать подробнее если нажмете на каждую из этих функций.
 
Верх