ahoppe
Goto Top

Powershell Zeile in Excel schreiben

Hallo Zusammen

Ich arbeite an einigen Digitalisierungsmaßnahmen und brauche Hilfe.

Ich habe eine historisch gewachsene Excel Dateien mit Makro. Die bekommen wir in nicht sehr guter Qualität mehrmals die Woche und ich muss die Daten aus der Datei weiterverarbeiten.

Dazu lese ich per Powershell Script die XLSM Datei ein

$ExcelFile = Import-Excel -Path $Path_xlsm -WorksheetName "NÄM" -noHeader

Das Powershell Modul Import-Excel macht daraus dann eine Tabelle in der ich auf die Felder zugreifen kann, z.B.

$Excel_datas = $ExcelFile[12].P27

Das ist der Zugriff auf die 10. Zeile (Erste Zeile ist Tabellen Überschrift, zweite Zeile ist die 0) und die 27. Spalte

Da suche ich mir dann rund 10 Werte raus und möchte die dann in einer Zeile an eine bestehende Excel Datei (.xlsx) anhängen.
Ich hab das dann erst mit
$Excel_datas_array | Export-Excel -path $path -WorksheetName Tabelle1
versucht, aber er schreibt mir das dann untereinander.

Nun bin ich bei Open-ExcelPackage angekommen, verstehe hier aber den Syntax nicht.
Der Befehl InsertRow (Beispiel $ExcelPkg.Workbook.Worksheets["Tabelle1"].InsertRow($Excel_datas_array)) erweitert die Tabelle nur um eine Zeile, aber schreibt dort nichts rein.

Kann mir hier jemand mit nem kleinen Code Schnipsel weiterhelfen?
Einmal wie ich genau den Array dazu erstelle und wie ich das dann an Excel anhänge.

Vielen Dank schon mal

Content-ID: 5451533418

Url: https://administrator.de/contentid/5451533418

Ausgedruckt am: 05.11.2024 um 15:11 Uhr

JVKing
JVKing 18.01.2023 um 14:47:56 Uhr
Goto Top
Wenn ich das richtig verstehe willst du die Inhalte deines Arrays komplett in eine Zeile schreiben und nicht jeder wert in eine neue Zeile.
Eine Möglichkeit wäre es den den Arrayinhalt in eine Zeichenfolge zu konvertieren.
$string = ($Array -join ",")   
Sollte da helfen können

$string = ($Array -join ",")  
Add-ExcelRow -Path <path to excel file> -Workbookname <Excel workbook name> -Sheetname <Sheet name> -RowValues @{Column1 = $string}

M.f.G.
5175293307
Lösung 5175293307 18.01.2023 aktualisiert um 15:30:10 Uhr
Goto Top
Es geht auch ganz ohne externe zusätzliche Libraries über das Excel COM-Object:
Add-Type -AssemblyName Microsoft.Office.Interop.Excel
$objExcel = New-Object -Com Excel.Application -Property @{Visible = $true}
$wb = $objExcel.Workbooks.Open("D:\Data\Mappe1.xlsx")  
$ws = $wb.Sheets.Item(1)
$intRowNext = $ws.UsedRange.SpecialCells([Microsoft.Office.Interop.Excel.XlCellType]::xlCellTypeLastCell).Row + 1
$array = "Test1","Test2","Test3"  
$ws.Cells($intRowNext,"A").Resize(1,$array.Count).Value = $array  

Wurstel
ahoppe
ahoppe 19.01.2023 um 09:09:07 Uhr
Goto Top
Hi JVKIng
Vielen Dank für deine Idee
aber schreibt er dann nicht den ganzen String in eine Zelle?
Kanns leider erst morgen testen.


Auch Danke Wurstel. Das schöne ist ja an ImportExcel, das ich kein Excel auf dem Rechner brauche.
Werde ich trotzdem mal ausprobieren.

Danke euch beiden