Что нового

Send($DATA) Плохо работает в Excel

HelpMe

Новичок
Сообщения
85
Репутация
3
Данные в ячейку вводятся только курсор переходит на др. строчку - как это избежать кто знает?

Пример Ячейка с формулой =Сегодня()

Код:
WinActivate("Microsoft Excel - ") ;Переходим В Microsoft Excel
Sleep(180)
Send("^{INSERT}") ;Копируем
Sleep(12)
$dOT = ClipGet()
Sleep(7)
Send($dOT)
Sleep(7)
Send("{UP}") ; Ето тут лишнее но без этого никак.... 
Sleep(7)
Send("{F2}")
Sleep(12)
Send("{home}")
Sleep(12)
Send("{SHIFTDOWN}{RIGHT}{RIGHT}{SHIFTUP}")
Sleep(12)
Send("^{INSERT}") ; Дата (День)
Sleep(12)
$dOT1 = ClipGet()
Sleep(12)
Send("{RIGHT}{SHIFTDOWN}{RIGHT}{RIGHT}{SHIFTUP}")
Sleep(12)
Send("^{INSERT}") ; Дата (Месяц)
Sleep(12)
$dOT2 = ClipGet()
Sleep(12)
Send("{RIGHT}{SHIFTDOWN}{END}{SHIFTUP}")
Sleep(12)
Send("^{INSERT}") ; Дата (Год)
Sleep(12)
$dOT3 = ClipGet()
Sleep(12)
Send("{Tab}")


Пример разделения даты на ДД ММ ГГГГилиГГ :scratch:

Почему при
Send($dOT) курсор переходит на другую ячейку? :suicide:
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Нет этого "Сегодня" нигде.
Нет этого "dOT" нигде.
Извини, нашел - Send($dOT)
Ну, а переменная $dOT чему равна?

Пока - так
$dOT = "тест"
Send($dOT)
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
Yuriy сказал(а):
Нет этого "Сегодня" нигде.
Нет этого "dOT" нигде.
Извини, нашел - Send($dOT)
Ну, а переменная $dOT чему равна?

Пока - так
$dOT = "тест"
Send($dOT)
$dOT = ClipGet()

=Сегодня() - это формула в ячейке
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
$dOT = ClipGet()
Это вроде переменная $dOT берет из буфера обмена значение.

Сегодня() -?????????? переменная, функция ???
Вы смотрели свой предыдущий вопрос про XLS?
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
Код:
WinActivate("Microsoft Excel - ") ;Переходим В Microsoft Excel
Sleep(180)
Send("^{INSERT}") ;Копируем ячейку в которой написана формула =Сегодня()
Sleep(12)
$SEGODNYA = ClipGet() ;Запоминаем то что скопировано выше
Sleep(7)
Send($SEGODNYA) ;Вставляем в эту же ячейку дату... только дата уже будет не в виде формулы а ДД.ММ.ГГГГ Вот тут та и вопрос, почему после того как мы отправляем дату - курсор переходит на другую ячейку?
Sleep(7)
Send("{UP}") ;Возвращаем курсор на место
Sleep(7)
Send("{F2}") ;Входим в ячейку
Sleep(12)
Send("{home}") ; Идем на начало
Sleep(12)
Send("{SHIFTDOWN}{RIGHT}{RIGHT}{SHIFTUP}") ; Выделяем первые два символа
Sleep(12)
Send("^{INSERT}") ; Дата (День) ; копируем их
Sleep(12)
$dOT1 = ClipGet() ; Запоминаем то что скопированно
Sleep(12)
Send("{RIGHT}{SHIFTDOWN}{RIGHT}{RIGHT}{SHIFTUP}") ; Выделяем 4-5 символ, т.е. "Месяц"
Sleep(12)
Send("^{INSERT}") ; Копируем  Дата (Месяц)
Sleep(12)
$dOT2 = ClipGet() ; задаем переменную
Sleep(12)
Send("{RIGHT}{SHIFTDOWN}{END}{SHIFTUP}") ; Выделяем с 7-го до последнего символа т.е. получиться "Год"
Sleep(12)
Send("^{INSERT}") ; Дата (Год)
Sleep(12)
$dOT3 = ClipGet()
Sleep(12)
Send("{Tab}")


Эта тема к предыдущему вопросу никак не относиться... проблема в этом
Код:
Send($SEGODNYA) ;


также происходит при вводе в приложения - такое ощущение что нажимается {ENTER} всегда... как это избежать?

Еще пример разделения Даты на ДД.ММ.ГГГГ :beer:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
HelpMe [?]
такое ощущение что нажимается {ENTER} всегда... как это избежать?
Наверное, никак. Похоже, что это специфика Excel после Send("^{INSERT}").
Но если Вы категорически не хотите осваивать функции из библиотеки Excel.au3, то в AutoIt есть макросы, нам пока нужны только дата и время:
Код:
$sExcel = @ProgramFilesDir & '\Microsoft Office\OFFICE11\EXCEL.EXE'
$sFile = ' "' & @ScriptDir & '\1.xls"'
$sTitle = 'Microsoft Excel'
;ячейка F10 - день
;ячейка G10 - месц
;ячейка H10 - год
;ячейка I10 - часы
;ячейка J10 - минуты
;ячейка K10 - секунды
;ячейка L10 - миллисекунды

$iRight = 5
$iDown = 9
ClipPut(@MDAY & '.' & @MON & '.' & @YEAR & '  ' & @HOUR & ':' & @MIN & ':' & @SEC & ':' & @MSEC)

$iPid = Run($sExcel & $sFile)
If Not $iPid Then Exit
$hWindow = WinWait($sTitle, '', 5)
If Not $hWindow Then Exit
WinActivate($hWindow)
Send('^{HOME}')
For $i = 1 To $iRight
	Send('{RIGHT}')
Next
For $i = 1 To $iDown
	Send('{DOWN}')
Next
Send(@MDAY)
Send('{RIGHT}')
Send(@MON)
Send('{RIGHT}')
Send(@YEAR)
Send('{RIGHT}')
Send(@HOUR)
Send('{RIGHT}')
Send(@MIN)
Send('{RIGHT}')
Send(@SEC)
Send('{RIGHT}')
Send(@MSEC)

Send('^{HOME}')
$sToday = ClipGet()
Send($sToday)
Send('{ENTER}')
;Send('!{F4}')
;Send('{ENTER}')
 
Автор
H

HelpMe

Новичок
Сообщения
85
Репутация
3
Наверное, никак. Похоже, что это специфика Excel после Send("^{INSERT}").
Тогда тема Закрыта :(
Но если Вы категорически не хотите осваивать функции из библиотеки Excel.au3, то в AutoIt есть макросы даты и времени:
:shok:fftop: Проблема не во времени, Проблема в Send($dOT)...
Может ГУРУ Глянет? чтобы тему спокойно закрывать?

ГУРУ - Вы Хде? мы в замешательстве :Lamer:


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

Я думаю что в Буфере - в конце строики ставиться знак абзаца? можно ли использывать для решения темы функцию StringRegExpReplace? чую что да - :whistle:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Уберите 2 последних символа:
Код:
;...
$sToday = StringTrimRight($sToday, 2)
;...
 

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Не вникал в суть темы, но опытом поделюсь, глючил Send. Решил так:
Код:
$a = 'text'
ClipPut($a)
Send("^v")
 
Верх