[GELÖST]CALC: Bereichsnamen löschen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

[GELÖST]CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo Gemeinde,
da ich Neuling bin gehe ich mit meiner ersten Frage wahrscheinlich den falschen Weg, aber wer keine Fehler macht lernt auch nichts dazu. Ich habe eine Excel-Tabelle mit AOO 4.1.2 geöffnet. Darin befinden sich unzählige Bereichsnamen zum Teil mit #Ref! Fehler. Nun möchte ich alle löschen. Zuerst habe ich es einzeln versucht, aber nach erneutem Öffnen sind alle wieder vorhanden. Mit Hilfe von Google habe ich eine Lösung gefunden, die auch einem User geholfen hat, bei einem anderen aber die selbe Fehlermeldung verursacht wie bei mir. Das Makro lautet:

Code: Alles auswählen

Sub alle_Bereiche_loeschen()
x = ThisComponent.namedRanges
y = x.Count
For i = y To 1 Step -1
   x.removeByName(x(i-1).Name)
Next i
End Sub
Die Fehlermeldung lautet:
. BASIC-Laufzeitfehler.
. Es ist eine Exception aufgetreten.
. Type: com.sun.star.uno.RuntimeException
. Message:.
Wer kann mir helfen?

Gruß Jürgen


Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst; CODE tags gesetzt
Zuletzt geändert von jef0815 am So, 10.02.2019 11:34, insgesamt 1-mal geändert.
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo,
du hast recht, es ist eine xls-Datei. Ich habe die allerdings in ods gespeichert. Im Makro sind die "Elementnames" alle vorhanden, das Problem ist in der Zeile mit "removebyname". Da erscheint immer der obengenannte Fehler.

Gruß Jürgen
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo,
wenn ich die Excel-Datei mit Calc öffne und dann unter ods abspeichere, kann ich die Namen zwar einzeln löschen, nach dem Speichern sind alle wieder vorhanden. Wenn ich die Excel-Datei mit Calc öffne und vor dem Abspeichern die Namen einzeln lösche, dann sind sie für immer verschwunden. Noch eines zu den Namen: Unter den festgelegten Namen gibt es welche die zusammenhängend sind, die kann ich mit dem Makro auch löschen. Die meisten Namen haben noch eine Verknüpfung mit dem Tabellenblatt (z.B. "Excel_BuiltIn_irgendwas (Blattname)". Darin liegt wahrscheinlich das Problem. Im Makro kann ich die Elemente auflisten, es erscheinen auch alle, allerdings ohne diesen Zusatz in Klammern. Für mich ist das Problem also gelöst, obwohl dieser Aufwand per Hand (ca. 300 Namen) sehr aufwendig ist und ich unter einer "Lösung" etwas anderes verstehe. Danke für Deine Mühe.
Gruß Jürgen
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo Faol,
Danke für Deine ausführliche Beschreibung und Hinweise. Da ich auf meinem Rechner nicht mit Excel arbeite, muss ich wohl oder übel so vorgehen wie beschrieben. Ich hoffe es kommt nicht all zu oft vor.

Vielen Dank
Jürgen
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo Chris,
in den benannten Bereichen sind auch keine Leerzeichen, das ist irgendeine Verknüpfung mit dem Blattnamen. Wie vorher schon beschrieben kann ich die paar Bereiche löschen, die einen zusammenhängenden Namen besitzen. Eine wunderbare Beispieldatei findest Du unter "lotto-hessen.de" im Bereich "Gewinnzahlen & Quoten". Dort kannst Du Dir Gewinnzahlen downloaden. In diesen Dateien erkennst Du das beschriebene Problem. Auch Dir möchte ich für Dein Engagement bezüglich meiner Anfrage danken.
Gruß Jürgen
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: CALC: Bereichsnamen löschen

Beitrag von Stephan »

Eine wunderbare Beispieldatei findest Du unter "lotto-hessen.de" im Bereich "Gewinnzahlen & Quoten". Dort kannst Du Dir Gewinnzahlen downloaden. In diesen Dateien erkennst Du das beschriebene Problem.
Nenne bitte einen konkreten Link zu einer konkreten Datei denn mit dem erstbesten Download auf der Seite, nämlich Lotto 6 aus 49 Gewinnzahlen 2015 erhalte ich eine reine txt-Datei, die natürlich keine Bereichen enthält weil das technisch bei txt nicht geht.


Gruß
Stephan
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo Stephan,
Du hast natürlich recht, in der obersten Zeile sind nur die Daten des Jahres, in der zweiten Zeile dann die gesammelten Daten als xls-Datei.
Gruß Jürgen
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo Chris,
1. ich habe kein Excel
2. ich arbeite mit AOO 4.1.2
vielleicht liegt es ja daran, oder Du versuchst die xls-Datei einmal unter einer früheren Version (.xls) abzuspeichern.

Gruß Jürgen
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: CALC: Bereichsnamen löschen

Beitrag von Stephan »

Du hast natürlich recht, in der obersten Zeile sind nur die Daten des Jahres, in der zweiten Zeile dann die gesammelten Daten als xls-Datei.
Da ich im Moment nicht die Ursache verstehe warum Dein Makro (siehe erster Post des Threads) eine Fehlermeldung bringt, versuche doch einmal das folgende Makro welches nur die fehlerhaften Namen entfernen sollte:

Code: Alles auswählen

Sub alle_Bereiche_loeschen()
x = ThisComponent.namedRanges
y = x.Count
For i = y To 1 Step -1
   If Left(x.getByName(x(i-1).Name).Content, 6) = "$#REF!" OR x.getByName(x(i-1).Name).Content = "" Then
     x.removeByName(x(i-1).Name)
   End If
Next i
End Sub
Gruß
Stephan
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: CALC: Bereichsnamen löschen

Beitrag von Karolus »

Hallo

@Stephan: die Leute neigen dazu sowas abzuschreiben ohne nachzudenken! …

Code: Alles auswählen

Doc_Ranges = ThisComponent.NamedRanges
for each RangeName in Doc_Ranges.ElementNames
    content = Doc_Ranges.getByName( RangeName ).Content
    if content = "" or left(content, 6) = "$#REF!" then
        Doc_Ranges.removeByName( RangeName )
    end if
next
Im Übrigen gibts theoretisch auch …NamedRanges nicht nur global auf Dokument-Ebene sondern auch für einzelne Tabellenblätter(LO)
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: CALC: Bereichsnamen löschen

Beitrag von balu »

Hallo.
Stephan hat geschrieben: Nenne bitte einen konkreten Link zu einer konkreten Datei
Vor dem Problem stand ich auch. Bis das ich gesehen hatte das Jürgen (jef0815) es beschrieben hatte wie man an die Datei herankommt. Ist in seinem Beitrag nicht sofort ersichtlich, aber es steht dort.
Damit das suchen entfällt, erklär ich das mal kurz.

Hier gelangt man zu der dementsprechenden Seite.

Dann muss man runterscrollen bis zu diesem hier:
Gewinnzahlen
Samstag 1955 - 2014


Das ist ein Link zu einem ZIP. Diesen Link habe ich jetzt mal hier rein kopiert.
Klick mich!
In diesem ZIP-Archiv befindet sich nur eine Datei. Name ist: LOTTO_6aus49.xls


Was bei mir Funktioniert ist folgendes.
Die xls in OOo 3.2.1 öffnen, und als ods speichern. Anschließend Datei erneut öffnen und das erste vom Jürgen gezeigte Makro ausgeführt. Ergebnis: Alle Namen gelöscht.

Die eben gespeicherte ods mit der Namensliste in AOO 4.1.1 & AOO 4.1.2 geöffnet, das besagte Makro ausgeführt. Alle Namen gelöscht.


Die xls in AOO 4.x.x geöffnet und als ods gespeichert. Erneut geöffnet und das Makro ausgeführt. Ergebnis: Fehlermeldung in der Codezeile

Code: Alles auswählen

   x.removeByName(x(i-1).Name)
Text der Fehlermeldung so wie Jürgen schon schön aufgeschrieben hatte.
. BASIC-Laufzeitfehler.
. Es ist eine Exception aufgetreten.
. Type: com.sun.star.uno.RuntimeException
. Message:
Ein Auszug aus der Namensliste der xls-Datei inklusive einem #Ref-Fehler sieht in OOo 3.2.1 wie folgt aus.
ooo.jpg
ooo.jpg (57.52 KiB) 5940 mal betrachtet
Und in AOO so
aoo.jpg
aoo.jpg (55.92 KiB) 5940 mal betrachtet
Wie eindeutig zu sehen ist, haben einige Namen in AOO noch Zahlen in Runden Klammern stehen, wahrscheinlich Jahreszahlen. Und ich sage jetzt mal, das diese Klammern ein Problem darstellen, oder der zusätzliche leerraum zwischen dem Namen und der Klammer. Da ich aber mit dieser Problematik noch nichts zu tun hatte, kann ich auch nix weiteres dazu sagen wie z.B. das Löschmakro umgeschrieben werden muss.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: CALC: Bereichsnamen löschen

Beitrag von Karolus »

Hallo

Wie bereits oben vermutet, die Problemkinder sind unter denen mit Geltungsbereich auf einzelnen Tabellenblättern
Namensbereiche.png
Namensbereiche.png (31.77 KiB) 5924 mal betrachtet
Zum entfernern sämtlicher Bereiche( python ):

Code: Alles auswählen

def main():
    doc = XSCRIPTCONTEXT.getDocument()
    remove_named_ranges(doc)
    sheets = doc.Sheets
    sheetnames= sheets.ElementNames
    for sheetname in sheetnames:
        remove_named_ranges(sheets.getByName( sheetname ))

        
def remove_named_ranges( namerange_object ):
    nameranges = namerange_object.NamedRanges
    for rangename in nameranges.ElementNames:
        nameranges.removeByName(rangename)
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo Christian,
danke für Dein Angebot, aber ich habe bei einem Excel-Anwender die Namen alle per Hand gelöscht. War zwar aufwendig aber jetzt ist's ok.

Gruß Jürgen
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo Karolus,
danke für Deine Tipps. Mit Python kenne ich mich gar nicht aus. Da ich noch am üben bin, werde ich es bestimmt irgendwann auch schaffen, einen Screenshot rein zustellen.

Gruß Jürgen
jef0815
**
Beiträge: 35
Registriert: Fr, 01.04.2016 11:48

Re: CALC: Bereichsnamen löschen

Beitrag von jef0815 »

Hallo Balu,
Klasse, das ist es was mich etwas beruhigt. Das Problem scheint also in diesem Fall an Aoo zu liegen. Wie schon beschrieben ist das Problem für mich erst einmal erledigt (Handarbeit), es wäre aber schön gewesen eine Lösung per Makro zu haben.

An alle, vielen Dank für Euere Hilfe. Stellt sich für mich jetzt die Frage nach Ooo zu wechseln, aber was funktioniert da nicht so wie gewollt? Muss ich halt ausprobieren.

Gruß Jürgen
Antworten