Как удалить колонку с файлами Excel в Powershell? - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу удалить много файлов Excel в папке одновременно. Поэтому я пишу код ниже, но когда он работает, терминал вышел из системы Delete Method of Range class failed ошибка выскакивает. и, что еще более запутанно, процесс удаления на некоторых листах выполняется успешно. Я думаю, это вызывает от не может сделать выпуск объекта листа PowerShell хорошо.

Кто-нибудь может мне помочь? С уважением.


# Launch Excel
$excel = New-Object -ComObject Excel.Application -Property @{Visible = $false} 
$baseDir = Convert-Path $(Split-Path $MyInvocation.InvocationName -Parent)
$files = Get-ChildItem -Recurse | ? { $_.Extension -eq ".xlsx" }  

# "${baseDir}\{$_.name}"
# Open Book
$files| 
%{
    Write-Host $_.Name
    $excel.Workbooks.Open("${baseDir}\" + $_.name) | %{
        $_.Worksheets | %{
            # Delete Column
            # $_.Activate
            Write-Host $_.Name

            #$_.Columns.Item("J").Delete()
            #$_.Columns("J:J").EntireColumn.Delete()
            #$_.Columns.item(3).Insert()
            #$_.Range("J:J").Delete()
            $_.Columns("J").Delete()
        }
        $_.Save()
    }
}

# Excel 
$excel.Quit()
\[System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($excel) | Out-Null


1 Ответ

2 голосов
/ 13 февраля 2020

Если вы хотите удалить столбец J на ​​каждом листе каждой книги, это может помочь

$files| % {
    # Prints name of File
    Write-Host $_.Name

    # There is always one workbook. 
    $workbook = $excel.Workbooks.Open($_.FullName) # FullName has the complete path.
    $workbook.Worksheets | % {
        # prints name of each worksheet
        Write-Host $_.Name

        # Deletes the column
        $_.Range("J:J").EntireColumn.Delete() # prints True if successful.

        # Or you can use the above statement in an IF statement.
        if ($_.Range("J:J").EntireColumn.Delete()) {
           Write-Host "Column J Deleted successfully"
        } 
        # else print it didnt for $_.Name worksheet.
    }
    $workbook.Save()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...