Jump to content

wethlo

Members
  • Gesamte Inhalte

    20
  • Registriert seit

  • Letzter Besuch

Fortschritt von wethlo

Explorer

Explorer (4/14)

  • Engagiert
  • Erste Antwort
  • Erster eigener Beitrag
  • Eine Woche dabei
  • Einen Monat dabei

Neueste Abzeichen

0

Reputation in der Community

  1. 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…
  2. 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?
  3. 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
  4. 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
  5. 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?
  6. Das schöne an dem Etikettierdrucker ist, dass er die Etiketten selbstständig druckt und auf der zu verschachtelnden Platte selbst positioniert Vielen Dank für die Hilfeleistung. Werde ich versuchen in das Script einzubauen und die Kommandozeilenargumente suche ich mir natürlich in der Hilfe!
  7. Ich versuche es mal in kurze Worte zu fassen für was ich das benötige: Wir exportieren aus unserer CAD-Software fertige CNC-Programme. Zusätzlich wird automatisch von jedem zu exportierenden Teil ein EMF-Bild in den selben Ordner mit selbem Namen gespeichert. Dieses EMF-Bild benötige ich für die im Nachgang erstellten Nesting-Programme. Hier werden viele Einzelteile aus einer kompletten Platte herausgenestet. Jedes Teil bekommt ein Label. Auf dieses Label kommt das besagte Bild. Allerdings geht dies nicht im EMF-Format sondern vorzugsweise im BMP-Format. Mit nachfolgendem Skript wird zusätzlich noch ein Makro in einer Excel-Datei ausgelöst (der Einfachheit halber wird nach der aktuellsten Excel-Datei in einem Verzeichnis gesucht), welches mir eine CSV-Datei exportiert, welche ich für den selben Prozess benötige. Diesem Script sollte nun das Konvertieren der EMF-Files (können 1 bis unendlich viele sein) in BMP-Files hinzugefügt werden. Die EMF-Dateien sind dann auch im selben Verzeichnis wie die Excel-Datei. Habe mir IrfanView heruntergeladen und mal manuell versucht, die Einzelbilder umzuwandeln, was sehr gut funktioniert hat. Habe allerdings die Einstellung auf Schwarz/Weiß gestellt, damit die Dateigröße nicht exorbitant groß wird. Der Etikettendrucker kann sowieso nur S/W. Könnte man dem Skript das Umwandeln hinzufügen oder ist das utopisch? Da ich Schreinermeister und Lehrer für CAD/CNC-Technik bin, habe ich hiervon leider nicht viel bis keine Ahnung und dachte, dass mir hier jemand helfen könnte. Der ganze Prozess bildet im Prinzip einen kompletten digitalen Workflow einer modernen Schreinerei ab. Anbei das bisher funktionierende Script, welches das Makro in der aktuellsten Excel-Datei aus dem Verzeichnis auslöst: $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() [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) Remove-Variable -Name excel
  8. Wie in meiner ersten Frage schon erläutert ist das Bildformat EMF für die Software von unserem Etikettendrucker nicht verwendbar. Ich habe die Software nun soweit optimiert, dass ich die zweite Datei mit der Erweiterung (180) nicht mehr benötige, da ein Bild im BMP-Format um 180° gedreht werden kann. Was allerdings notwendig ist, wäre das Konvertieren von mehreren EMF-Files in das zu favorisierende BMP-Format... Der Dateiname kann/soll gleich bleiben.
  9. Ja hab es versucht... Leider kommt folgende Antwort: Der Typ [ImageFormat] wurde nicht gefunden. In C:\Users\wethlo_\Desktop\umwandeln.ps1:6 Zeichen:5 + [ImageFormat] + ~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (ImageFormat:TypeName) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound Der Code sieht nun so aus: function ConvertTo-Image { [CmdletBinding()] param( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true)] $Files, [ImageFormat] [Parameter(Mandatory = $true, Position = 1)] $Format ) begin { Write-Verbose "Conversion start" } process { function Get-ImageFormat { param ($format) switch ($format) { "MemoryBMP" { [System.Drawing.Imaging.ImageFormat]::MemoryBMP } "Bmp" { [System.Drawing.Imaging.ImageFormat]::Bmp } "Emf" { [System.Drawing.Imaging.ImageFormat]::Emf } "Wmf" { [System.Drawing.Imaging.ImageFormat]::Wmf } "Jpeg" { [System.Drawing.Imaging.ImageFormat]::Jpeg } "Png" { [System.Drawing.Imaging.ImageFormat]::Png } "Gif" { [System.Drawing.Imaging.ImageFormat]::Gif } "Tiff" { [System.Drawing.Imaging.ImageFormat]::Tiff } "Exif" { [System.Drawing.Imaging.ImageFormat]::Exif } "Icon" { [System.Drawing.Imaging.ImageFormat]::Icon } Default { } } } $formatType = Get-ImageFormat $Format $fullName = $input.FullName $image = [System.Drawing.Image]::FromFile($fullName); $filePath = [IO.Path]::ChangeExtension($fullName, ".$($formatType.ToString().ToLower())"); $image.Save($filePath, $formatType); $image.Dispose(); } end { Write-Verbose "Conversion done" } } $ordner = "C:\Users\wethlo_\Desktop\Test" Get-ChildItem -Path $ordner -Filter "*.emf" | ConvertTo-Image -Format Jpeg
  10. Guten Abend! Vielen Dank für den Tipp! Werde ich mir anschauen. Bin allerdings im Netz noch auf nachfolgenden Code gestoßen... Kann mir jemand sagen, wie ich wo den Pfad des Ordners angeben kann, in dem die EMF-Dateien gespeichert sind? So wie ich den Code interpretiere, kann dieser genau das, was ich benötige: Und zwar EMF-Dateien in Jpeg umwandeln... enum ImageFormat { MemoryBMP; Bmp ; Emf; Wmf; Jpeg; Png; Gif; Tiff; Exif; PhotoCD; Icon } function ConvertTo-Image { <# .SYNOPSIS Converts input to an image .DESCRIPTION Converts input file to an image. Supported output types: MemoryBMP, Bmp , Emf, Wmf, Jpeg, Png, Gif, Tiff, Exif, PhotoCD, Icon .PARAMETER Files Input files .PARAMETER Format Output Image format type .EXAMPLE Get-ChildItem C:\test -Filter "*.gif" | ConvertTo-Image -Format Png Converts all gif animations from location 'C:\test' into png files #> [CmdletBinding()] param( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true)] $Files, [ImageFormat] [Parameter(Mandatory = $true, Position = 1)] $Format ) begin { Write-Verbose "Conversion start" } process { function Get-ImageFormat { param ($format) switch ($format) { "MemoryBMP" { [System.Drawing.Imaging.ImageFormat]::MemoryBMP } "Bmp" { [System.Drawing.Imaging.ImageFormat]::Bmp } "Emf" { [System.Drawing.Imaging.ImageFormat]::Emf } "Wmf" { [System.Drawing.Imaging.ImageFormat]::Wmf } "Jpeg" { [System.Drawing.Imaging.ImageFormat]::Jpeg } "Png" { [System.Drawing.Imaging.ImageFormat]::Png } "Gif" { [System.Drawing.Imaging.ImageFormat]::Gif } "Tiff" { [System.Drawing.Imaging.ImageFormat]::Tiff } "Exif" { [System.Drawing.Imaging.ImageFormat]::Exif } "Icon" { [System.Drawing.Imaging.ImageFormat]::Icon } Default { } } } $formatType = Get-ImageFormat $Format $fullName = $input.FullName $image = [System.Drawing.Image]::FromFile($fullName); $filePath = [IO.Path]::ChangeExtension($fullName, ".$($formatType.ToString().ToLower())"); $image.Save($filePath, $formatType); $image.Dispose(); } end { Write-Verbose "Conversion done" } }
  11. Hallo zusammen! Bin Lehrer für CNC-Technik und habe leider von Powershell etc. leider keine bis fast keine Ahnung. Trotzdem bin ich auf der Suche nach einem Script, welches mir emf-Dateien (Anzahl X) in z.B. jpg umwandelt (wenn die Transparenz der Bilddatei verloren geht ist das egal). Die Traumvorstellung zusätzlich wäre, dass dann diese jpg-Datei automatisch um 180 Grad gedreht wird und mit einer Erweiterung des Dateinamens (z.B. (180)) im selben Ordner abgespeichert wird. Geht so etwas grundsätzlich oder muss ich mich hier anders helfen?
  12. Habe den Code der Einfachheit halber und meiner möglichen Verständnissen wieder etwas vereinfacht und die zwei gewünschten "Replacec" ergänzt, welche nun auch funktionieren (hat zu kleinen Erfolgserlebnissen geführt;-) ).. Die von BofH_666 geschriebene und bis dato funktionierende Ergänzung funktioniert jetzt leider nicht mehr. Poste den Code mal in der Hoffnung, dass jemand Abhilfe leisten kann. $original_file = 'C:\Users\theo_\Documents\Seite_Rechts_2_1.xcs' $destination_file = 'C:\Users\theo_\Documents\Seite_Rechts_2_1.xcs' (Get-Content $original_file) | Foreach-Object { $_ -replace "SetWorkpieceSetupPosition\(0.0000, 0.0000, 0.0, 0.0\)","SetWorkpieceSetupPosition(5.0000, 5.0000, 0.0, 0.0)" } | Set-Content $destination_file (Get-Content $original_file) | Foreach-Object { $_ -replace "SetApproachStrategy\(true, false, -1\)","SetApproachStrategy(false, true, 2)" } | Set-Content $destination_file (Get-Content $original_file) | Foreach-Object { $_ -replace "SetRetractStrategy\(true, false, -1, 0\)","SetRetractStrategy(false, true, 2, 0)" } | Set-Content $destination_file $Ergaenzung = @' CreateNullOperation("Wegfahrschritt", 2000.0000, 0.0000, 1); ResetPneumaticHood(); ResetApproachStrategy(); ResetRetractStrategy(); '@ $ReplacedContent[0..($ReplacedContent.Length - 6)] + $Ergaenzung + $ReplacedContent[($ReplacedContent.Length - 5)..($ReplacedContent.Length)] | Set-Content -Path $destination_file -Force
  13. Guten Morgen! Wie gesagt, hier nochmals mein recht herzlichen Dank für die Lösung meines Problems! Habe gestern Abend noch versucht, zwei weitere für mich hilfreiche "Replacec" in dein programmiertes Skript zu schreiben, wobei ich allerdings kläglich gescheitert bin und die von Dir angesprochenen Frustrationen auslösten Den Rat mit den Video-Anleitungen über PowerShell nehme ich auf jeden Fall an und werde mich dahingehend weiterbilden. Falls jemand einem momentan noch in Sachen PowerShell überforderten Lehrer unter die Arme greifen möchte und die Ernte ein paar dankbare Schüler wären hier die zwei Replacec $_ -replace "SetApproachStrategy(true, false, -1)","SetApproachStrategy(false, true, 2) $_ -replace "SetRetractStrategy(true, false, -1, 0)","SetRetractStrategy(false, true, 2, 0) Danach werde ich selber versuchen, dieses Skript in das vom CAD-Hersteller bereitgestellte Skript einzubauen, in der Hoffnung, dass ich das hin bekomme
  14. Genial, es funktioniert alles so wie es sein sollte Das mit dem Extra-Dreh wäre nicht notwendig gewesen, die Werte sind quasi bei jedem Programm so, dass ich 5 in x und y brauche und die zwei beim 5. Argument. Respekt vor deinen Fähigkeiten!!!
  15. Selbstverständlich! Mach ich natürlich gerne! Vielleicht kann ich Dich mal unterstützen ein cnc-Programm zu schreiben;-)
×
×
  • Neu erstellen...