none
powershell и Excel RRS feed

  • Вопрос

  • Делаю выборку в Excel.Проверяю соответствие номера телефона с шаблоном. Если не соответствует удаляю строчку. Вопрос как написать является ли $split[0] числом от 0..9.

    $max=$sheet.UsedRange.Rows.Count
    for ($i=9; $i -le $max; $i++){
    $row2 = $sheet.Cells.Item($i,6).text
    $split=$row2 -split "(.)" -ne ""
    if($split[0]            ){
    [void]$sheet.Cells.Item($i,1).EntireRow.Delete()
    $i--
    }
    }
    13 октября 2018 г. 14:12

Ответы

  • if ($split[0] -ge 0 -and $split[0] -le 9) {
        # Ваш код
    }

    Еще было бы неплохо проверить какой тип на выходе:

    $split[0].GetType()

    Если String, то вот вам код:

    [Convert]::ToInt32($split[0])


    • Изменено Sergey Ya 13 октября 2018 г. 14:29
    • Помечено в качестве ответа KolOleRom 13 октября 2018 г. 14:54
    13 октября 2018 г. 14:22
  • Вы можете использовать foreach:

    Foreach ([convert]::ToInt32($s) in $split) {
        # Ваш код. $s будет иметь тип Int
    }

    Либо воспользоваться советом Vector BCO

    • Помечено в качестве ответа KolOleRom 13 октября 2018 г. 17:00
    13 октября 2018 г. 16:00

Все ответы

  • if ($split[0] -ge 0 -and $split[0] -le 9) {
        # Ваш код
    }

    Еще было бы неплохо проверить какой тип на выходе:

    $split[0].GetType()

    Если String, то вот вам код:

    [Convert]::ToInt32($split[0])


    • Изменено Sergey Ya 13 октября 2018 г. 14:29
    • Помечено в качестве ответа KolOleRom 13 октября 2018 г. 14:54
    13 октября 2018 г. 14:22
  • Огромное спасибо,Сергей.Проблема в типе данных.Можно ли конвертировать сразу несколько чтобы не писать

    [Convert]::ToInt32($split[0])

    [Convert]::ToInt32($split[1])  и т.д. ?

    13 октября 2018 г. 15:10
  • у вас есть вагон вариантов решения вашей задачи и вы выбрали один из самых сложных реализаций

    без конвертации в [int] вы можете совершенно спокойно работать со строкой через -match '\d'.

    и дабы не проверять шаблон посимвольно вы можете сразу текст сверять с шаблоном (который не лишним было бы написать)


    The opinion expressed by me is not an official position of Microsoft

    13 октября 2018 г. 15:28
    Модератор
  • Вы можете использовать foreach:

    Foreach ([convert]::ToInt32($s) in $split) {
        # Ваш код. $s будет иметь тип Int
    }

    Либо воспользоваться советом Vector BCO

    • Помечено в качестве ответа KolOleRom 13 октября 2018 г. 17:00
    13 октября 2018 г. 16:00
  • в больших таблицах и при длинных номерах скрипт будет работать долго

    The opinion expressed by me is not an official position of Microsoft

    13 октября 2018 г. 17:52
    Модератор