Что нового

Как заставить Автоит-скрипт реагировать на изменение значения - в файле экселя

mv6677

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

Описание:
Как заставить Автоит-скрипт реагировать на изменение значения - в ячейке открытого файла экселя 1.xls ?
(файл 1.xls и скрипт-автоит лежат в одной папке).

Скрипт-автоит работает в фоновом режиме - то есть работает постоянно.
Если в файле 1.xls, в ячейке F7 стоит 0 - то ничего не происходит.
Если там появляется 1- то срабатывает скрипт-автоит, один раз выдающий короткий звуковой сигнал c:\Windows\Media\tada.wav

Примечания:
 

Вложения

  • 1.rar
    6.2 КБ · Просмотры: 4

hedji

Продвинутый
Сообщения
409
Репутация
94
Re: Как заставить AutoIt-скрипт реагировать на изменение значения - в файле экселя

OffTopic:

А нужно ли изобретать велосипед из 2х файлов?
В самом Excel пишете
Код:
Private Sub Worksheet_Change(ByVal Target As Range)

    MsgBox "You just changed " & Target.Address

End Sub
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
Re: Как заставить AutoIt-скрипт реагировать на изменение значения - в файле экселя

hedji, как написать макрос в экселе - я прекрасно знаю сам.

Я спрашивал не про макрос эксель, а именно про скрипт-автоит.
 

NickSpirit

Знающий
Сообщения
44
Репутация
5
Re: Как заставить AutoIt-скрипт реагировать на изменение значения - в файле экселя

Пока могу подсказать только теоретически (сорри нет времени сейчас но будет завтра).

Открывать файл самим скриптом используя Excel.au3 и тогда уже отслеживать изменение ячейки посредством функции
Код:
$sCellValue = _ExcelReadCell($oExcel, $oExcel.ActiveCell.Row, $oExcel.ActiveCell.Column)
If $sCellValue= 1......



Есть другой способ..но он, на мой взгляд, не столь продуктивный и корявый. (хотя может и то что я предлагаю тоже далеко не идеально, но я тоже только учусь)))
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Re: Как заставить AutoIt-скрипт реагировать на изменение значения - в файле экселя

Открывать файл самим скриптом используя Excel.au3 и тогда уже отслеживать изменение ячейки посредством функции
Код:
$sCellValue = _ExcelReadCell($oExcel, $oExcel.ActiveCell.Row, $oExcel.ActiveCell.Column)
If $sCellValue= 1......
У Вас ведь в профиле указана версия AutoIt 3.3.14.0 , с ней эта функция работать не будет (устаревшая) сейчас нужно использовать
Код:
_Excel_RangeRead(...)
Например так :
Код:
#include <excel.au3>
HotKeySet('q','_Exit')

Global $oExcel=_Excel_Open(True)
$oWorkBook=_Excel_BookOpen($oExcel,@ScriptDir&'\1.xls')
While 1

$sResult = _Excel_RangeRead($oWorkbook, Default, 'F7')
If $sResult Then 
	Beep()
	exit
EndIf
sleep(200)

WEnd

Func _Exit()
	_Excel_Close($oExcel)
	Exit
EndFunc
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
Re: Как заставить AutoIt-скрипт реагировать на изменение значения - в файле экселя

ra4o, не подскажете как заставить AutoIt-скрипт отслеживать состояние ячейки постоянно (единократным звуковым сигналом), а не закрывать скрипт после одного звукового проигрывания ?
То есть - если стоит "1", то звук проигрывается один раз.
Но если потом сменить эту "1" на "0", а потом опять поставить значение "1" - то скрипт снова воспроизведет звук.

Пытался сделать сам, убрав "exit" - из кода:
Код:
If $sResult Then 
    Beep()
    exit
EndIf
Такой код может работать в фоновом режиме.
Но в этом случае не получается однократного срабатывания - скрипт сигналит постоянно, с определенной периодичностью.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Re: Как заставить AutoIt-скрипт реагировать на изменение значения - в файле экселя

В таком случае вводим еще флаг, что сигнал уже прозвучал и когда появляется "1" флаг устанавливаем , а когда снова "0" - сбрасываем, например так :
Код:
#include <excel.au3>
HotKeySet('q', '_Exit')

Global $beep = False
Global $oExcel = _Excel_Open(True)
$oWorkBook = _Excel_BookOpen($oExcel, @ScriptDir & '\1.xls')

While 1

	$sResult = _Excel_RangeRead($oWorkbook, Default, 'F7')
	If $sResult Then
		If Not $beep Then
			$beep = True
			Beep()
		EndIf
	Else
		If $beep Then $beep = False
	EndIf

	Sleep(200)
WEnd

Func _Exit()
	_Excel_Close($oExcel)
	Exit
EndFunc   ;==>_Exit
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
Re: Как заставить AutoIt-скрипт реагировать на изменение значения - в файле экселя

ra4o, все работает.
Большое спасибо.
 
Верх