Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

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

Moderator: Moderatoren

maro1969
*
Beiträge: 11
Registriert: Mo, 27.02.2012 20:13

Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

Beitrag von maro1969 »

Hallo zusammen,

ich habe für die in unserem Betrieb verwendete Calc-Stückliste ein Makro geschrieben, das jedes in der For-Schleife erfasste Tabellenblatt zeilenweise durchläuft und daraus eine Textdatei bastelt, die die Zuschnittoptimierung einlesen kann. Jedes Tabellenblatt enthält die Teile einer Position.

Das ist recht einfach wenn ich alle Positionen optimieren möchte, wird aber umständlich wenn ich ausgewählte Positionen haben möchte. Dann muss ich jedesmal in das Makro gehen und die Schleife anpassen. Wenn die Positionen nicht hintereinander liegen sogar mehrmals.

Ich hätte also gerne einen Dialog mit einer Liste der vorhandenen Tabellenblatt-Namen, in dem ich per Mehrfachauswahl die zu bearbeitenden Tabellen auswähle.

Gibt es da Beispiele, anhand derer auch ein in die Jahre gekommener Anfänger wie ich das hinbekommt?

Gruß
Martin
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

Beitrag von Stephan »

Gibt es da Beispiele, anhand derer auch ein in die Jahre gekommener Anfänger wie ich das hinbekommt?
Kapitel 7.1 in:
http://www.calc-info.de/files/Calc_StarBasic.pdf

zeigt ein Beispiel wie Du in Calc durch eine Mehrfachauswahl interierst:

Code: Alles auswählen

Sub mehrfachSelektion         
        Dim selektion as Object
        Dim ausgabe as String
        Dim zellBereichAddresse as Object
    
        selektion = ThisComponent.getCurrentSelection()                            
    
        If Not( selektion.supportsService( _
                "com.sun.star.sheet.SheetCellRanges" ) ) then
                MsgBox "keine Mehrfachselektion" 
                Exit Sub
        End If
    
        ausgabe = "Mehrere Zellbereiche ausgewählt" & chr(13)
    
        ' Anzahl der Zellbereiche
  ausgabe = ausgabe & "Anzahl Bereiche: " & _
                selektion.getCount() & chr(13)
                        
        ' Schleife durch alle Zellbereiche
        for i=0 To selektion.getCount()-1
             ' Adresse des Zellbereiches holen
                 zellBereichAddresse = selektion._
                             getByIndex(i).getRangeAddress()
             ' Adressinfo an Ausgabe anfügen
                     ausgabe = ausgabe & _
                        zellBereichAddresse.StartColumn & "" & _
                zellBereichAddresse.StartRow & "->" & _
                zellBereichAddresse.EndColumn  & "" & _
                zellBereichAddresse.EndRow & chr(13)  
        Next i
                
    ' Ausgabe der Informationen über MessageBox     
    MsgBox ausgabe          
End Sub
Gruß
Stephan
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

Beitrag von Toxitom »

Hallo Martin, Stephan,

ich glaube, ihr sprecht von verschiedenen Sachen;)

Martin sucht eine Möglichkeit, in einer Listbnox eines Dialoges eine Mehrfachauswahl vorzunehmen und dann über die Auswahl zu iterieren.

Stephan beschreibt die Möglichkeit, eine Mehrfachauswahl (Zellen) in einem Tabellenblatt wieder aufzudröseln. Das sind unterschiedliche Sachen.

@Martin:

Eigentlich müsste ich auf ein gutes Buch verweisen - dort steht das alles drin ("Makros in OpenOffice.org") - leider ist dies Buch nicht mehr verfügbar. Da Du selbst schreibst, Du bist "Anfänger", ist das schwer, Dir wirklcih zu helfen ohne den kompletten Code zu schreiben (und dazu habe ich jetzt keine Zeit...).

Die Lösung sieht wie folgt aus: Du erzeugst einen Dialog und spendierst ihm eine Listbox. Der Listbox übergibst Du die Liste der Tabellenblatt-Namen, die Du direkt aus dem Dokument auslesen kannst (ist ein Array, die Listbox erwartet einen Array):

Code: Alles auswählen

oCtl.model.StringItemList = oDoc.sheets.ElementNames
Dabei ist oCtl das Objekt Deiner Listbox und oDoc das Objekt deines Dokuments.

Zusätzlich musst Du bei der Listbox die Möglichkeit der Mehrfachauswahl zulassen - geht direkt über die IDE.

Zur Abfrage der gewählten Namen wirst Du dann im Makro den folgenen Codeschnipel verwenden:

Code: Alles auswählen

aListe = oCtl.selectedItems
For i = 0 to ubound(aliste) 
  sTabName = aListe(i)
  ....
next
Das wäre die Grundstruktur - die Liste enthält die Namen der gewählten Tabellenblätter - die kannste dann entsprechend weiter bearbeiten.

Brauchst natürlich auch noch Fehlerstrukturen (bsw. wenn gar keine Tabelle gewählt wurde etc.) - aber wie gesagt - das alles ist etwas komplexer;)

Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

Beitrag von Stephan »

ich glaube, ihr sprecht von verschiedenen Sachen
ja, stimmt. (die Listbox hatte ich überlesen)


Gruß
Stephan
maro1969
*
Beiträge: 11
Registriert: Mo, 27.02.2012 20:13

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

Beitrag von maro1969 »

Vielen Dank Euch beiden!!

Tom hat recht. So hatte ich mir das vorgestellt.
Hab jetzt also was zum Probieren.

Nochmals Danke. Melde mich!!

Gruß
Martin
maro1969
*
Beiträge: 11
Registriert: Mo, 27.02.2012 20:13

Re: Mehrfachauswahl vorhandener Tabellenblätter in Dialog zur Übergabe an Makro

Beitrag von maro1969 »

Mensch Tom,

es funktioniert!!! Super!

Jetzt noch in die richtige Datei verbasteln und aufhübschen. Das sollte auch noch gehen.
Danke nochmal!!
Arraytest.ods
(9.58 KiB) 113-mal heruntergeladen
Gruß
Martin
Antworten