Что нового

[Массивы] Преобразование массива из 2D в 1D и 1D массива в строку

op_joke

Новичок
Сообщения
20
Репутация
0
Здравствуйте!
Есть задача работать с таблицей Excel (рисунок 1)
Нужно убрать из таблицы все записи кроме имеющих статус "новый"
Нужно разделить "тип1" и "тип2" (Наименования)
Привести "тип1" (и "тип2" со своими значениями) к виду строки (рисунок 2)
И изменить в книге значения с "новый" на "старый"
Задачу я решил, скрипт работает. Но ведь явно его можно сделать меньше и проще, подскажите?

Код:
; создаем объект
Local $oAppl = _Excel_Open(False)
; Открываем рабочую книгу.
Local $sWorkbook = @ScriptDir & "\test.xls"
Local $oWorkbook = _Excel_BookOpen($oAppl, $sWorkbook, Default, Default, True)
$aRange = _Excel_RangeRead($oWorkbook) ; читаем всю таблицу в массив
_ArrayDisplay($aRange, "Исходный массив") ; проверяем

; +==========чистим массив от всего кроме новый==========+
Dim $Temp[UBound($aRange)][UBound($aRange, 2)], $status = "новый"

$Index = 0
For $i = 0 To UBound($aRange) - 1
    If StringRegExp($aRange[$i][2], $status) Then
        For $j = 0 To UBound($aRange, 2) - 1
            $aRange[$Index][$j] = $aRange[$i][$j]
        Next
        $Index += 1
    EndIf
Next

If $Index Then
    ReDim $aRange[$Index][UBound($aRange, 2)]
Else
    $aRange = 0
EndIf

_ArrayDisplay($aRange, "Массив только с значениями 'новый'") ; проверяем
; +==========чистим массив от всего кроме новый==========+

; тут надо отделить тип1 от тип2
; +==========чистим массив от всего кроме тип1==========+
Dim $aType1[UBound($aRange)][UBound($aRange, 2)], $type1 = "тип1"

$Index = 0
For $i = 0 To UBound($aRange) - 1
    If StringRegExp($aRange[$i][0], $type1) Then
        For $j = 0 To UBound($aRange, 2) - 1
            $aType1[$Index][$j] = $aRange[$i][$j]
        Next
        $Index += 1
    EndIf
Next

If $Index Then
    ReDim $aType1[$Index][UBound($aRange, 2)]
Else
    $aType1 = 0
EndIf

_ArrayDisplay($aType1, "Массив только с значениями 'тип1'") ; проверяем
; +==========чистим массив от всего кроме тип1==========+

; +==========чистим массив от всего кроме тип2==========+
Dim $aType2[UBound($aRange)][UBound($aRange, 2)], $type2 = "тип2"

$Index = 0
For $i = 0 To UBound($aRange) - 1
    If StringRegExp($aRange[$i][0], $type2) Then
        For $j = 0 To UBound($aRange, 2) - 1
            $aType2[$Index][$j] = $aRange[$i][$j]
        Next
        $Index += 1
    EndIf
Next

If $Index Then
    ReDim $aType2[$Index][UBound($aRange, 2)]
Else
    $aType2 = 0
EndIf

_ArrayDisplay($aType2, "Массив только с значениями 'тип2'") ; проверяем
; +==========чистим массив от всего кроме тип2==========+

; Преобразуем массивы в одномерные
Global $1DArrayFirst[UBound($aType1)], $1DArraySecond[UBound($aType2)]

For $i = 0 To UBound($aType1) -1
    $1DArrayFirst[$i] = $aType1[$i][1]
Next
_ArrayDisplay($1DArrayFirst, "1D Массив только с значениями 'тип1'") ; проверяем

For $i = 0 To UBound($aType2) -1
    $1DArraySecond[$i] = $aType2[$i][1]
Next
_ArrayDisplay($1DArraySecond, "1D Массив только с значениями 'тип2'") ; проверяем


; меняем значения новый на старый и закрываем книгу
_Excel_RangeReplace($oWorkbook, Default, "C1", "новый", "старый")
_Excel_Close($oAppl)

; результат - одномерный массив укалдывается в строку
MsgBox(4096, "_ArrayToString() возвращает элементы массива", _ArrayToString($1DArrayFirst, '","'))
MsgBox(4096, "_ArrayToString() возвращает элементы массива", _ArrayToString($1DArraySecond, '","'))
 

Вложения

  • 001.JPG
    001.JPG
    35 КБ · Просмотры: 11
  • 002.JPG
    002.JPG
    13.2 КБ · Просмотры: 9
Верх