Что нового

Отслеживание изменений в файле Excel

den4ik

Новичок
Сообщения
21
Репутация
0
Добрый вечер друзья.
Прошу помочь со следующей идеей:
1. Есть файл Excel с постоянно добавляющимися значениями в строки.
2. Скрипт реагирует на добавление значения в строку второго столбца и запоминает (отображает) это значение в своем окне с отсчетом времени.
3. Периодически перечитывает файл Excel и если добавлена информация в 6 столбец строки за которой уже следит, то таймер останавливается и значение перестает отображаться в списке
4. Количество одновременно отслеживаемых значений может достигать 50-70

Спасибо за любые идеи реализации этой идеи:smile:
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Файл Excel постоянно открыт или открывается на момент записи и закрывается ?
 
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
постоянно открыт, он в общем доступе и записи вносятся раз в несколько минут
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Изначально - запускаем скрипт, файл excel уже открыт, ищем последнюю строку , читаем значение из столбца 6, далее периодически проверяем есть ли новая строка, если есть - получаем значение столбца 6 и если оно изменилось - сбрасываем таймер , так ?
 
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
алгоритм такой
файл открыт->запускаем скрипт->считываем все ячейки во 2 и 6 столбце->если в 6 столбце пусто выводим значение 2 столбца соответствующей строки->периодически перечитываем файл и добавляем только новые появившиеся значение и удаляем значения и таймер если заполнился 6 столбец

как то так


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

в скрипт должны попасть значения "1" и "4" и в идеале было бы совсем замечательно если таймер начнет считать сколько времени прошло относительно даты в ячейке с временем соответствующей строки
 

Вложения

  • пример.rar
    6.4 КБ · Просмотры: 5

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Попробуйте так :
Код:
#include <array.au3>
#include <excel.au3>
#include <date.au3>

HotKeySet('^q', '_Exit')
$sPath = @ScriptDir & '\пример.xls'
$oExcel = _Excel_Open()
$oWorkbook = _Excel_BookAttach($sPath)
ConsoleWrite('_Excel_BookAttach error=' & @error & @CR)

While 1
	$aRange = _Excel_RangeRead($oWorkbook)
	If Not @error Then
		ConsoleWrite('_Excel_RangeRead=' & @error & @CR)
		$sText = ''

		For $i = 1 To UBound($aRange) - 1
			If Not $aRange[$i][5] <> '' And $aRange[$i][1] Then
				$sText &= 'Значение ' & $aRange[$i][1] & ', прошло ' & _DateDiff('h', StringReplace($aRange[$i][4], '.', '/'), _NowCalc()) & ' часа(ов)' & @CR
			EndIf
		Next
		MsgBox(0, '', $sText, 5)

	EndIf

WEnd

Func _Exit()
	_Excel_BookClose($oExcel)
	Exit

EndFunc   ;==>_Exit
 
Автор
D

den4ik

Новичок
Сообщения
21
Репутация
0
спасибо,
ra4o сказал(а):
Попробуйте так :
Код:
#include <array.au3>
#include <excel.au3>
#include <date.au3>

HotKeySet('^q', '_Exit')
$sPath = @ScriptDir & '\пример.xls'
$oExcel = _Excel_Open()
$oWorkbook = _Excel_BookAttach($sPath)
ConsoleWrite('_Excel_BookAttach error=' & @error & @CR)

While 1
	$aRange = _Excel_RangeRead($oWorkbook)
	If Not @error Then
		ConsoleWrite('_Excel_RangeRead=' & @error & @CR)
		$sText = ''

		For $i = 1 To UBound($aRange) - 1
			If Not $aRange[$i][5] <> '' And $aRange[$i][1] Then
				$sText &= 'Значение ' & $aRange[$i][1] & ', прошло ' & _DateDiff('h', StringReplace($aRange[$i][4], '.', '/'), _NowCalc()) & ' часа(ов)' & @CR
			EndIf
		Next
		MsgBox(0, '', $sText, 5)

	EndIf

WEnd

Func _Exit()
	_Excel_BookClose($oExcel)
	Exit

EndFunc   ;==>_Exit

спасибо, самое то!
Код:
$sInput = '20170802155535'
$sOutput = ConsoleWrite(StringRegExpReplace($sInput, '(\A\d{3,10}(?=(\d{2})+\z)|\d{2}(?=\d))', '\1:'))

помоги разобрать это время на требуемое, что бы считался таймер правильно, а то оказывается формат времени другой подставляется и в выводе используется 20170802155535, сумел разобрать до часов, а вот добиться 2017/08/02 15:55:35 вида не получается
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Может можно как-то проще, но вот мой вариант:
Код:
$sInput = '20170802155535'
$sOutput = StringRegExpReplace($sInput, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$1/$2/$3 $4:$5:$6')
MsgBox(0,'',$sInput&@CR&$sOutput)
 
Верх