133720
Goto Top

Powershell - Excel in HTML konvertieren

Hallo Leute.

Ich hoffe mir kann jemand helfen bei meinem winzigen Powershell-Problem.
Es wird ein Skript benötigt welches per Aufgabenplanung nach x-Minuten ausgeführt werden soll.
Excel-Datei von A nach B kopieren und entsprechend in HTML konvertieren damit der Webserver es wiedergeben kann.

Hier mein Anfang. Das Ding soll leicht verständlich sein sodass ein debuggen auch für andere möglich ist.

Remove-Item -Path 'C:\tmp\b\Mappe1.html';
Copy-Item -Path 'C:\tmp\a\Mappe1.xlsx' -Destination C:\tmp\b -Force;


Mir fehlt nur der Teil mit der Konvertierung. Das was ich im Netz gefunden habe, war nicht verständlich für mich.
Wenn jemand eine Idee hat bitte hier einmal posten.

Besten Dank.

Content-Key: 1685808336

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

Printed on: April 16, 2024 at 10:04 o'clock

Mitglied: 149569
149569 Jan 03, 2022, updated at Jan 04, 2022 at 08:29:13 (UTC)
Goto Top
# assembly für Konstanten laden
Add-Type -A Microsoft.Office.Interop.Excel
# Excel Instanz erzeugen / evt. User-Abfragen deaktivieren
$objExcel = New-Object -Com Excel.Application -Property @{Visible = $false;DisplayAlerts = $false}
# Excel Dokument öffnen
$wb = $objExcel.Workbooks.Open("C:\tmp\a\Mappe1.xlsx")  
# Dokument als HTML speichern
$wb.SaveAs("C:\tmp\b\Mappe1.html",[Microsoft.Office.Interop.Excel.XlFileFormat]::xlHtml)  
# Abfragen wieder einschalten sonst bekommt der User beim nächsten Verwenden von Excel keine Dialoge mehr präsentiert, weil die Einstellung permanent ist.
$objExcel.DisplayAlerts = $true
# Excel schließen und verwendete COM Ressourcen vom Excel Objekt freigeben
$objExcel.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
Mitglied: 133720
133720 Jan 03, 2022 at 18:48:05 (UTC)
Goto Top
Meine Fresse ging das schnell.
Damit ich nachvollziehen kann was die einzelnen Zeilen tun, habe ich diese onlien einmal recherchiert.
Vielleicht hast du die Musse mir kurz zu erklären was Zeile für Zeile tut. Man muss ja nicht dumm sterben ;)

Auf diesen Code wäre ich nie gekommen. Mir ist leider nicht ganz klar warum du so viele Variablen ($) erstellst.
Geht das auch ohne?

@149569, ich gehe mal davon aus das du voll im Thema bist. Besten dank dafür. wird auf dem Zielsystem getestet.

Bestend Dank dir !!!
Mitglied: 149569
149569 Jan 04, 2022 updated at 08:38:06 (UTC)
Goto Top
Zitat von @133720:

Auf diesen Code wäre ich nie gckommen. Mir ist leider nicht ganz klar warum du so viele Variablen ($) erstellst.
Geht das auch ohne?
Wenn du noch dümmer sterben willst 😆. Kürzer geht immer aber ob dir das beim Verständnis geholfen hätte, ich bezweifle es ...zumal die Variablen hier nun wirklich kein Moos fressen weil sie eh gleich wieder durch die Garbage Collection zerstört werden.
$objExcel = New-Object -Com Excel.Application -Property @{DisplayAlerts = $false}
$objExcel.Workbooks.Open("C:\tmp\a\Mappe1.xlsx").SaveAs("C:\tmp\b\Mappe1.html",44)  
$objExcel.DisplayAlerts = $true
$objExcel.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)

Kommentare zur ausführlichen Variante siehe Ergänzung in den Zeilen weiter oben.

ACHTUNG mit dem Taskplaner, hier sind ein paar Vorarbeiten nötig damit Office COM Skripte auch erfolgreich laufen können, siehe
Per Batch in Aufgabeplanung XLS in CSV umwandeln