Jump to content

EMF Datei in z.B. JPG umwandeln


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Habe eben versucht die von BOfH_666 genannte Zeile in das Script einzubauen. Schaut nun wie folgt aus:

$Excel = New-Object -Comobject Excel.Application 
$Excel.Visible = $true

$Dir = "C:\CADLINE\_Einzelteile"
$Filepath = ((gci $Dir -recurse | where name -like "*xlsm" | sort LastWriteTime -Descending)[0]).FullName



$Workbook = $Excel.Workbooks.Open($Filepath)

$Excel.Run("MCStudioExport")

$Excel.ActiveWorkbook.Save()
 
$Workbook.Close()

$excel.Quit()

Set-Location "C:\Program Files\IrfanView"
i_view64.exe "$($FilePath.Directory.FullName)*.emf" /convert="$($FilePath.Directory.FullName)*.bmp"

[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Remove-Variable -Name excel

Leider spuckt mir die Konsole den Fehler "die Benennung "i_view64.exe" wurde nicht als Name eines Cmlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen sie den Vorgang. Der Pfad ist definitiv richtig... An was könnte das liegen?

Screenshot.jpg

Link zu diesem Kommentar

ok, dann mach ma bitte

.\i_view64.exe "$($FilePath.Directory.FullName)*.emf" /convert="$($FilePath.Directory.FullName)*.bmp"

 

Im Zweifel würd ich einfach den vollen Pfad der ausführbaren Datei angeben.  ¯\_(ツ)_/¯

 

Noch ein Tipp: Wenn Du - aus welchem Grund auch immer - in ein spezielles Verzeichnis wechseln möchtest/musst, kannst Du mit "Push-Location -Path ...." in das gewünschte Verzeichnis wechseln und kommst dann mit "Pop-Location" wieder zurück zum ursprünglichen Verzeichnis. ;-) 

bearbeitet von BOfH_666
Link zu diesem Kommentar

Das mit dem Punkt (.) vorneweg hatte hat leider kein Erfolg. Habe es dann mit C:\Program Files\IrfanView\i_view64_exe versucht (habe den Pfad als Text kopiert), was auch nicht funktionierte.

Mit C:\Programme\IrfanView\i_view64_exe hatte ich dann Erfolg. Das Script lief ohne Fehlermeldung durch. Voller Vorfreude habe ich dann in den Ordner geschaut, in dem die Files als bmp abgespeichert werden sollten: Leider keine bmp-Files.

Habe dann mal versucht, eine bestimmte immer Ordner angegebene emf-Datei zu konvertieren: Das hat funktioniert. Heißt, da ist leider noch irgend etwas faul :traene:

Link zu diesem Kommentar

Moin,

 

spontan fällt mir dies auf:

 

i_view64.exe "$($FilePath.Directory.FullName)*.emf" /convert="$($FilePath.Directory.FullName)*.bmp"

 

Das Sternchen vor .bmp dürfte falsch sein. Hier geht es ja nicht um einen Auswahlfilter, sondern um eine konkrete zu schreibende Datei.

Da du in dem Fall ja IrfanView aufrufst, solltest du dessen Parameter nutzen. Die IrfanView-Hilfe gibt dir unter "Kommandozeilen-Optionen" und unter "Text/Muster-Optionen" zahlreiche Informationen dazu.

 

ich korrigiere mich. Laut den Beispielen in der Hilfe müsste es doch grundsätzlich gehen. Dann lass dir doch mal die zu konstruierenden Pfade als Text ausgeben, vielleicht ist da ja was falsch:

Write-Host "$($FilePath.Directory.FullName)*.emf"

 

Gruß, Nils

 

bearbeitet von NilsK
Link zu diesem Kommentar

Hi,

 

in $FilePath steht bereits die Eigenschaft "FullName", daher gibt es keine Eigenschaften ".Directory.FullName". Ebenfalls würde der "\" am Ende vor dem "*.emf" fehlen. Hier wäre ein Anfang:

 

$Dir = "C:\CADLINE\_Einzelteile"
$Filepath = Get-ChildItem -Path $Dir `
    -Recurse `
    -Filter *.xlsm |
        Sort-Object LastWriteTime -Descending |
            Select-Object -First 1

# ...
  
$EMFPath = Join-Path -Path $Filepath.Directory.FullName `
    -ChildPath "*.emf"
$BMPPath = Join-Path -Path $Filepath.Directory.FullName `
    -ChildPath "*.bmp"

 

Gruß

Jan

bearbeitet von testperson
Link zu diesem Kommentar
  • Beste Lösung
vor 3 Stunden schrieb testperson:

in $FilePath steht bereits die Eigenschaft "FullName", daher gibt es keine Eigenschaften ".Directory.FullName".

 

Jan hat Recht. Mein Fehler. Sorry. Ich hatte das ").FullName" beim "Zusammenbauen" des Codes wegegelassen und hatte deshalb noch das intakte Objekt zum Weiterarbeiten zur Verfügung.

 

Hier also nochmal mein Vorschlag komplett, wie er eigentlich funktionieren sollte:

 

$Excel = New-Object -Comobject Excel.Application 
$Excel.Visible = $true

$Dir = 'C:\CADLINE\_Einzelteile'
$Filepath = 
    (Get-ChildItem $Dir -recurse | 
        Where-Object name -like "*xlsm" | 
            Sort-Object LastWriteTime -Descending)[0]

$Workbook = $Excel.Workbooks.Open($Filepath.FullName)
$Excel.Run("MCStudioExport")
$Excel.ActiveWorkbook.Save()
$Workbook.Close()
$excel.Quit()

& 'C:\Program Files\IrfanView\i_view64.exe' "$($FilePath.Directory.FullName)\*.emf" /convert="$($FilePath.Directory.FullName)\*.bmp"

[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Remove-Variable -Name excel

 

vor 4 Stunden schrieb wethlo:

Mit C:\Programme\IrfanView\i_view64_exe hatte ich dann Erfolg. Das Script lief ohne Fehlermeldung durch. Voller Vorfreude habe ich dann in den Ordner geschaut, in dem die Files als bmp abgespeichert werden sollten: Leider keine bmp-Files.

 

Hmmm ... ich würde dabei auch eine Fehlermeldung erwarten, aber auf der anderen Seite auch nicht, dass es funktioniert.  ;-)

Vielleicht versuchst Du einmal die Kommandozeile "manuell" einzugeben .... also 

 

& 'C:\Program Files\IrfanView\i_view64.exe' "C:\CADLINE\_Einzelteile\*.emf" /convert="C:\CADLINE\_Einzelteile\*.bmp"

 

Link zu diesem Kommentar

Vielen lieben Dank für deine Hilfestellung! Mit deiner finalen Änderung läuft nun alles hervorragend durch. Habe noch aus den Einstellungen von IrfanView zwei Einstellungen hinzugefügt, um die EMF's in schwarz-weiße BMP's umzuwandeln. Der Finale Code schaut nun folgendermaßen aus:

$Excel = New-Object -Comobject Excel.Application 
$Excel.Visible = $true

$Dir = 'C:\CADLINE\_Einzelteile'
$Filepath = 
    (Get-ChildItem $Dir -recurse | 
        Where-Object name -like "*xlsm" | 
            Sort-Object LastWriteTime -Descending)[0]

$Workbook = $Excel.Workbooks.Open($Filepath.FullName)
$Excel.Run("MCStudioExport")
$Excel.ActiveWorkbook.Save()
$Workbook.Close()
$excel.Quit()

& 'C:\Programme\IrfanView\i_view64.exe' "$($FilePath.Directory.FullName)\*.emf" /gray /bpp=1 /convert="$($FilePath.Directory.FullName)\*.bmp"

[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Remove-Variable -Name excel

 

Link zu diesem Kommentar
  • 2 Wochen später...

Jetzt muss ich doch nochmals nachhaken. Mir ist eben noch ein kleiner Bug aufgefallen. Es wird, wenn ein neuer Ordner erstellt wurde die aktuellste Excel-Datei gesucht und die csv-Datei dann exportiert. Leider nimmt er jedoch für die Funktion der Konvertierung von emf ins bmp-Format nicht den gleichen Ordner. Er nimmt den letzten Ordner, in dem die Dateien abgespeichert wurden. Hat hierfür vielleicht jemand eine Lösung?

Link zu diesem Kommentar

Das Skript sucht ja unter C:\CADLINE\_Einzelteile die neueste .xlsm-Datei und aktiviert das darin enthaltene Makro. Ich vermute, dass dieses Feature für .emf-Dateien noch nicht implementiert ist… Prinzipiell soll das genauso gehen wie mit den Excel-Dateien. Den Ordner suchen, in denen die neuesten emf-Dateien drin sind und gut ist…

bearbeitet von wethlo
Link zu diesem Kommentar
vor 24 Minuten schrieb wethlo:

Ich vermute, dass dieses Feature für .emf-Dateien noch nicht implementiert ist…

 

Wir brauchen da ja nix vermuten ...  im Code wird der Ordner als "Input- und Output-Ordner" für die IrfanView-Kommandozeile benutzt, in dem die aktuellste Excel-Datei gefunden wurde.

Im Zweifel kannst Du Dir diesen Ordner auch einfach ausgeben lassen. Einfach z.B. vor der Zeile mit dem IrfanView-Aufruf den Variablen-Inhalt einmal auf der Konsole ausgeben:

$($FilePath.Directory.FullName)

 

Wenn Du ein anderes Verhalten erwartest, müsstest Du das im Code entsprechend umsetzen.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...