Мой цикл Powershell не остановит итерацию последней строки данных - PullRequest
0 голосов
/ 03 ноября 2018

Здравствуйте. У меня есть скрипт Powershell, который раньше нормально работал с моими электронными таблицами Excel, но теперь, похоже, он неисправен, и я не могу найти ответ.

сокращенная версия кода

$pastecounter= 2
$intRowCount = $WS1.usedRange.Rows.Count       
for($i=6; $i -le $intRowCount; $i++)
{
    $startRow = $i

    <A lot of work being done to each row>

    $WS1.Range("A"+$startRow+":H"+$startRow).Copy()
    $WS2.Range("A"+$pastecounter+":H"+$pastecounter).Pastespecial()
    $pastecounter++ 
    $i=$j-1
}

Это перебирает мои строки, выполняет ли работа и вставляет построчно в новую рабочую таблицу и используется для работы.

Я начал выполнять это сегодня и, когда он доберется до последнего ряда моих данных, он начнет бесконечно вставлять последний ряд.

Я повторил все переменные, которые правильно выводятся до последней строки, и я попытался добавить разрыв, но внутри цикла for он разрывается после вставки одной строки, а вне цикла for это не решает проблема.

Теперь я могу думать только о том, что это может быть проблема с таблицей Excel. но я удалил все пустые строки и очистил форматирование в Excel без посторонней помощи.

Есть ли здесь какие-либо эксперты по Excel ИЛИ Powershell, которые могут знать об устранении неполадок?

Спасибо!

1 Ответ

0 голосов
/ 03 ноября 2018

На первый взгляд, проблема заключается в том, как вы увеличиваете цикл. У меня так много вопросов о том, почему вы работаете с такими вещами, как вы, но это должно помочь вам направить вас в правильном направлении ... Для устранения неполадок выполните следующее:

$pastecounter= 2
$intRowCount = $WS1.usedRange.Rows.Count       
for($i=6; $i -le $intRowCount; $i++)
{
    # // added
    Write-Host "Is `$i lessOrEqual to `$inRowCount?" -f Yellow -NoNewline
    if($i -le $intRowCount){
        Write-Host " Yes" -f Green
    } else {
        Write-Host " No"  -f Red
    }
    Write-Host ("`$i = {0}" -f $i) -f Cyan
    Write-Host ("`$intRowCount = {0}" -f $intRowCount) -f Cyan
    # // added

    $startRow = $i

    <A lot of work being done to each row>

    $WS1.Range("A"+$startRow+":H"+$startRow).Copy()
    $WS2.Range("A"+$pastecounter+":H"+$pastecounter).Pastespecial()
    $pastecounter++ 
    $i=$j-1
}
...