Hallo
anfang des Jahres stand ich vor dem gleichem Problem: Grafiken löschen. Ich habe da wohl auch eine Methode gefunden sie zu löschen, die aber nicht ganz ungefährlich ist.
Die Methode sieht wie folgt aus.
Code: Alles auswählen
sub GrafikenLoeschen
dim oDocGL as object
oDocGL = thisComponent
oDocGL.Sheets(0).getCellRangeByName("B1:F5").clearContents(128)
end sub
Dadurch werden alle Zeichenobjekte im Zellbereich B1:F200 gelöscht, praktisch theoretisch.
Die Probleme dabei sind folgende.
Wenn sich in der Spalte B (Zelle B1) eine Grafik befindet, so
MUSS die X-Position der Grafik auch wirklich in der Spalte B beginnen.
Beispiel:
Spalte A ist 2,58 cm breit. Position X der Grafik mus mindestens 2,58 sein.
Warum betone ich das?
Weil eine Grafik so rein Optisch sich wohl in der Spalte B befindet, aber die Fläche kann eventuell schon in der Spalte A bei Position 2,57 anfangen -{kommt auf die Grafik drauf an}-. Und dadurch wird ja die Grafik nicht der Spalte B, sondern A zugeordnet. Folglich wird sie beim löschen nicht erfasst, und auch nicht gelöscht.
Okay, ich denk mir das kann man noch so einigermaßen verstehen und auch nachvollziehen. Aber richtig verwirrend wird es erst jetzt.
Angenommen in den Zellen A1 bis F1 sind Grafiken die bis in die Zeile 3 hineinragen, und diese will man nun mit
.clearContents löschen. So reicht es nicht aus einfach zu sagen:
.getCellRangeByName(
"B1:F1")
.clearContents(
128). Das Ergebnis ist nämlich; es werden keine Grafiken gelöscht!
Warum ist das so?
Keine Ahnung!
Denn Sinn versteh ich auch nicht, aber die Ursache dafür habe ich herausgefunden.
Vielleicht habt ihr das schon mal gesehen, und euch nichts dabei gedacht. Es kann schon mal vorkommen wenn eine Datei mit Grafiken geöffnet/geladen wird, dann sieht man unter Umständen ganz kurz anstelle der Grafiken einen Platzhalter und Senkrecht darunter einen Text. Und wenn die Datei fertig geöffnet/geladen ist, dann sieht man nur noch die Grafik.
Hier mal ein Screenshot was ich meine.

- Grafikpfade.png (15.03 KiB) 2313 mal betrachtet
Und die Länge dieses Textes, genauer gesagt die Pfadangabe, muss nun berücksichtigt werden. In diesem Falle bedeutet das, das die Code-Zeile wie folgt aussehen müsste.
Code: Alles auswählen
sub GrafikenLoeschen
dim oDocGL as object
oDocGL = thisComponent
oDocGL.Sheets(0).getCellRangeByName("B1:F31").clearContents(128)
end sub
Das wäre für die Endzeile ein mindestmaß (31). Besser ist es wenn es sogar erhöht wird. Und erst jetzt lassen sich die Grafiken wie gewünscht löschen.
Wie man nun aber allerdings am einfachsten und schnellsten die End-Adressierung herausbekommt, weiß ich nicht, das muss man irgendwie austesten.
Es besteht aber noch ein gewisses Gefahrenpotenzial. Denn nicht nur Grafiken, nein, auch Formulare-Steuerelemente die sich innerhalb des Adressbereichs befinden, werden Gnadenlos gelöscht.
Bitte verzeiht wenn ich jetzt meine Idee mit
.clearContents nicht in die Beispieldatei(en) eingebaut habe, aber ich durchblicke momentan die Makros nicht so recht.
Jedoch ist mir grad eben noch etwas aufgefallen.
Code: Alles auswählen
oZelle1 = oBlatt.getCellRangeByName(S+"2")
oZelle2 = oBlatt.getCellRangeByName(S+"4")
Muss das so sein?
Ich würde das z.B. so schreiben.
Code: Alles auswählen
oZelle1 = oBlatt.getCellRangeByName(S&2)
oZelle2 = oBlatt.getCellRangeByName(S&4)
Gruß
balu