Что нового

Скопировать определенные строки с Excel

joparezzz

Новичок
Сообщения
65
Репутация
0
Autoit версия 3.3.0.
Попытался написать код для отбора определенных строк из одного листа в другой лист Excel.
Во вложении файл excel с исходными данными, со списком сборочных единиц и их деталей, проблема в том, что сборочной единице неправильно распределены детали и подсборки.
Надо по порядку распределить сборочные единицы и его детали. Например должно быть:
82.1.1.1.1.1.1 6.001.01.00.00.00-454 Основание 1 Сборочные единицы
82.1.1.1.1.1.1.10 6.001.01.00.00.01 Настил 1 Детали
82.1.1.1.1.1.1.11 3.001.01.00.00.01-02 Настил 6 Детали
82.1.1.1.1.1.1.12 6.001.01.00.00.01-03 Настил 2 Детали
82.1.1.1.1.1.1.13 3.001.01.00.00.02 Дно 4 Детали
82.1.1.1.1.1.1.14 3.001.01.00.00.02-01 Дно 1 Детали
82.1.1.1.1.1.1.15 3.001.01.00.00.02-02 Дно 2 Детали
82.1.1.1.1.1.1.16 3.001.01.00.00.02-03 Дно 1 Детали

Но почему то детали принадлежащие Основанию не вытаскиваются, в чем проблема?



Код:
#include <Array.au3>
#include <Excel.au3>

Local $oExcel = _Excel_Open()
$SorceFile = "\Исходные данные.xlsx" 									;Путь к файлу с исходными данными
Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & $SorceFile) 	;Открываем файл с исходными данными
Local $oSheet = _Excel_SheetAdd($oWorkbook, 1, False, 1, "Лист2")

Local $aSB = ["Основание", "Каркас основания", "Ферма основания", "Планка крепежная площадки", "Колодец кабельных вводов"]

Local $LastRow = $oWorkbook.Sheets("Лист1").Range("A1").SpecialCells($xlCellTypeLastCell).Row ;Определяем последнюю строку
ConsoleWrite ($LastRow & @CRLF)

Local $aArray = _Excel_RangeRead($oWorkbook, Default, $oWorkbook.Sheets("Лист1").Usedrange.Columns("A:F"), 1)
_ArrayDisplay($aArray)

For $i = 0 To UBound($aSB) - 1
	;ConsoleWrite ($aSB[$i]& @CRLF)
	For $j = 0 To $LastRow - 1
		$sRow = $j + 1
		$sPos = $aArray[$j][0]
		$sObozn = $aArray[$j][1]
		$sName = $aArray[$j][2]
		$sKol = $aArray[$j][3]
		$sRazd = $aArray[$j][4]
		If $sName = $aSB[$i] Then
			ConsoleWrite ($sRow & @TAB & $sPos & @TAB & $sObozn & @TAB & $sName & @TAB & $sKol & @TAB & $sRazd & @CRLF)
				For $n = 0 To 200
					$sRow  = $sRow + $n
					$sPos1 = $aArray[$j + $n][0]
					$sPosN = $sPos  & "." & $n
					$sObozn = $aArray[$j + $n][1]
					$sName = $aArray[$j + $n][2]
					$sKol = $aArray[$j + $n][3]
					$sRazd = $aArray[$j + $n][4]
					If $sPos1 = $sPosN And $sRazd <> "Сборочные единицы" Then
						ConsoleWrite ($sRow & @TAB & $sPos1 & @TAB & $sObozn & @TAB & $sName & @TAB & $sKol & @TAB & $sRazd & @CRLF)
					Else
					EndIf

				Next

		Else
		EndIf

	Next
	ConsoleWrite (@CRLF)
Next
 

Вложения

  • данные.zip
    24.3 КБ · Просмотры: 1
Верх