Что нового

перебор excel через массив и дальнейшая выгрузка данных обратно в excel

serg41

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

Описание :Здравствуйте уважаемые форумчане, помогите решить проблему, есть файл ексель где есть куча столбиков его нужно перебрать по типу если есть строки с таким же значением в одной из ячеек, как и проверяемая строка, то мы эти строки оставляем и группируем, а если у проверяемой строки не нашлось таких совпадений то удаляем всю эту строку. Форумчане подсказали как сделать, но возникла проблема при выгрузке в файл эксель итоговых значений "съезжают" значения дат в ячейках и значение полиса(дата - 19930613000000, полис - 6,4536E+15). Вот попробовал что придумать, но как-то оно не делает то что нужно.

Примечания :
Код:
#include <Excel.au3>

$File = FileOpenDialog('Выбрать файл для сортировки', @ScriptDir, "Файлы EXCEL (*.xls;*.xlsx)", 2 + 1)
If Not @error Then

    Local $oExcel = _Excel_Open(False)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Ошибка !", "Ошибка создания объекта Excel." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $oWorkbook = _Excel_BookOpen($oExcel, $File)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, "Ошибка !", "Ошибка открытия файла Excel " & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
        _Excel_Close($oExcel)
        Exit
    EndIf

$Array=_Excel_RangeRead($oWorkbook)
_Excel_BookClose($oWorkbook)

 ;Сортировка массива по графе "ФИО"
 _ArraySort($Array, 0, 1, 0, 1)

;~  _ArrayDisplay($Array)
 ;Удаление "одиночных" записей
 For $i=UBound($Array)-1 to 1 step -1

    $fio=$Array[$i][1]
    $Found=_ArrayFindAll($Array,$fio,1,Ubound($Array)-1,0,0,1)

    If Ubound($Found)=1 Then _ArrayDelete($Array,$i)

 Next


Local $oWorkbook = _Excel_BookNew($oExcel,1)
_Excel_RangeWrite($oWorkbook,Default,$Array)
_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\АналитикаИтог.xlsx")
_Excel_BookClose($oWorkbook)
Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\АналитикаИтог.xlsx")
For $i = $oWorkbook.ActiveSheet.UsedRange.Rows.Count  to 2 Step -1
   $dr = StringMid(_Excel_RangeRead($oWorkbook, Default, 'C' & $i),7,2) & "." & StringMid(_Excel_RangeRead($oWorkbook, Default, 'C' & $i),5,2) & "." & StringMid(_Excel_RangeRead($oWorkbook, Default, 'C' & $i),1,4)
   $dp = StringMid(_Excel_RangeRead($oWorkbook, Default, 'G' & $i),7,2) & "." & StringMid(_Excel_RangeRead($oWorkbook, Default, 'G' & $i),5,2) & "." & StringMid(_Excel_RangeRead($oWorkbook, Default, 'G' & $i),1,4)
   _Excel_RangeWrite($oWorkbook,Default,$dr,'C' & $i)
   _Excel_RangeWrite($oWorkbook,Default,$dp,'G' & $i)
Next
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)
MsgBox(48,'Внимание !','Работа с документом завершена !')
EndIf

Помогите пожалуйста.
 

Вложения

  • test.7z
    6.7 КБ · Просмотры: 7

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вот, дописал
Код:
#include <Excel.au3>


$File = FileOpenDialog('Выбрать файл для сортировки', @ScriptDir, "Файлы EXCEL (*.xls;*.xlsx)", 2 + 1)
If Not @error Then

    Local $oExcel = _Excel_Open(False)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Ошибка !", "Ошибка создания объекта Excel." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $oWorkbook = _Excel_BookOpen($oExcel, $File)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, "Ошибка !", "Ошибка открытия файла Excel " & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
        _Excel_Close($oExcel)
        Exit
    EndIf

$Array=_Excel_RangeRead($oWorkbook)
_Excel_BookClose($oWorkbook)

 ;Сортировка массива по графе "ФИО"
 _ArraySort($Array, 0, 1, 0, 1)

 ; _ArrayDisplay($Array)
 ;Удаление "одиночных" записей
 For $i=UBound($Array)-1 to 1 step -1

    $fio=$Array[$i][1]
    $Found=_ArrayFindAll($Array,$fio,1,Ubound($Array)-1,0,0,1)

    If Ubound($Found)=1 Then _ArrayDelete($Array,$i)

 Next

;Приведение колонки с датой и номером полиса к нормальному виду
For $i=1 to UBound($Array)-1
 $Year=StringLeft($Array[$i][4],4)
 $Month=StringMid($Array[$i][4],5,2)
 $Day=StringMid($Array[$i][4],7,2)
$Array[$i][4]=StringFormat("%02i.%02i.%04i",$Day,$Month, $Year)

$Array[$i][1]=StringFormat("%u",$Array[$i][1])
Next

;_ArrayDisplay($Array)

Local $oWorkbook = _Excel_BookNew($oExcel,1)
_Excel_RangeWrite($oWorkbook,Default,$Array)
_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\АналитикаИтог.xlsx")
_Excel_BookClose($oWorkbook)
Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\АналитикаИтог.xlsx")
For $i = $oWorkbook.ActiveSheet.UsedRange.Rows.Count  to 2 Step -1
   $dr = StringMid(_Excel_RangeRead($oWorkbook, Default, 'C' & $i),7,2) & "." & StringMid(_Excel_RangeRead($oWorkbook, Default, 'C' & $i),5,2) & "." & StringMid(_Excel_RangeRead($oWorkbook, Default, 'C' & $i),1,4)
   $dp = StringMid(_Excel_RangeRead($oWorkbook, Default, 'G' & $i),7,2) & "." & StringMid(_Excel_RangeRead($oWorkbook, Default, 'G' & $i),5,2) & "." & StringMid(_Excel_RangeRead($oWorkbook, Default, 'G' & $i),1,4)
   _Excel_RangeWrite($oWorkbook,Default,$dr,'C' & $i)
   _Excel_RangeWrite($oWorkbook,Default,$dp,'G' & $i)
Next

_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)
MsgBox(48,'Внимание !','Работа с документом завершена !')
EndIf
только в итоговой таблице Excel нужно формат колонки с датой изменить руками ( как это делать с новой UDF не нашел :( )
 
Верх