Leere Zeile

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

Moderator: Moderatoren

Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Leere Zeile

Beitrag von Jörg »

Hallo Fachleute,

Code: Alles auswählen

 With oSheet 
         x = .Columns("0:11").queryEmptyCells()
         iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
      End With
       mycell = oSheet.getCellRangeByName("A" & iLetzteZeile )
        ListBox2 = myctrl.selecteditem
        mycell.string = ListBox2
       
        for ta = 1 to 11
        osheet.getcellByPosition( ta, iLetzteZeile ).formulalocal = oDialog8.getControl("TextField" & ta).text
 next ta
Zeile A1:L1 sind Spaltenüberschriften.
Der Wert aus Listbox2 wird wie gewünscht in Zelle A2 eingetragen.
Die Einträge aus den TextFields jedoch werden erst ab B3 erstellt, die Zeile B2:L2 bleibt leer.
Wäre dankbar für eine Idee, wo im Code der Fehler steckt.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Leere Zeile

Beitrag von Jörg »

Hallo, die nachfolgende Zeile

Code: Alles auswählen

osheet.getcellByPosition( ta, iLetzteZeile ).formulalocal = oDialog8.getControl("TextField" & ta).text
geändert in

Code: Alles auswählen

osheet.getcellByPosition( ta, iLetzteZeile - 1).formulalocal = oDialog8.getControl("TextField" & ta).text
so funktioniert es, aber warum??

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Karolus
********
Beiträge: 7454
Registriert: Mo, 02.01.2006 19:48

Re: Leere Zeile

Beitrag von Karolus »

Hallo
so funktioniert es, aber warum??
weil `i-1` eins weniger als `i` ist ...

:lol:

oder anders formuliert: .getCellRangeByName("A1") entspricht .getCellByPosition(0,0)


_____
Der Informatiker steht auf dem Bahnsteig und zählt seine Koffer. 0 ... 1 ... 2 ?Scheisse einer zu wenig!

____
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

(Gelöst) Leere Zeile

Beitrag von Jörg »

Hallo,

ist ja auch logisch.
Der Groschen is kein Sturzbomber.
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Leere Zeile

Beitrag von Jörg »

Hallo Fachleute,

nachfolgendes array möchte ich wie oben beschrieben einfügen.
Wenn ich eine konkrete Position Bsp. (1,4,11,4) angebe, gehts.
Die letzte Zeile wird auch ermittelt, siehe msgbox.
Aber was ich hier(Spalte B, iLetzteZeile) reinpacken soll ??? Hab schon alles mögliche probiert.
:?

Code: Alles auswählen

sub haste
odoc = thiscomponent
osheet = odoc.sheets.getByName ("Tabelle18")
Dim array_1(10)
  With oSheet 
         x = .Columns("0:11").queryEmptyCells()
         iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
      End With
for ta = 1 to 11
  array_1(ta-1) = oDialog8.getControl("TextField" & ta).text
 next ta
array_1 = Array(array_1())
msgbox iLetzteZeile
osheet.getCellRangeByPosition(Spalte B, iLetzteZeile).setDataArray(array_1())
oDialog8.endexecute
end Sub
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Leere Zeile

Beitrag von Jörg »

Hallo,
bei dieser Zeile

Code: Alles auswählen

osheet.getCellRangeByPosition("B" & iLetzteZeile).setDataArray(array_1()
erhalte ich diese Fehlermeldung:
Unbenannt.PNG
Unbenannt.PNG (9.7 KiB) 6193 mal betrachtet
Wenn ich das richtig verstehe, sind die Bereiche falsch.
Aber keine Ahnung, wo ich noch schrauben könnte.

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Karolus
********
Beiträge: 7454
Registriert: Mo, 02.01.2006 19:48

Re: Leere Zeile

Beitrag von Karolus »

Hallo

Du hattest das doch schonmal kapiert das .geCellRangeByPosition vier ganzzahlige Argumente benötigt, in der Reihenfolge:
index der linken Spalte,
index der oberen Zeile,
index der rechten Spalte,
index der unteren Zeile,

zb ...getCellRangeByPosition( 3 , 5 , 4 , 10 ) ==> Bereich D6:E11

benötigt, wieso zeigst du jetzt penetrant weiterhin Code, indem du
a) nur ein Argument übergibst,
das
b) auch offensichtlich keine Ganzzahl ist sondern Text.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Leere Zeile

Beitrag von Jörg »

Hallo Karolus,
tut mir leid, wenn ich nerve.
Noch mal auf Anfang.
Dies ist mein ursprünglicher Code.

Code: Alles auswählen

sub Datensatz_azh_Speichern
Dim i as Integer
Dim aData()
Dim array_1(10)
    
	'Listbox Kasse siehe Rechnungsnummer eintragen
	odoc = ThisComponent
    osheet = ThisComponent.Sheets.GetByName("Tabelle18")
	'objZelle = osheet.getCellRangebyName("A2")
  
   myctrl = oDialog8.GetControl("ListBox2")  
      With oSheet 
         x = .Columns("0:11").queryEmptyCells()
         iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
      End With
         mycell = oSheet.getCellRangeByName("A" & iLetzteZeile )
       ListBox2 = myctrl.selecteditem
       mycell.string = ListBox2 

        for ta = 1 to 11
        osheet.getcellByPosition( ta, iLetzteZeile -1 ).formulalocal = oDialog8.getControl("TextField" & ta).text
 next ta
oDialog8.endExecute()
End Sub	
Aber mit

Code: Alles auswählen

for ta = 1 to 11
        osheet.getcellByPosition( ta, iLetzteZeile -1 ).formulalocal = oDialog8.getControl("TextField" & ta).text
 next ta
ist die Performance schlecht, da jede Zelle einzeln gefüllt wird.

Diese Problem will ich mit setdataarry lösen, was mit einer konkreten Adressierung
z.Bsp.

Code: Alles auswählen

osheet.getCellRangeByPosition(1,0,11,0).setDataArray(array_1())
ja auch klappt.
Aber ich benötige in der Adressierung die erste freie Zeile im Bereich Spalten "A:L"
Daher kann ich keinen festen Bereich mit den von Dir beschriebenen Argumenten angeben.
Hoffe, ich konnte mein Problem verständlicher erläutern.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
F3K Total
********
Beiträge: 3706
Registriert: Mo, 28.02.2011 17:49

Re: Leere Zeile

Beitrag von F3K Total »

Det jeht nisch:

Code: Alles auswählen

osheet.getCellRangeByPosition("B" & iLetzteZeile).setDataArray(array_1()
...ByPosition...
vielleicht det:

Code: Alles auswählen

osheet.getCellRangeByNAME("B" & iLetzteZeile).setDataArray(array_1()
...ByNAME...
Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Leere Zeile

Beitrag von Stephan »

tut mir leid, wenn ich nerve.
versuche doch bitte zu verstehen was der Code inhaltlich bedeutet und versuche nicht bestehenden Code aufgrund intuitiven Ratens zu ändern.
Aber ich benötige in der Adressierung die erste freie Zeile im Bereich Spalten "A:L"
dann schreibe das hin:

Code: Alles auswählen

osheet.getCellRangeByPosition(1,iLetzteZeile,11,iLetzteZeile).setDataArray(array_1())
vor allem aber verstehe was Du da tust und schreibe das nicht einfach ab weil ich es sage.

Karulus schrieb das bereits, aber nochmals etwas anders:

ein Ausdruck:

Code: Alles auswählen

.getCellRangeByPosition(1,0,11,0)

beschreibt einen Zellbereich durch Angabe der linken Oberen und der rechten unteren Ecke, welche jeweils durch ihre Spalten- und Zeilen-Nummer (Index) angegeben werden, also allgemein:

Code: Alles auswählen

.getCellRangeByPosition(Spalte-links-oben,Zeile-links-oben,Spalte-rechts-unten,Zeile-rechts-unten)
dabei müssen die 4 Angaben:
Spalte-links-oben
Zeile-links-oben
Spalte-rechts-unten
Zeile-rechts-unten

positive ganze Zahlen sein UND es ist natürlich völlig egal ob man die Zahlen direkt hinschreibt oder Variablen verwendet die die Zahlen enthalten, z.B. ist das:

Code: Alles auswählen

.getCellRangeByPosition(1,0,11,0)
das Gleiche wie:

Code: Alles auswählen

a = 0
.getCellRangeByPosition(1,a,11,a)
und natürlich (sinngemäß) auch das Gleiche wie:

Code: Alles auswählen

x = .Columns("0:11").queryEmptyCells()
iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
.getCellRangeByPosition(1,iLetzteZeile,11,iLetzteZeile)
"sinngemäß" weil hier iLetzteZeile einen variablen positiven, ganzzahligen Wert hat und nicht den festen Wert 0 wie in a=0


Gruß
Stephan
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Leere Zeile

Beitrag von Jörg »

Hallo,
ne das ist es nicht. Das hab ich schon probiert. Der Unterschied zwischen byPosition bzw. byName ist mir klar.
Gleichwohl hab ich es dennoch mal versucht mit folgendem Ergebnis
Unbenannt1.PNG
Unbenannt1.PNG (8.98 KiB) 6110 mal betrachtet
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Karolus
********
Beiträge: 7454
Registriert: Mo, 02.01.2006 19:48

Re: Leere Zeile

Beitrag von Karolus »

F3K Total hat geschrieben: vielleicht det:

Code: Alles auswählen

osheet.getCellRangeByNAME("B" & iLetzteZeile).setDataArray(array_1()
...ByNAME...
Gruß R
...bestimmt nicht, falls meine Annahmen über den konkreten Inhalt von iLetzteZeile zutreffen.




nach dem bisherigen Informationen hat unser array_1(--was übrigens ein bescheuerter Name ist--) die Dimension 1Zeile * 11Spalten, daher würde ich spontan plädieren für:

Code: Alles auswählen

osheet.getCellRangeByPosition(1, iLetzteZeile, 11, iletzteZeile).setDataArray(array_1) 
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Leere Zeile

Beitrag von Stephan »

ne das ist es nicht
Stimmt.

(Die Aussagen von Rik sind zwar richtig, aber für Dein Problem irrelevant, vielleicht hätte ich das gleich hinschreiben sollen).
Das hab ich schon probiert. Der Unterschied zwischen byPosition bzw. byName ist mir klar.
Sorry, aber genau das kann doch garnicht stimmen, denn wäre Dir der UNterschied klar würdest Du garnicht versucht haben es so zu schreiben:

Code: Alles auswählen

.getCellRangeByPosition("B" & iLetzteZeile)
denn das ist (wegen des "B") unter allen Unständen falsch, worauf auch Karolus schon hinwies:
b) auch offensichtlich keine Ganzzahl ist sondern Text.


Tue doch bitte das was ich im meinem laaaaangen Post geschrieben habe


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

Re: Leere Zeile

Beitrag von Stephan »

...bestimmt nicht, falls meine Annahmen über den konkreten Inhalt von iLetzteZeile zutreffen
OK, OK ... meine Aussage das die Angaben von Rik richtig sind stimmt nicht vollständig (mir war das schon klar, ich war nur nicht aufmerksam genug beim Formulieren)



Gruß
Stephan
F3K Total
********
Beiträge: 3706
Registriert: Mo, 28.02.2011 17:49

Re: Leere Zeile

Beitrag von F3K Total »

Karolus hat geschrieben:...bestimmt nicht, falls meine Annahmen über den konkreten Inhalt von iLetzteZeile zutreffen.
Karolus, da hast Du natürlich Recht, habe nur auf den Inhalt der Klammer geachtet, nicht drauf, das ein Array gesetzt werden muss, sorry mein Fehler. Irgendwie hatte ich wohl "CopyRange" im Hinterkopf, dabei braucht man ja eine Zielzelle.
Gruß R
Antworten