Zeile ausblenden über makro

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zeile ausblenden über makro

Beitrag von clag »

Hallo Goodn8,

ist nicht so sehr kompliziert musst nur die richtigen Schritte aufzeichnen
aus_einblenden.ods
(10.14 KiB) 235-mal heruntergeladen
vielleicht hilft dir ja schon diese Beispieldatei?

um Zeile 10 auszublenden:
cursor in A1
Makro Aufzeichnung starten
markiere A10
dann Menü > Format > Zeilen > ausblenden
markiere A9
Makro Aufzeichnung beenden
einen Namen vergeben und speichern


um Zeile 10 einzublenden:
cursor in A1
Makro Aufzeichnung starten
markiere A9-A11
dann Menü > Format > Zeilen > einblenden
markiere A9
Makro Aufzeichnung beenden
einen Namen vergeben und speichern
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zeile ausblenden über makro

Beitrag von clag »

Hallo Goodn8,

dann willst du ja nicht "Zeilen ausblenden" sondern eine Filteraktion aufzeichnen
da wird es etwas schwieriger aber dafür gibt es doch die Autofilterfunktion
Hast du die schon einmal ausprobiert?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zeile ausblenden über makro

Beitrag von Karolus »

Hallo

Im Anhang ist ein Beispiel.
Über die linke Schaltfläche werden die Zeilen ohne Inhalt in A13:A19 ausgeblendet,
mit der rechten Schaltläche werden alle Zeilen des Bereichs eingeblendet.
ausblenden.ods
(16.31 KiB) 179-mal heruntergeladen
der Quellcode dazu:

Code: Alles auswählen

doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.CurrentSelection.Spreadsheet
cellrange = sheet.getCellRangeByName('A13:A19')

def iterate(iterable):
    it = iterable.createEnumeration()
    while it.hasMoreElements():
        yield it.nextElement()
        
def hide_empty_rows(*_):
    empties = cellrange.queryEmptyCells()
    for empty_range in iterate(empties):
        empty_range.Rows.IsVisible = False
        
def unhide(*_):
    cellrange.Rows.IsVisible = True
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zeile ausblenden über makro

Beitrag von clag »

Hallo Goodn8,

hier noch ein anderes Beispiel wie man per Button Filterergebnisse bekommt.
Persistenter_Spezialfilter+Button.ods
(11.11 KiB) 191-mal heruntergeladen
hilft das weiter?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zeile ausblenden über makro

Beitrag von clag »

Hallo Goodn8,

wenn dir die angebotenen Lösungswege nicht das gewünschte Ergebnis liefern,
musst du schon etwas präziser beschreiben was du unter welchen Bedingungen erreichen willst.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Goodn8
Beiträge: 5
Registriert: Mi, 07.01.2015 20:50

Re: Zeile ausblenden über makro

Beitrag von Goodn8 »

Karolus hat es mit seiner Datei schon auf den Punkt gebracht.

Wie in seiner Beispieldatei möchte ich das die nicht ausgefüllten Reihen einfach ausgeblendet werden wenn ich auf die Schaltfläche 1 drücke und wieder eingeblendet wenn ich auf die 2. drücke =)
Wenn mir jetzt noch jemand erklären kann wie ich das in meine Datei einpflegen kann bin ich schon mehr als glücklich ;-)
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zeile ausblenden über makro

Beitrag von Karolus »

Hallo

Ich hab dir das ganze noch um eine Installierfunktion erweitert:

Code: Alles auswählen

import uno
from os import path


ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance
file_access = createUnoService("com.sun.star.ucb.SimpleFileAccess")
pathsubstution = createUnoService("com.sun.star.util.PathSubstitution")

doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.CurrentSelection.Spreadsheet
cellrange = sheet.getCellRangeByName('A13:A19')



def install_user_or_embed(*_):
    """
    """
    if __file__.startswith('file'):
        factory = createUnoService( 
                "com.sun.star.frame."
                "TransientDocumentsDocumentContentFactory")
        pythonfolder = (
        '{}/Scripts/python'.format(factory
                                   .createDocumentContent(doc)
                                   .getIdentifier()
                                   .ContentIdentifier
                                   ))
    else:
        pythonfolder = pathsubstution.substituteVariables('$(user)/Scripts/python/',0)
    filename = path.basename(__file__)
    if not file_access.isFolder( pythonfolder):
        file_access.createFolder(pythonfolder)
    file_access.copy(__file__, path.join( pythonfolder, filename))
    
       
    



def iterate(iterable):
    it = iterable.createEnumeration()
    while it.hasMoreElements():
        yield it.nextElement()
        
def hide_empty_rows(*_):
    empties = cellrange.queryEmptyCells()
    for empty_range in iterate(empties):
        empty_range.Rows.IsVisible = False
        
def unhide(*_):
    cellrange.Rows.IsVisible = True
über die Schaltflaäche im angehängten Dokument wird das Script in dein Benutzerverzeichnis kopiert.

Importieren in dein Ziel-Dokument kannst du dann wiederrum per
→Extras→Makros→Makros verwalten→Python→Meine Makros→Leerzeilen_ausblenden→→install_user_or_embed
installer.ods
(14.76 KiB) 108-mal heruntergeladen
Wenn du beim erstellen der Schaltflächen und der Verküpfung zu den beiden Funktionen Fragen hast - dann frage.



Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Goodn8
Beiträge: 5
Registriert: Mi, 07.01.2015 20:50

Re: Zeile ausblenden über makro

Beitrag von Goodn8 »

Entschuldigt bitte die lange Abwesenheit,
ich habe dein Script jetzt einbauen können Karolus, vielen Dank dafür schon einmal!
ich habe jetzt das Formular fertig formatiert und leider passt es nicht mehr so ganz mit den Zeihlen,
besteht denn die Möglichkeit, dass ich das im Code selbständig ändern kann? wenn ich auf Makros verwalten gehe, kann ich diese leider nur ausführen lassen, aber nicht bearbeiten?!
Oder mache ich vielleicht etwas falsch?

LG Goodn8
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zeile ausblenden über makro

Beitrag von clag »

Hallo Goodn8, und Nachfolgende

hatte anfänglich deine Frage missverstanden.
Hier noch ein Beispiel in OO Basic
leereZeilen_aus-einblenden+Button.ods
(10.85 KiB) 186-mal heruntergeladen
viel Spass
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zeile ausblenden über makro

Beitrag von Karolus »

Hallo
Goodn8 hat geschrieben:Entschuldigt bitte die lange Abwesenheit,
ich habe dein Script jetzt einbauen können Karolus, vielen Dank dafür schon einmal!
ich habe jetzt das Formular fertig formatiert und leider passt es nicht mehr so ganz mit den Zeihlen,
besteht denn die Möglichkeit, dass ich das im Code selbständig ändern kann? wenn ich auf Makros verwalten gehe, kann ich diese leider nur ausführen lassen, aber nicht bearbeiten?!
Oder mache ich vielleicht etwas falsch?
Nein, du machst nichts falsch, über die GUI kannst du python-scripte nicht direkt zum bearbeiten öffnen.
Suche nach der Kopie: <dein Benutzerverzeichnis>/Scripts/python/leerzeichen_ausblenden.py

Öffne die Datei mit einem einfachen Texteditor, und ändere den Addressbereich in der Zeile:

Code: Alles auswählen

cellrange = sheet.getCellRangeByName('A13:A19') 
speichere die Datei , und führe den Schritt zum Einbetten in die Zieldatei nochmal aus.


Speichere und schliesse danach die Zieldatei und starte sie neu.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zeile ausblenden über makro

Beitrag von Karolus »

Hallo

Code: Alles auswählen

if mysheet.getCellByPosition(0,i).string = empty then
@clag:
Anscheinend weisst du nicht was du tust, und dein Code funktioniert rein zufällig, du hättest da genausogut schreiben können:

Code: Alles auswählen

if mysheet.getCellByPosition(0,i).string = ganzvoll then

Code: Alles auswählen

if mysheet.getCellByPosition(0,i).string = ganz_andere_undefinierte_variable then
richtig respective besser wäre aber:

Code: Alles auswählen

if isEmpty(mysheet.getCellByPosition(0,i).string ) then
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Goodn8
Beiträge: 5
Registriert: Mi, 07.01.2015 20:50

Re: Zeile ausblenden über makro

Beitrag von Goodn8 »

Auch richtig clag!
Ich verstehe glaube ich den Ansatz der Sprache, wie gesagt ich kenne mich ein bissschen mit web Programmierung aus.
Allerdings nicht mit OO.
Ich habe s jetzt hin bekommen das er halbwegs funktioniert.
hier mal mein geändertes Script:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub HideOrShowNull

	myDoc = thisComponent
	mySheet = myDoc.sheets(0)
	myButton = mySheet.drawpage.forms.getbyIndex(0).getbyname("Schaltfläche 1")
	
	if myButton.label = "leere Zeilen verbergen" then
		for i=14 to 20
			if mysheet.getCellByPosition(1,i).string = empty then
				myZeile = mySheet.getrows().getByIndex(i)
				myZeile.isVisible = false
			end if
		next
		myButton.label = "alle Zeilen anzeigen"
		myButton.BackgroundColor = rgb(255,144,144)
	else 
		range = mySheet.getCellRangebyPosition(1,14,1,20)
		myrows = range.getRows()
		myrows.isVisible = true
		myButton.label = "leere Zeilen verbergen"
		myButton.BackgroundColor = rgb(128,255,128)
	end if
End Sub
Ich habe versucht die Funktion auf B14:B20 zu beschränken.
Allerdings nimmet mir das Makro so auch die Summe aus E21 weg, (ich denke weil B21leer ist) was ich nicht verstehe.
wo liegt mein Denkfehler?
Goodn8
Beiträge: 5
Registriert: Mi, 07.01.2015 20:50

Re: Zeile ausblenden über makro

Beitrag von Goodn8 »

Hi Karolus.
Jetzt werde ich mich wohl total blamieren....
Also ich wenn ich den open Office Ordner durchsuche finde ich diese Datei leider nicht...
C:\Program Files (x86)\OpenOffice 4\presets\Scripts ist leer
und in meinem User Ordner ist leider kein Script Ordner...

:?
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zeile ausblenden über makro

Beitrag von clag »

Hallo Goodn8,

da ist ein kleiner Fehler in deiner Variante,
die Zählung der Zeilen und Spalten beginnt bei 0

für B14:B20 ~ 1,13,1,19

und das von mir eingesetzte

Code: Alles auswählen

         if mysheet.getCellByPosition(1,i).string = empty then 
ersetze

Code: Alles auswählen

         if mysheet.getCellByPosition(1,i).string = "" then 
weil empty kann man so nicht anwenden weil schon belegt.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zeile ausblenden über makro

Beitrag von clag »

Hallo Karolus,

bei dir möchte ich mich für deinen "so freundlichen und relaxten " Hinweis bedanken,
das mir ein kleines Missgeschick im Code unterlaufen ist.

Dieses kann man natürlich wenn man es braucht so breittreten wie du es getan hast,
man muss das aber nicht tun. Ich hoffe es hat dir etwas gegeben.

Ein simpler Satz wie,
Hey clag "empty" kann nicht als Variable genutzt werden, hätte es auch getan.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten