Что нового

[Автоматизация] Excell Перенос строк в другую программу с эмуляцией хоткеев

iworm

Новичок
Сообщения
2
Репутация
0
Доброго времени суток гуру AutoIT'a.
Помогите пожалуйста набросать скрипт на AutoIT
Суть проблемы: есть .xlsx файл (MSO 2010), в нем имеется определенное количество строк вида
1234567
7654321
0123456
все строки вбиты строго в первую колонку, необходимо поочередно копировать каждую ячейку, переходить в окно другой программы (к примеру AkelPad)))) ), вставлять скопированное в уже активное поле, затем послать в эту же прогу последовательно Enter, F7, Ctrl+S, Ctrl-V, Esc, Enter. Задержка между командами 1-1.5 сек.
И так до конца строк (пустая ячейка).
Заранее спасибо всем отозвавшимся.

P.S. Приложил исходный *.xlsx файл. Конкретного файла результата не существует т.к. работа скрипта будет происходить в другой программе (AkelPad указан для примера). Хотелось бы увидеть алгоритм копирования-вставки из Excell'я в AkelPad и эмулирование 5-и комбинаций клавиш, повтор цикла.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
iworm,
Можно сделать примерно так (проверял только на Excel 2003).
Код:
#include <Excel.au3>
;~ #include <Array.au3>

Global Const $xlUp = -4162

Global $sFileExcel = @ScriptDir & '\Образец.xlsx', _;путь к файлу Excel
		$oObjEr, _;обработчик COM ошибок
		$iVisible = 1, _; Открывать файл Excel в открытом ($iVisible = 0 скрытом) режиме
		$vSheet = 'Лист1', _;имя листа, на котором берем данные (можно номер $vSheet = 1)
		$vStartRow = 1, _ ;номер (или адрес $vStartRow = 'A1') первой ячейки, начиная с которой получаем данные
		$vColumn = 1, _;номер колонки (или буква $vColumn = 'A'), из которой получаем данные
		$oExcel, _; объект Excel
		$oSheet, _;объект Лист
		$iLastRow, _;последняя заполненная ячейка в колонке $vColumn на листе $oSheet
		$oRange, _;объект Range ($vColumn на листе $oSheet ячейки с $vStartRow по $iLastRow
		$aData, _ ;массив с данными
		$sText, _; для получения текста из массива $aData
		$sFileTxt = @ScriptDir & '\Excel.txt', _;;путь к файлу Txt
		$hFile;дескриптор файла $sFileTxt

$oObjEr = ObjEvent('AutoIt.Error', '_Obj_Error')
$oExcel = _ExcelBookOpen($sFileExcel, $iVisible)
If @error Then Exit 1
$oSheet = $oExcel.Sheets($vSheet)
$vStartRow = StringRegExpReplace($vStartRow, '[^\d]', '')
$iLastRow = $oSheet.Cells($oSheet.Rows.Count, $vColumn).End($xlUp).Row;получаем последнюю заполненную ячейку в колонке $vColumn
If $iLastRow - $vStartRow <= 0 Then
	_ExcelBookClose($oExcel)
	Exit 2
EndIf
$oRange = $oSheet.Range($oSheet.Cells($vStartRow, $vColumn), $oSheet.Cells($iLastRow, $vColumn))
$aData = $oExcel.WorksheetFunction.Transpose($oRange.Value);получаем массив значений
_ExcelBookClose($oExcel)
;~ _ArrayDisplay($aData)
;~ для примера сохраняем полученные данные в файл:
For $i = 0 To UBound($aData) - 1
	If StringIsDigit($aData[$i]) Then;забираем только числа
		$sText &= $aData[$i] & @CRLF
	EndIf
Next
$sText = StringTrimRight($sText, 2);убираем перенос строки в конце текста
$hFile = FileOpen($sFileTxt, 2)
FileWrite($hFile, $sText)
FileClose($hFile)

Func _Obj_Error()
	ConsoleWrite('Object error: ' & $oObjEr.number & @TAB & 'Scriptline :' & $oObjEr.scriptline & @LF)
	If IsObj($oExcel) Then _ExcelBookClose($oExcel)
	Exit 13
EndFunc   ;==>_Obj_Error


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

iworm [?]
вставлять скопированное в уже активное поле, затем послать в эту же прогу последовательно Enter, F7, Ctrl+S, Ctrl-V, Esc, Enter. Задержка между командами 1-1.5 сек.
А здесь подробнее объясните, что Вам надо.
 
Автор
I

iworm

Новичок
Сообщения
2
Репутация
0
worm [?]
Цитата

вставлять скопированное в уже активное поле, затем послать в эту же прогу последовательно Enter, F7, Ctrl+S, Ctrl-V, Esc, Enter. Задержка между командами 1-1.5 сек.

А здесь подробнее объясните, что Вам надо.
Вобщем есть программа, в нем есть обычный TextEdit, при переходе в нее это поле уже активно, нужно поочередно содержимое каждой ячейки из первого столбца переносить в эту программу, нажимать (Send ("{ENTER}") e.t.c) определенные сочетания, переходить на следующую ячейку и так до конца.

Два дня активного гугления и получился следующий некро-код:
Код:
#include <Date.au3>
#include <GUIConstants.au3>
#include <ExcelCOM_UDF.au3> 


Global $Paused

HotKeySet("{ESC}", "Terminate")

Func Terminate()
Exit 0
EndFunc


$oExcel = ObjGet(@ScriptDir & '\1.xls', "Excel.Application") ; "схватить" существующий объект Excel
 
_ExcelSheetActivate($oExcel, 1)

For $i= 1 To 665 ;пробег по солбцу
$sReadCell = _ExcelReadCell($oExcel, 1, $i)

WinActivate("AkelPad") ;заход в окно програмы
Send ("{Del}")

Send($sReadCell) ;вставить прочтенное из эксель
Send ("{ENTER}")
Next

только он почему то вставляет 0 вместо значения ячейки((((((((. :scratch:
Помогите пожалуйста организовать глобальный цикл (копирование-переход в программу -вставка) и функцию остановки программы при пустой ячейке
 
Верх