Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hallo miteinander,
ich erlebe das Phänomen, dass die Grafik eines QV-11-Diagramms nach dem Export nach Excel (via Makro) dort unscharf erscheint.
Das Problem ist anscheinend, dass bei diesem Prozess die Grafik in Excel auf 60% ihrer Originalgröße herunterskaliert wird und ich weiß nicht, wie und wo das programmiert ist. Dadurch entsteht der Unschärfeeindruck. Wenn man in Excel den Skalierungsfaktor wieder auf 100% setzt, wirkt die Grafik scharf. Nun muss ich das nur noch via Makro hinbekommen, das ist mein Problem. Vielleicht hat jemand eine Idee?
1. Mit diesem Scriptblock kopiere ich die Grafik des QV11-Diagramms CH22 nach Excel in die Zelle A5:
ActiveDocument.GetSheetObject("CH22").GetSheet().Activate()
ActiveDocument.GetApplication.WaitForIdle
ActiveDocument.GetSheetObject("CH22").CopyBitmapToClipboard()
myWorksheet.Paste myWorksheet.Range("A5")
2. So sieht das dann z. B. aus:
3. Mit diesem Makro skaliert man in Excel die Grafik auf 100%:
ActiveSheet.Shapes.Range(Array("Picture 2")).Select
Selection.ShapeRange.ScaleHeight 1, msoFalse, msoScaleFromTopLeft
4. In QV muss msoFalse mit -1 und msoScaleFromTopLeft mit 0 ersetzt werden.
Also in etwa so:
ActiveDocument.GetSheetObject("CH22").GetSheet().Activate()
ActiveDocument.GetApplication.WaitForIdle
ActiveDocument.GetSheetObject("CH22").CopyBitmapToClipboard()
myWorksheet.Paste myWorksheet.Range("A5")
ActiveSheet.Shapes.Range(Array("Picture 2")).Select
Selection.ShapeRange.ScaleHeight 1, -1, 0
Und nun bleibt das Skript an dieser Stelle hängen.
Vermutlich muss die Syntax anders lauten.
Hat jemand eine Idee?
Danke
Jens
Hallo Marcus,
ich hab's, nun sind die Grafiken scharf. Der Trick liegt im PastSpecial "Bitmap".
Vielen, vielen Dank für deinen Hinweis.
Man sollte diese Technik auch auf Logos (also Grafiken im allgemeinen) anwenden, auch diese werden schärfer.
Hier ein Beispiel. Links die alte Technik, rechts mit PaseSpecial "Bitmap":
Hier ist die Lösung, wie es gut funktioniert
ActiveDocument.GetSheetObject("CH22").GetSheet().Activate()
ActiveDocument.GetApplication.WaitForIdle
ActiveDocument.GetSheetObject("CH22").CopyBitmapToClipboard()
myWorksheet.Range("A5").Select
myWorksheet.PasteSpecial "Bitmap"
Ein erfolgreichen neues Jahr 2018 für dich, Marcus.
Guß, Jens
Hallo Jens,
ich glaube, hier gibt es verschiedene Ansätze. Zum Einen den, dass der Zoom-Faktor in den Benutzer-Einstellungen auf 100% gesetzt wird (ergibt bei mir aber trotzdem ein leicht unscharfes Bild) und/oder dass man für solche Export/Kopier/Druck-Jobs spezielle Objekte (vielleicht in einem versteckten Sheet) verwendet und nicht die eigentlichen User-Objekte (das löst zwar nicht alle Probleme, man ist aber schon deutlich flexibler).
Insgesamt denke ich, dass die Probleme aber Excel-seitig sind, da ein kopieren nach Paint und direkt von dort nach Excel einwandfeei funktioniert.
Ein anderer Ansatz könnte sein, dass Objekt nicht zu kopieren, sondern zu exportieren und dann mit weiteren Routinen wieder nach Excel zu kopieren oder dort auch zu verlinken.
Zu dem Code von oben probiere mal:
myWorksheet.Shapes.Range(Array("Picture 2")).ShapeRange.ScaleHeight 1, -1, 0
- Marcus
Hallo Marcus,
vielen Dank für deine Ideen.
1. Deinen Tipp, beide Zeilen zusammenzuschalten, habe ich sogleich geprüft.
Leider klappt es damit nicht, das Skript bleibt nun bei dieser Zeile hängen:
myWorksheet.Shapes.Range(Array("Picture 2")).ShapeRange.ScaleHeight 1, -1, 0
Es scheint keine erlaubte Syntax zu sein. Leider teilt einem QlikView ja nicht mit, was nicht in Ordnung ist.
2. Nun würde ich gerne den vorkonfigurierten Skalierungsfaktor 60% auf 100% erhöhen, um selbst mal zu sehen, ob es wenigstens ein bisschen Qualität bringt. Allerdings kann ich mir nicht vorstellen, dass das in Excel konfiguriert ist. Grund: Wenn ich mit einem Snippingtool einen Screenshot in die Zwischenablage kopiere und von dort aus in Excel einfüge, ist diese Grafik auf 100 % skaliert und scharf. Daraus würde ich schließen, dass die 60% in QV konfiguriert sind. Oder sehe ich das falsch? Nun finde ich in QV hierzu lediglich dieses Setting: Benutzereinstellungen - Exportieren - Zoom beim Export: 100 % (so steht er schon bei mir, dieser Schalter ist es also nicht).
3. Dass es auch gehen soll über den Umweg nach Paint, habe ich schon irgendwo gelesen. Kommt mir zu kompliziert vor. Aber vielleicht geht es nur so. Hast du ein funktionierendes Beispiel?
Vielen Dank, Marcus, du bist uns allen immer wieder eine große Hilfe!
Guten Rutsch nach 2018.
Jens
Hallo Jens,
bei dem Code habe ich nur den Bezug zum Excel-Sheet angepasst und den Umweg über Select - Selection rausgenommen, da dass manchmal Probleme bereitet. Ich bin mir hier aber nicht sicher, dass der Rest vom Code auch passt - da google mal nach ShapeRange.ScaleHeight für Anwendungs-Beispiele und zeichne das mal in Excel mit dem Makro-Rekorder auf. Dann weiß man, wie das welche Methoden, Parameter und Objekte wirklich angesprochen werden und eine Anpassung hin zur VBS-Syntax sollte relativ einfach ausfallen.
Eine Größen-Skalierung tritt bei mir selbst nicht auf, keine Ahnung, ob dass noch irgendwo in Qlik oder Excel konfiguriert sein könnte. Solche Sachen könnten aber auch durchaus versionsabhängig sein. So richtig daran glaube ich aber nicht, denn wenn ich nicht einfach auf "Einfügen" klicke, sondern auf "Inhalte einfügen" und dann auf Bitmap (kommt eine Warnmeldung bezüglich der möglichen Größe der Grafik), dann wird die Grafik auch scharf angezeigt.
Insofern denke ich, dass das Problem mit einer anderen Einfüge-Methode gelöst werden könnte, schaue dazu mal zu PasteSpecial: https://www.google.de/search?q=vba+paste+special+bild.
Schöne Grüße
Marcus
Hallo Marcus,
ich hab's, nun sind die Grafiken scharf. Der Trick liegt im PastSpecial "Bitmap".
Vielen, vielen Dank für deinen Hinweis.
Man sollte diese Technik auch auf Logos (also Grafiken im allgemeinen) anwenden, auch diese werden schärfer.
Hier ein Beispiel. Links die alte Technik, rechts mit PaseSpecial "Bitmap":
Hier ist die Lösung, wie es gut funktioniert
ActiveDocument.GetSheetObject("CH22").GetSheet().Activate()
ActiveDocument.GetApplication.WaitForIdle
ActiveDocument.GetSheetObject("CH22").CopyBitmapToClipboard()
myWorksheet.Range("A5").Select
myWorksheet.PasteSpecial "Bitmap"
Ein erfolgreichen neues Jahr 2018 für dich, Marcus.
Guß, Jens