Вы бы более подробно написали то, что Вам нужно.Описание:
Здесь указывается подробнейшее описание работы программы, описание ее функций, действий.
#include <Excel.au3>
#include <Array.au3>
Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)
Global $sFileWhatFind = @ScriptDir & '\WhatFind.xls', $sFileDataBase = @ScriptDir & '\DataBase.xls', _
$aWhatFind, $sStringReturn, $iStringNumber
If Not FileExists($sFileWhatFind) Or Not FileExists($sFileDataBase) Then
MsgBox(16, 'Error', 'Отсутствуют необходимые файлы')
Exit
EndIf
$aWhatFind = _Read_Excel_Table($sFileWhatFind, 'Задание', 2, 1, 0, 2)
If @error Then
MsgBox(16, 'Error', 'Error')
Exit
EndIf
_Check_Task_Array($sFileDataBase, $aWhatFind)
For $i = 1 To $aWhatFind[0][0]
$sStringReturn = _Search_In_DataBase($sFileDataBase, $aWhatFind[$i][1], $aWhatFind[$i][2])
$iStringNumber = @extended
MsgBox(64, '№' & $i & '(' & $aWhatFind[0][0] & ')', 'Искали: ' & $aWhatFind[$i][2] & ', в разделе: ' & _
$aWhatFind[$i][1] & @LF & @LF & 'Результат поиска:' & @LF & $sStringReturn & @LF & 'Строка № ' & _
$iStringNumber)
Next
MsgBox(64, 'Info', 'Все :)')
Func _Search_In_DataBase($s_FileDataBase, $s_Section, $s_WhatFind)
Local $a_SearchArray, $i_Index, $s_Return_String
$a_SearchArray = _Read_Excel_Table($s_FileDataBase, $s_Section)
If @error Then Return SetError(1, -1, 'Error')
$i_Index = _ArraySearch($a_SearchArray, $s_WhatFind, 1, 0, 1, 0, 1, 1)
If $i_Index = -1 Then Return SetError(0, -1, 'Отсутствует')
For $i = 1 To $a_SearchArray[0][1]
$s_Return_String &= $a_SearchArray[$i_Index][$i] & '|'
Next
Return SetError(0, $i_Index + 1, StringTrimRight($s_Return_String, 1))
EndFunc ;==>_Search_In_DataBase
Func _Check_Task_Array($s_FileDataBase, ByRef $a_Array, $f_Visible = 0)
Local $o_Excel, $a_Sheet
$o_Excel = _ExcelBookOpen($s_FileDataBase, $f_Visible)
If @error Then Return
$a_Sheet = _ExcelSheetList($o_Excel)
If @error Then
_ExcelBookClose($o_Excel)
Return SetError(1)
EndIf
_ExcelBookClose($o_Excel)
For $i = $a_Array[0][0] To 1 Step -1
If _ArraySearch($a_Sheet, $a_Array[$i][1], 1) = -1 Then
_ArrayDelete($a_Array, $i)
$a_Array[0][0] -= 1
EndIf
Next
EndFunc ;==>_Check_Task_Array
Func _Read_Excel_Table($s_FilePath, $s_Sheet, $i_StartRow = 2, $i_StartColumn = 1, $i_RowCnt = 0, $i_ColCnt = 0, $f_Visible = 0)
Local $o_Excel, $a_ReturnArray
$o_Excel = _ExcelBookOpen($s_FilePath, $f_Visible)
If @error Then Return SetError(1, 0, -1)
_ExcelSheetActivate($o_Excel, $s_Sheet)
If @error Then
_ExcelBookClose($o_Excel)
Return SetError(1, 0, -1)
EndIf
$a_ReturnArray = _ExcelReadSheetToArray($o_Excel, $i_StartRow, $i_StartColumn, $i_RowCnt, $i_ColCnt)
If @error Then
_ExcelBookClose($o_Excel)
Return SetError(1, 0, -1)
EndIf
_ExcelBookClose($o_Excel)
Return SetError(0, 0, $a_ReturnArray)
EndFunc ;==>_Read_Excel_Table
#NoTrayIcon
#include <Excel.au3>
#include <Array.au3>
#include <Misc.au3>
#include <Constants.au3>
Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)
Opt('WinTitleMatchMode', 2)
Global $sFileWhatFind = @ScriptDir & '\WhatFind.xls', $sFileDataBase = @ScriptDir & '\DataBase.xls', _
$aWhatFind[2][2], $sStringReturn, $iStringNumber, $fWhatFind, $iRowOld, $iColOld, $oError, $iError, _
$nItemExit, $nMsg
If Not FileExists($sFileWhatFind) Or Not FileExists($sFileDataBase) Then
MsgBox(16, 'Error', 'Отсутствуют необходимые файлы')
Exit
EndIf
$oError = ObjEvent('AutoIt.Error', '_ErrFunc')
$nItemExit = TrayCreateItem('Выход Esc')
TraySetClick(9)
TraySetState()
AdlibRegister('_WhatFind_Exists', 50)
While 1
If $fWhatFind Then
If _IsPressed('01') Then
AdlibUnRegister('_WhatFind_Exists')
While _IsPressed('01')
Sleep(10)
WEnd
_Get_WhatFind_Array($aWhatFind)
If $aWhatFind[0][0] Then
TrayItemSetState($nItemExit, $TRAY_DISABLE)
TrayTip('Поиск в базе', 'Идет поиск:' & @LF & $aWhatFind[1][1] & ', в разделе: ' & _
$aWhatFind[1][0] & @LF & 'подождите...', 5, 1)
$sStringReturn = _Search_In_DataBase($sFileDataBase, $aWhatFind)
$iStringNumber = @extended
TrayTip('', '', 1)
MsgBox(64, 'Результат поиска', 'Искали: ' & $aWhatFind[1][1] & ', в разделе: ' & _
$aWhatFind[1][0] & @LF & @LF & 'Результат поиска:' & @LF & $sStringReturn & @LF & 'Строка № ' & _
$iStringNumber)
EndIf
TrayItemSetState($nItemExit, $TRAY_ENABLE)
AdlibRegister('_WhatFind_Exists', 50)
EndIf
EndIf
$nMsg = TrayGetMsg()
Switch $nMsg
Case 0
ContinueLoop
Case $nItemExit
Exit
EndSwitch
WEnd
Func _Get_WhatFind_Array(ByRef $a_Array)
Local $o_Excel, $i_Row, $i_Col
_WhatFind_Exists()
If Not $fWhatFind Then Return
$a_Array[0][0] = 0
$o_Excel = _ExcelBookAttach($sFileWhatFind)
If @error Then Return
_WhatFind_Exists()
If Not $fWhatFind Then Return
$i_Row = $o_Excel.Application.ActiveCell.Row
$i_Col = $o_Excel.Application.ActiveCell.Column
If $iError Then
$iError = 0
$iRowOld = 0
$iColOld = 0
Return
EndIf
If $i_Row > 1 Then
If ($iRowOld <> $i_Row Or $iColOld <> $i_Col) Then
$iRowOld = $i_Row
$iColOld = $i_Col
Else
Return
EndIf
Switch $iColOld
Case 1
$a_Array[1][0] = _ExcelReadCell($o_Excel, $iRowOld, $iColOld)
If @error Then Return
$a_Array[1][1] = _ExcelReadCell($o_Excel, $iRowOld, $iColOld + 1)
If @error Then Return
If (Not $a_Array[1][0] Or Not $a_Array[1][1]) Then Return
$a_Array[0][0] = 1
Case 2
$a_Array[1][0] = _ExcelReadCell($o_Excel, $iRowOld, $iColOld - 1)
If @error Then Return
$a_Array[1][1] = _ExcelReadCell($o_Excel, $iRowOld, $iColOld)
If @error Then Return
If (Not $a_Array[1][0] Or Not $a_Array[1][1]) Then Return
$a_Array[0][0] = 1
EndSwitch
EndIf
Return
EndFunc ;==>_Get_WhatFind_Array
Func _WhatFind_Exists()
Local $s_FileWhatFind = 'WhatFind.xls', _
$s_Title = '[Title:' & $s_FileWhatFind & ';Class:XLMAIN]'
If WinActive($s_Title) Then
$fWhatFind = True
Else
$aWhatFind[0][0] = 0
$fWhatFind = False
EndIf
EndFunc ;==>_WhatFind_Exists
Func _Search_In_DataBase($s_FileDataBase, ByRef $a_Array)
Local $a_SearchArray, $i_Index, $s_Return_String, $a_Sheet
_Check_Task_Array($s_FileDataBase, $a_Array)
If Not $a_Array[0][0] Then Return SetError(0, -1, 'В базе нет листа ' & $a_Array[1][0])
$a_SearchArray = _Read_Excel_Table($s_FileDataBase, $a_Array[1][0])
If @error Then Return SetError(1, -1, 'Error')
$i_Index = _ArraySearch($a_SearchArray, $a_Array[1][1], 1, 0, 1, 0, 1, 1)
If $i_Index = -1 Then Return SetError(0, -1, 'Отсутствует')
For $i = 1 To $a_SearchArray[0][1]
$s_Return_String &= $a_SearchArray[$i_Index][$i] & '|'
Next
Return SetError(0, $i_Index + 1, StringTrimRight($s_Return_String, 1))
EndFunc ;==>_Search_In_DataBase
Func _Check_Task_Array($s_FileDataBase, ByRef $a_Array, $f_Visible = 0)
Local $o_Excel, $a_Sheet
$o_Excel = _ExcelBookOpen($s_FileDataBase, $f_Visible)
If @error Then Return
$a_Sheet = _ExcelSheetList($o_Excel)
If @error Then
_ExcelBookClose($o_Excel)
Return SetError(1)
EndIf
_ExcelBookClose($o_Excel)
$a_Array[0][0] = 0
For $i = 1 To $a_Sheet[0]
If $a_Array[1][0] == $a_Sheet[$i] Then
$a_Array[0][0] = 1
EndIf
Next
EndFunc ;==>_Check_Task_Array
Func _Read_Excel_Table($s_FilePath, $s_Sheet, $i_StartRow = 2, $i_StartColumn = 1, $i_RowCnt = 0, $i_ColCnt = 0, $f_Visible = 0)
Local $o_Excel, $a_ReturnArray
$o_Excel = _ExcelBookOpen($s_FilePath, $f_Visible)
If @error Then Return SetError(1, 0, -1)
_ExcelSheetActivate($o_Excel, $s_Sheet)
If @error Then
_ExcelBookClose($o_Excel)
Return SetError(1, 0, -1)
EndIf
$a_ReturnArray = _ExcelReadSheetToArray($o_Excel, $i_StartRow, $i_StartColumn, $i_RowCnt, $i_ColCnt)
If @error Then
_ExcelBookClose($o_Excel)
Return SetError(1, 0, -1)
EndIf
_ExcelBookClose($o_Excel)
Return SetError(0, 0, $a_ReturnArray)
EndFunc ;==>_Read_Excel_Table
Func _ErrFunc()
$iError = $oError.Number
EndFunc ;==>_ErrFunc
#NoTrayIcon
#include <Excel.au3>
#include <Misc.au3>
#include <Constants.au3>
Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)
Opt('WinTitleMatchMode', 2)
Global $sFileWhatFind = @ScriptDir & '\WhatFind.xls', $sFileDataBase = @ScriptDir & '\DataBase.xls', _
$aWhatFind[2][2], $sStringReturn, $fWhatFind, $iRowOld, $iColOld, $oError, $iError, _
$nItemExit, $nMsg, $sStringMessage
If Not FileExists($sFileWhatFind) Or Not FileExists($sFileDataBase) Then
MsgBox(16, 'Error', 'Отсутствуют необходимые файлы')
Exit
EndIf
OnAutoItExitRegister('_Finish')
$oError = ObjEvent('AutoIt.Error', '_ErrFunc')
_Start()
If @error Then
_CloseExcel_Hide()
MsgBox(16, 'Error', 'Перезапуститесь')
Exit
EndIf
_CloseExcel_Hide()
HotKeySet('{Esc}', '_Exit')
$nItemExit = TrayCreateItem('Выход Esc')
TraySetClick(9)
TraySetState()
TraySetToolTip('Выход - Esc')
AdlibRegister('_WhatFind_Exists', 50)
While 1
If $fWhatFind Then
If _IsPressed('01') Then
AdlibUnRegister('_WhatFind_Exists')
While _IsPressed('01')
Sleep(10)
WEnd
_Get_WhatFind_Array($aWhatFind)
If $aWhatFind[0][0] Then
$sStringReturn = _Search_In_DataBase($aWhatFind)
$sStringMessage = 'Искали: ' & $aWhatFind[1][1] & ', в разделе: ' & _
$aWhatFind[1][0] & @LF & @LF & 'Результат поиска:' & @LF & $sStringReturn
MsgBox(64, 'Результат поиска', $sStringMessage)
EndIf
_CloseExcel_Hide()
AdlibRegister('_WhatFind_Exists', 50)
EndIf
EndIf
$nMsg = TrayGetMsg()
Switch $nMsg
Case 0
ContinueLoop
Case $nItemExit
_Exit()
EndSwitch
WEnd
Func _Get_WhatFind_Array(ByRef $a_Array)
Local $o_Excel, $i_Row, $i_Col
If Not $fWhatFind Then Return
$a_Array[0][0] = 0
$o_Excel = _ExcelBookAttach($sFileWhatFind)
If @error Then Return
$i_Row = $o_Excel.Application.ActiveCell.Row
$i_Col = $o_Excel.Application.ActiveCell.Column
If $iError Then
$iError = 0
$iRowOld = 0
$iColOld = 0
Return
EndIf
If $i_Row > 1 Then
If ($iRowOld <> $i_Row Or $iColOld <> $i_Col) Then
$iRowOld = $i_Row
$iColOld = $i_Col
Else
Return
EndIf
Switch $iColOld
Case 1
$a_Array[1][0] = _ExcelReadCell($o_Excel, $iRowOld, $iColOld)
If @error Then Return
$a_Array[1][1] = _ExcelReadCell($o_Excel, $iRowOld, $iColOld + 1)
If @error Then Return
If (Not $a_Array[1][0] Or Not $a_Array[1][1]) Then Return
$a_Array[0][0] = 1
Case 2
$a_Array[1][0] = _ExcelReadCell($o_Excel, $iRowOld, $iColOld - 1)
If @error Then Return
$a_Array[1][1] = _ExcelReadCell($o_Excel, $iRowOld, $iColOld)
If @error Then Return
If (Not $a_Array[1][0] Or Not $a_Array[1][1]) Then Return
$a_Array[0][0] = 1
EndSwitch
EndIf
_CloseExcel_Hide()
Return
EndFunc ;==>_Get_WhatFind_Array
Func _CloseExcel_Hide()
Local $a_List
$a_List = WinList('[Class:XLMAIN]')
If $a_List[0][0] Then
For $i = 1 To $a_List[0][0]
If Not BitAND(WinGetState($a_List[$i][1]), 2) Then
WinClose($a_List[$i][1])
EndIf
Next
EndIf
EndFunc ;==>_CloseExcel_Hide
Func _Start()
Local $s_Dir = @AppDataDir & '\FindExcel', $o_Excel, $a_Sheet
If FileExists($s_Dir) Then DirRemove($s_Dir, 1)
DirCreate($s_Dir)
$o_Excel = _ExcelBookOpen($sFileDataBase, 0)
If @error Then Return SetError(1)
$a_Sheet = _ExcelSheetList($o_Excel)
If @error Then
_ExcelBookClose($o_Excel, 0)
Return SetError(1)
EndIf
For $i = 1 To $a_Sheet[0]
_ExcelSheetActivate($o_Excel, $i)
If @error Then
_ExcelBookClose($o_Excel, 0)
Return SetError(1)
EndIf
_ExcelBookSaveAs($o_Excel, $s_Dir & '\' & $a_Sheet[$i], 'txt')
If @error Then
_ExcelBookClose($o_Excel, 0)
Return SetError(1)
EndIf
Next
_ExcelBookClose($o_Excel, 0)
Return SetError(0)
EndFunc ;==>_Start
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _Finish()
Local $s_Dir = @AppDataDir & '\FindExcel'
If FileExists($s_Dir) Then DirRemove($s_Dir, 1)
_CloseExcel_Hide()
EndFunc ;==>_Finish
Func _WhatFind_Exists()
Local $s_FileWhatFind = 'WhatFind.xls', _
$s_Title = '[Title:' & $s_FileWhatFind & ';Class:XLMAIN]'
If WinActive($s_Title) Then
$fWhatFind = True
Else
$aWhatFind[0][0] = 0
$fWhatFind = False
EndIf
EndFunc ;==>_WhatFind_Exists
Func _Search_In_DataBase($a_Array)
Local $s_Dir = @AppDataDir & '\FindExcel', $h_File, $s_Text, $s_Return_String
If Not FileExists($s_Dir & '\' & $a_Array[1][0] & '.txt') Then _
Return SetError(0, -1, 'В базе нет листа ' & $a_Array[1][0])
$h_File = FileOpen($s_Dir & '\' & $a_Array[1][0] & '.txt')
If $h_File = -1 Then Return SetError(0, -1, 'Ошибка открытия файла')
$s_Text = FileRead($h_File)
FileClose($h_File)
If Not $s_Text Then
Return SetError(0, -1, 'Ошибка чтения файла')
EndIf
If Not StringInStr($s_Text, $a_Array[1][1]) Then Return SetError(0, -1, 'Отсутствует ' & $a_Array[1][1])
$s_Return_String = StringRegExpReplace($s_Text, '(?s).*?(' & $a_Array[1][1] & '.*?)\r?\n.*', '$1')
If @extended <> 1 Then Return SetError(0, -1, 'Ошибка обработки текста')
$s_Return_String = StringReplace($s_Return_String, @TAB, '|')
Return SetError(0, 0, $s_Return_String)
EndFunc ;==>_Search_In_DataBase
Func _ErrFunc()
$iError = $oError.Number
EndFunc ;==>_ErrFunc