Seite 1 von 2
Re: Zeile ausblenden über makro
Verfasst: Mi, 07.01.2015 13:49
von clag
Hallo Goodn8,
ist nicht so sehr kompliziert musst nur die richtigen Schritte aufzeichnen
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
Re: Zeile ausblenden über makro
Verfasst: Mi, 07.01.2015 14:29
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?
Re: Zeile ausblenden über makro
Verfasst: Mi, 07.01.2015 15:00
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.
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
Re: Zeile ausblenden über makro
Verfasst: Mi, 07.01.2015 16:17
von clag
Hallo Goodn8,
hier noch ein anderes Beispiel wie man per Button Filterergebnisse bekommt.
hilft das weiter?
Re: Zeile ausblenden über makro
Verfasst: Do, 08.01.2015 07:32
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.
Re: Zeile ausblenden über makro
Verfasst: Do, 08.01.2015 16:01
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

Re: Zeile ausblenden über makro
Verfasst: Do, 08.01.2015 18:14
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
Wenn du beim erstellen der Schaltflächen und der Verküpfung zu den beiden Funktionen Fragen hast - dann frage.
Karolus
Re: Zeile ausblenden über makro
Verfasst: Mo, 12.01.2015 09:49
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
Re: Zeile ausblenden über makro
Verfasst: Mo, 12.01.2015 10:04
von clag
Hallo Goodn8, und Nachfolgende
hatte anfänglich deine Frage missverstanden.
Hier noch ein Beispiel in OO Basic
viel Spass
Re: Zeile ausblenden über makro
Verfasst: Mo, 12.01.2015 10:43
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:
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.
Re: Zeile ausblenden über makro
Verfasst: Mo, 12.01.2015 11:06
von Karolus
Hallo
@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
Re: Zeile ausblenden über makro
Verfasst: Mo, 12.01.2015 11:17
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?
Re: Zeile ausblenden über makro
Verfasst: Mo, 12.01.2015 11:34
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...

Re: Zeile ausblenden über makro
Verfasst: Mo, 12.01.2015 11:43
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
weil empty kann man so nicht anwenden weil schon belegt.
Re: Zeile ausblenden über makro
Verfasst: Mo, 12.01.2015 11:56
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.