Здравствуйте, подскажите пожалуйста никак не могу понять где ошибка, написал такой код:
Суть в том, что я указываю 2 excel файла и функция _comparison_array сравнивает эти 2 файла таким образом:
1) смотрит что удалено из первого excel (по первой колонке 3-го листа) относительно второго excel (по первой колонке 3-го листа), то что удалено вносится в массив (который будет возвращаться)
2) смотрит что добавлено во 2 excel файле относительно первого и тоже вносится в массив (который будет возвращаться)
У меня в одном excel 211 элементов, во втором 276 элементов, но по окончанию функции он показывает, что добавлено всего 4 элемента, хотя минимум их должно быть 65 (276-211=65). Никак не могу понять что я проморгал? Excel фаилы во вложении
Код:
#include <Array.au3>
#include <Excel.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <String.au3>
#include <IE.au3>
Func _open_read_excel($FileExelOpen)
Local $oExcel = _Excel_Open(False)
Local $oWorkbook = _Excel_BookOpen($oExcel, $FileExelOpen)
Local $aResult = _Excel_RangeRead ($oWorkbook, 3) ;, "A2:C2", 2) ;_Excel_RangeRead($oWorkbook)
_Excel_Close($oExcel)
Local $iMaxY = UBound($aResult, 2);Количество столбцов
Local $aTemp[0][$iMaxY];Временный массив НЕ пустых строк, пока "0" размера
Local $iMax = 0
For $i = 0 To UBound($aResult) - 1
If $aResult[$i][1] <> "" Then ;Если значение не пустое, то во временный массив записываем данные
$iMax += 1
ReDim $aTemp[$iMax][$iMaxY]
For $j = 0 To $iMaxY - 1 ;Запись всех столбцов во временный массив
$aTemp[$iMax - 1][$j] = $aResult[$i][$j]
Next
EndIf
Next
$aResult = $aTemp
Return $aResult
EndFunc
Func _comparison_array ($All_device_old, $All_device_new)
$counter_old = UBound ($All_device_old) - 1
$counter_new = UBound ($All_device_new) - 1
Local $change[$counter_old + $counter_new]
$Name_Change = 1
$change[0] = "Удалено из старого списка:"
For $i = 0 To $counter_old Step 1
_ArraySearch ($All_device_new, $All_device_old[$i][0])
If @error Then
$change[$Name_Change] = $All_device_old[$i][1]
$Name_Change = $Name_Change + 1
EndIf
Next
$change[$Name_Change] = "Добавленно из нового:"
$Name_Change = $Name_Change + 1
For $i = 0 to $counter_new Step 1
_ArraySearch ($All_device_old, $All_device_new[$i][0])
If @error Then
$change[$Name_Change] = $All_device_new[$i][1]
$Name_Change = $Name_Change + 1
EndIf
Next
Return $change
EndFunc
$FileExelOpen_old = FileOpenDialog ("Выберите excel фаил", @ScriptDir, "Excel (*.xls;*.xlsx)")
$FileExelOpen_new = FileOpenDialog ("Выберите excel фаил", @ScriptDir, "Excel (*.xls;*.xlsx)")
$All_device_old = _open_read_excel ($FileExelOpen_old)
$All_device_new = _open_read_excel ($FileExelOpen_new)
$test = _comparison_array ($All_device_old,$All_device_new )
_ArrayDisplay ($test)
Суть в том, что я указываю 2 excel файла и функция _comparison_array сравнивает эти 2 файла таким образом:
1) смотрит что удалено из первого excel (по первой колонке 3-го листа) относительно второго excel (по первой колонке 3-го листа), то что удалено вносится в массив (который будет возвращаться)
2) смотрит что добавлено во 2 excel файле относительно первого и тоже вносится в массив (который будет возвращаться)
У меня в одном excel 211 элементов, во втором 276 элементов, но по окончанию функции он показывает, что добавлено всего 4 элемента, хотя минимум их должно быть 65 (276-211=65). Никак не могу понять что я проморгал? Excel фаилы во вложении