[Excel] Grafik kopieren = Weißer Rand

Nightmare85

Captain
Registriert
Apr. 2007
Beiträge
3.643
Hallo,

ich nutze Excel 2007 und musste mehrmals feststellen, dass beim Kopieren von Grafiken aus Excel, immer ein weißer Rand erzeugt wird, obwohl kein Rand in deren Eigenschaften definiert ist.
Diesen Rand sieht man in Excel (logischerweise) nicht, aber nach dem Einfügen in ein beliebiges Foto-Programm.

Komischerweise ist es nicht mal ein echter Rand, sondern nur ganz links und ganz oben.
Speziell bei dunklen Bildern fällt das sofort negativ auf.

Ich habe mehrere Grafiken übereinander gelegt, positioniert und mit WordArt versehen.
Es sieht sehr gut aus, die Grafiken lassen sich prima ändern und kopieren geht auch super einfach... wenn da nicht dieser seltsame Rand wäre.

Ist das irgendein Bug?
Lässt sich das irgendwie lösen?

Grüße
 
Ich kann zwar nicht ganz folgen, aber wäre ein Screenshot mit dem Snipping Tool vlt. die Lösung?
 
  • Gefällt mir
Reaktionen: Nightmare85
Ich habe das soeben verifiziert: Excel 2019 versieht, wie die Vorversionen Excel 2007, 2010 und 2016, Grafiken mit einem dünnen weißen Rand.
 
  • Gefällt mir
Reaktionen: Nightmare85
Ja, dass ist mir auch schon mal negativ aufgefallen, als ich Diagramme aus Excel heraus exportieren und automatisch schneiden wollte ...
Dafuer hatte ich mir ein Makro erstellt (PDF export, PDF geschnitten und zusaetzlich als PNG gespeichert).
Bei Interesse koennte ich das Makro mal rauskramen.
 
  • Gefällt mir
Reaktionen: Nightmare85
Ich danke euch für das Feedback.
Habe es jetzt so gemacht, dass die Abmessungen 1921x1081 betragen.
Mithilfe eines AHK-Skripts und einer Irfanview-Batchdatei werden links und oben je 1 Pixel abgeschnitten.

Schade, dass man sich wegen so einer Lappalie mehrere Skripte bauen muss.

Vielleicht wird es ja in Excel 2030 behoben.

Grüße
 
Mich würde brennend das IrfanView Batch zum Rand abschneiden interessieren, ich steh mit der Doku dort ein bisschen auf Kriegsfuß. Andererseits ist irfanview bei vielen meiner AHK-Skripte per FILEINSTALL mit von der Party (z. B. um Bildschirmabzüge in eine Datei zu schieben). Besten Dank im voraus...
 
Klar, kein Problem:
IrfanView-Batch:
Code:
i_view64.exe C:\pfad\bild.png /crop=(1,1,1920,0,0) /convert=C:\pfad\bild.png

AHK-Funktion (Setzt #include Gdip_All.ahk voraus):
Code:
Rand_Abschneiden() ; Schneidet weißen Rand von der Excel-Grafik ab
{
  datei := "pfad\bild.png" ; Verzeichnis, in dem die Bilder gespeichert werden sollen
  xl := ComObjActive("Excel.Application") ; Anbindung an die aktive Excel-Instanz
  ws := xl.ActiveSheet ; Anbindung an das aktive Arbeitsblatt
  pToken := Gdip_Startup() ; Gdip-Instanz starten
  ws.range("A1:P37").copy ; Alles in diesem Bereich kopieren
  pBitmapFile := Gdip_SaveBitmapToFile(pBitmap := Gdip_CreateBitmapFromClipboard(), datei) ; Bild aus Zwischenlage in Verzeichnis erstellen
  Gdip_DisposeImage(pBitmap) ; Bild aus Speicher entfernen
  Gdip_Shutdown(pToken) ; Gdip-Instanz schließen
  Sleep, 200 ; Kurze Pufferzeit
  Run, C:\Program Files\Foto\IrfanView\Zuschneiden.bat, C:\Program Files\Foto\IrfanView, hide ; Weißen Rand entfernen
}

Grüße
 
  • Gefällt mir
Reaktionen: halwe
Nur superblöd gefragt: diese Linie ist nicht zufällig ein Rand ≡ Randlinie die aus welchen Gründen auch immer 1px dick ist und Weiß?
CN8
 
Standardmäßig haben wohl Diagramme eine Rahmenlinie.
Da du aber von Grafiken sprichst: was genau meinst du damit? Bilder die vorher in Excel eingefügt wurden, oder doch einfach in Excel erstellte Diagramme?
Erstere haben keinen Rand beim Rauskopieren, Diagramme wie gesagt schon.
 
Besten Dank Nightmare85! Auch für das AHK-Teil, da sehe ich gleich, wie du das eingebunden hast.
Ergänzung ()

ella_one schrieb:
Ich habe das soeben verifiziert: Excel 2019 versieht, wie die Vorversionen Excel 2007, 2010 und 2016, Grafiken mit einem dünnen weißen Rand.
Seltsam übrigens. Ich habe gerade ein Balkendiagramm in Excel von Hintergrundfarbe und Rahmen befreit und dann als Grafik nach Word kopiert. Da war nichts außer einem transparenten Hintergrund.
 
Zuletzt bearbeitet:
Für den Export von Diagrammen oder Tabellen (genauer gesagt: eines beliebigen Zellbereiches, der irgendetwas enthalten kann) nutze ich folgendes Makro, das sehr gut funktioniert. Ich habe nur genau den Rand, den der Zellbereich selbst hat. Der Vorteil an dem Makro ist, dass man das Bild noch höher skalieren kann. Man könnte ja sonst auch so einen Zellbereich "als Grafik" bspw. in Word einfügen, das ist aber nicht sehr hochauflösend.

Das lohnt sich natürlich nur, wenn man regelmäßig denselben Zellbereich exportieren will. Dafür habe ich einmal die Exportfunktion und einmal ein Makro, das diese Funktion mit den richtigen Parametern aufruft (2. Codebeispiel).

Makro für Bildexport
Code:
Function PNGRange(oRng As Range, fName As String, Optional ByVal Skalierungsfaktor As Long = 3) As Boolean
' Funktion, um Range in ein Bild zu exportieren

On Error GoTo errhandler

' Bereich kopieren, xlPicture erzeugt dabei eine Vektorgrafik
oRng.CopyPicture xlScreen, xlPicture

' Neues Arbeitsblatt anlegen, in das die kopierte Range eingefügt wird
ThisWorkbook.Unprotect Geheimparole
Sheets.Add
Dim chtNm As String
chtNm = ActiveSheet.Name

' Chart in neuem Arbeitsblatt erzeugen, dabei Seitenverhältnisse entsprechend der ursprünglichen Range einstellen
With ActiveSheet
    .Shapes.AddChart.Select
    .Shapes("Chart 1").Width = oRng.Width
    .Shapes("Chart 1").Height = oRng.Height
End With

ActiveChart.Paste

' Grafik vor dem Export skalieren
With ActiveSheet
    .Shapes("Chart 1").ScaleWidth Skalierungsfaktor, msoFalse, msoScaleFromTopLeft
    .Shapes("Chart 1").ScaleHeight Skalierungsfaktor, msoFalse, msoScaleFromTopLeft
End With

' Grafik unter dem angegebenen Speicherpfad als PNG abspeichern
ActiveChart.Export Filename:=fName, filtername:="PNG"

' Normales Ende
ExitFunction:
    Application.DisplayAlerts = False
    Sheets(chtNm).Delete
    Application.DisplayAlerts = True
    PNGRange = True
    ThisWorkbook.Protect Geheimparole
    Exit Function

' Ende bei Fehler
errhandler:
    ' Fehlerbehandlung hier, falls man sowas tut
    Resume ExitFunction

End Function

Aufruf des Bildexports auf einem Arbeitsblatt
Code:
Sub Bildexport()
' Prozedur zum Aufruf des Bildexports

On Error GoTo errhandler

' Bildschirmaktualisierung ausschalten (Eigentlich nutze ich hier eine eigene Prozedur, um ein paar Parameter wie ScreenUpdating, DisplayAlerts etc. abzuschalten, aber das sollte in der Regel genügen.)
Application.ScreenUpdating = False

Dim rg As Range
Set rg = Range("Export_Sankey") ' Der Zellbereich ist im Namensmanager definiert, andernfalls muss er hier konkret benannt werden

Dim oFileDialog As FileDialog
Set oFileDialog = Application.FileDialog(msoFileDialogFolderPicker)

With oFileDialog
    .Title = "Wo soll die Darstellung gespeichert werden?"
    .ButtonName = "Ordner wählen"
    If .Show = -1 Then ' Wenn OK gedrückt wird
        Dim sFolder As String
        sFolder = .SelectedItems(1)
    End If
End With
   
If sFolder <> "" Then
    Dim Dateiname As String
    Dateiname = Format(Now, "DD-MM-YYYY") & "_Energieflussdarstellung für " & ActiveSheet.Range("BH16") & ".PNG"
    Call PNGRange(rg, sFolder & "\" & Dateiname)
   
    MsgBox ("Die Darstellung wurde unter dem Namen '" & Dateiname & "' im Ordner '" & sFolder & "' abgespeichert")
End If

' Normales Ende
ExitSub:
    Application.ScreenUpdating = True
    Exit Sub

' Ende bei Fehler
errhandler:
     ' Fehlerbehandlung hier, falls man sowas tut
    Resume ExitSub

End Sub
 
Zurück
Oben