Что нового

перебор строк в excel с группировкой

serg41

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

Описание:
Здравствуйте, прошу помочь решить проблему есть файл excel в нем есть строки среди которых встречаются похожие и
нужно сгруппировать их по следующим значениям:
1. по полису
2. по диагнозу чтобы буква в значение диагноза у схожих по полису строк была одинаковая

т.е. в результате получим

...6448020897011305 ...N76.2...
...6448020897011305 ...N76.2...
...6457610885070012 ...Z32.1...
...6457610885070012 ...Z35.8

Примечания:
 

Вложения

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

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Вот, попробуйте
Код:
#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
	_Excel_RangeSort($oWorkbook, Default, Default, "B:B")

	$Start = 1
	For $i = 1 To $oWorkbook.ActiveSheet.UsedRange.Rows.Count - 1
		$Item = _Excel_RangeRead($oWorkbook, Default, 'B' & $i)
		$NextItem = _Excel_RangeRead($oWorkbook, Default, 'B' & $i + 1)
		If $Item <> $NextItem Then
			_Excel_RangeSort($oWorkbook, Default, $Start & '-' & $i, "C:C")
			$Start = $i + 1
		EndIf
	Next

	_Excel_Close($oExcel)
EndIf
 
Автор
S

serg41

Новичок
Сообщения
14
Репутация
0
Спасибо большое, все работает, но оказалось что нужно не только группировать, :( :'( но и убирать одиночные строки. Заранее извиняюсь что не полностью обрисовал задачу.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Изменил , пробуйте, только пример взял из Вашей другой темы (значения колонок не совпадают с этим примером)
Код:
#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
    _Excel_RangeSort($oWorkbook, Default, Default, "D2:D")

 ;Удаление "одиночных" записей и сортировка по графе "Диагноз"
 $n = 0
 For $i = $oWorkbook.ActiveSheet.UsedRange.Rows.Count  to 2 Step -1
	$Item = _Excel_RangeRead($oWorkbook, Default, 'D' & $i)
	$PrevItem = _Excel_RangeRead($oWorkbook, Default, 'D' & $i-1)

      If $Item = $PrevItem Then
		  If $n = 0 then $start=$i
        $n+=1
	  Else
		 If $n = 0 Then
		   _Excel_RangeDelete($oWorkbook.ActiveSheet,$i&':'&$i)
		 Else
		   $n = 0
		   _Excel_RangeSort($oWorkbook, Default, 'A'&$i&':J'&$start,'E:E')
		 EndIf
	  EndIf
 Next
    _Excel_Close($oExcel)

MsgBox(48,'Внимание !','Работа с документом завершена !')
EndIf
 
Автор
S

serg41

Новичок
Сообщения
14
Репутация
0
гигантское спасибо! :laugh: :IL_AutoIt_1:
 
Верх