#include <Excel.au3>
#include <Array.au3>
Opt('MustDeclareVars', 1)
Global $sExcelA = @ScriptDir & '\file.xls', $sExcelB = @ScriptDir & '\file_b.xls', $sTxtA = @ScriptDir & '\tmpA.txt', $sTxtB = @ScriptDir & '\tmpB.txt', _
$aArrayA, $aArrayB, $iTmp, $i_ColumnA, $i_ColumnB, $sSearchA = 'FAIL', $sSearchB = '\d', $sText, $sExcelR = @ScriptDir & '\result.xls', _
$sTxtR = @ScriptDir & '\result.txt'
$iTmp = _Excell_to_Txt($sExcelA, 1, $sTxtA)
If (@error) Or (Not $iTmp) Then Exit 1
$iTmp = _Excell_to_Txt($sExcelB, 1, $sTxtB)
If (@error) Or (Not $iTmp) Then Exit 2
$aArrayA = _ExcelTxt_To_Array($sTxtA, $sSearchA)
If @error Then Exit 3
$i_ColumnA = @extended
$aArrayB = _ExcelTxt_To_Array($sTxtB, $sSearchB)
If @error Then Exit 4
$i_ColumnB = @extended
;~ _ArrayDisplay($aArrayA, 'A column: ' & $i_ColumnA)
;~ _ArrayDisplay($aArrayB, 'B column: ' & $i_ColumnB)
;~ здесь сравнивайте значения в массивах (я не понял по каким условиям идет сравнение)
;~ для примера:
$sText = 'A' & @TAB & 'B' & @TAB & 'C' & @TAB & 'D' & @CRLF
For $i = 0 To UBound($aArrayA) - 1
For $j = 0 To UBound($aArrayB) - 1
If $aArrayA[$i][0] == $aArrayB[$j][0] Then
For $q = 0 To $i_ColumnA - 1
$sText &= $aArrayA[$i][$q] & @TAB
Next
$sText &= $aArrayB[$j][1] & @CRLF
ExitLoop
EndIf
Next
Next
If FileExists($sTxtR) Then FileDelete($sTxtR)
FileWrite($sTxtR, $sText)
$iTmp = _Txt_to_Excell($sTxtR, $sExcelR)
If (@error) Or (Not $iTmp) Then Exit 5
FileDelete($sTxtA)
FileDelete($sTxtB)
FileDelete($sTxtR)
Func _ExcelTxt_To_Array($s_FileExcelTxt, $s_Search = '', $i_Casesense = 1)
Local $s_Text, $s_Pattern, $a_Tmp, $i_Ub_1, $i_Ub_2, $a_Res[1], $a_Str
If Not FileExists($s_FileExcelTxt) Then Return SetError(-1)
$s_Text = StringRegExpReplace(StringStripCR(FileRead($s_FileExcelTxt)), '\n*$', '')
If $s_Search Then
If $i_Casesense Then
$s_Pattern = '(?m)'
Else
$s_Pattern = '(?im)'
EndIf
$s_Pattern &= '^(.*' & $s_Search & '.*)$'
$a_Tmp = StringRegExp($s_Text, $s_Pattern, 3)
Else
$a_Tmp = StringSplit($s_Text, @LF, 2)
EndIf
$i_Ub_1 = UBound($a_Tmp)
If Not $i_Ub_1 Then Return SetError(1)
StringReplace($a_Tmp[0], @TAB, '')
$i_Ub_2 = @extended + 1
If $i_Ub_2 > 1 Then
ReDim $a_Res[$i_Ub_1][$i_Ub_2]
For $i = 0 To $i_Ub_1 - 1
$a_Str = StringSplit($a_Tmp[$i], @TAB)
For $j = 1 To $a_Str[0]
$a_Res[$i][$j - 1] = $a_Str[$j]
Next
Next
ElseIf $i_Ub_2 = 1 Then
$a_Res = $a_Tmp
Else
Return SetError(2)
EndIf
Return SetExtended($i_Ub_2, $a_Res)
EndFunc ;==>_ExcelTxt_To_Array
Func _Excell_to_Txt($s_FileExcel, $v_List, $s_FileTxt = '', $i_Visible = 0)
Local $o_Excel, $i_Err = 1
If Not FileExists($s_FileExcel) Then Return SetError(-1)
Do
$o_Excel = _ExcelBookOpen($s_FileExcel, $i_Visible)
If @error Then ExitLoop
$i_Err += 1
_ExcelSheetActivate($o_Excel, $v_List)
If @error Then ExitLoop
$i_Err += 1
If $s_FileTxt Then
$s_FileTxt = StringRegExpReplace($s_FileTxt, '\..*$', '')
Else
$s_FileTxt = StringRegExpReplace($s_FileExcel, '\..*$', '')
EndIf
If @extended <> 1 Then ExitLoop
$i_Err += 1
_ExcelBookSaveAs($o_Excel, $s_FileTxt, 'txt', 0, 1)
If @error Then ExitLoop
$i_Err = 0
Until 1
If IsObj($o_Excel) Then _ExcelBookClose($o_Excel)
Return SetError($i_Err, 0, FileExists($s_FileTxt & '.txt'))
EndFunc ;==>_Excell_to_Txt
Func _Txt_to_Excell($s_FileTxt, $s_FileExcel, $s_Ext = 'xls', $i_Visible = 0)
Local $o_Excel, $i_Err = 1
If Not FileExists($s_FileTxt) Then Return SetError(-1)
Do
$o_Excel = _ExcelBookOpen($s_FileTxt, $i_Visible)
If @error Then ExitLoop
$i_Err += 1
If $s_FileExcel Then
$s_FileExcel = StringRegExpReplace($s_FileExcel, '\..*$', '')
Else
$s_FileExcel = StringRegExpReplace($s_FileTxt, '\..*$', '')
EndIf
If @extended <> 1 Then ExitLoop
$i_Err += 1
_ExcelBookSaveAs($o_Excel, $s_FileExcel, $s_Ext, 0, 1)
If @error Then ExitLoop
$i_Err = 0
Until 1
If IsObj($o_Excel) Then _ExcelBookClose($o_Excel)
Return SetError($i_Err, 0, FileExists($s_FileExcel & '.' & $s_Ext))
EndFunc ;==>_Txt_to_Excell