2017-10-23 3 views
1

Ich habe Code aus einer Datei aktualisiert, die mehrere Blätter aus einer Excel-Datei in CSV-Dateien exportiert. Ich muss ohne die ersten 6 Zeilen exportieren. Sie alle haben das gleiche Format.PowerShell-Export in CSV-Offset-Zeilen

Wo kann ich einen Offset für jede Registerkarte anwenden?

function ExportWSToCSV { 
    Param(
     [Parameter(Position=0, Mandatory=$true)] [string]$excelPath, 
     [Parameter(Position=1, Mandatory=$true)] [string]$excelFileName, 
     [Parameter(Position=2, Mandatory=$true)] [string]$excelFormat, 
     [Parameter(Position=3, Mandatory=$true)] [string]$csvPath 
    ) 

    Write-Output "Your cvs files are located " $csvPath 

    $excelFile= $excelPath + $excelFileName + $excelFormat 
    $E = New-Object -ComObject Excel.Application 
    $E.Visible = $false 
    $E.DisplayAlerts = $false 
    $wb = $E.Workbooks.Open($excelFile) 
    foreach ($ws in $wb.Worksheets) { 
     $n = $excelFileName + "_" + $ws.Name 
     $ws.SaveAs($csvPath + $n + ".csv", 6) 
    } 
    $E.Quit() 
} 
+0

Löschen Sie die ersten 6 Zeilen aus jedem Blatt vor dem Export, dann die Änderungen verwerfen, bevor Sie die Arbeitsmappe schließen. –

+0

Könnten Sie mir ein Beispiel dafür geben? Ich möchte es in demselben Code ausführen. Danke für die schnelle Antwort – user2181700

Antwort

2

Sie können die integrierte Methode Delete() verwenden. Dies ist verfügbar für die EntireRow property, die Teil der Range object ist.

Wechsel:

foreach ($ws in $wb.Worksheets) { 
    $n = $excelFileName + "_" + $ws.Name 
    $ws.SaveAs($csvPath + $n + ".csv", 6) 
} 

An:

foreach ($ws in $wb.Worksheets) { 
    $ws.range("A1:A6").EntireRow.Delete() 
    $n = $excelFileName + "_" + $ws.Name 
    $ws.SaveAs($csvPath + $n + ".csv", 6) 
} 
+0

Funktioniert gut. Ich schaute auf einen anderen Weg, der gewunden wurde Danke – user2181700