Zeile ausblenden über makro

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Zeile ausblenden über makro

Re: Zeile ausblenden über makro

von clag » Mo, 12.01.2015 13:33

Hallo Karolus,
clag hat geschrieben:weil empty kann man so nicht anwenden weil schon belegt.
Karolus hat geschrieben:``empty`` ist and der Stelle noch garnicht an irgendetwas gebunden
stimmt

und gerade deswegen bekomme ich auch ein "empty" als Rückgabewert
und weil "emtpy" auch nicht anderweitig verwendet oder definiert wird funktioniert es eben auch.

Von daher verstehe ich deine ganze Aufregung nicht. Aber nun ja.

Code: Alles auswählen

Dim empty
empty ="" 
wäre vielleicht korrektere Weg ändert nix an der Funktionalität
oder auch

Code: Alles auswählen

if mysheet.getCellByPosition(1,i).string = "" then 
clag hat geschrieben:weil empty kann man so nicht anwenden weil schon belegt.
war schlecht ausgedrückt stimmt.
weil "empty" kann man nach Karolus so noch nicht anwenden, weil nicht definiert ist
wäre treffender gewesen.

aber trotzdem Danke, ich weiß du kannst hin und wieder auch sachlich sein.
Karolus hat geschrieben:@clag:
Anscheinend weisst du nicht was du tust, und dein Code funktioniert rein zufällig,
solche Bemerkungen, lassen aber wenig von der Sachlichkeit erkennen.

Re: Zeile ausblenden über makro

von Goodn8 » Mo, 12.01.2015 12:47

Karolus hat geschrieben:@Goodn8
Schau mal nach den Pfaden:
→Extras→Optionen→allgemein→Pfade
~user/Scripts/ liegt ebenfalls in ~/user/

Karolus
Habs gefunden vielen dank euch beiden!

Re: Zeile ausblenden über makro

von Karolus » Mo, 12.01.2015 12:12

@clag
clag hat geschrieben:Dieses kann man natürlich wenn man es braucht so breittreten wie du es getan hast,
Anscheinend hab ich es nicht ausführlich genug erklärt, weil:
clag hat geschrieben:weil empty kann man so nicht anwenden weil schon belegt
ist irgendwie eine falsche Erklärung, die Variable ``empty`` ist and der Stelle noch garnicht an irgendetwas gebunden.

Karolus

Re: Zeile ausblenden über makro

von Karolus » Mo, 12.01.2015 12:02

@Goodn8
Schau mal nach den Pfaden:
→Extras→Optionen→allgemein→Pfade
~user/Scripts/ liegt ebenfalls in ~/user/

Karolus

Re: Zeile ausblenden über makro

von clag » Mo, 12.01.2015 11:56

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.

Re: Zeile ausblenden über makro

von clag » Mo, 12.01.2015 11:43

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.

Re: Zeile ausblenden über makro

von Goodn8 » Mo, 12.01.2015 11:34

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

von Goodn8 » Mo, 12.01.2015 11:17

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

von Karolus » Mo, 12.01.2015 11:06

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

Re: Zeile ausblenden über makro

von Karolus » Mo, 12.01.2015 10:43

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.

Re: Zeile ausblenden über makro

von clag » Mo, 12.01.2015 10:04

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) 187-mal heruntergeladen
viel Spass

Re: Zeile ausblenden über makro

von Goodn8 » Mo, 12.01.2015 09:49

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

von Karolus » Do, 08.01.2015 18:14

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) 109-mal heruntergeladen
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

von Goodn8 » Do, 08.01.2015 16:01

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

von clag » Do, 08.01.2015 07:32

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.

Nach oben