Formeln mittels Array einfügen

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

Moderator: Moderatoren

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

Formeln mittels Array einfügen

Beitrag von Jörg »

Hallo Fachleute,
der u.g. Code funktioniert, nur ist leider die Performance nicht so toll.
Daher hoffe ich, dass das mit Array besser ginge, zumal dieser nicht der einzigste seiner Art ist :oops:
Vielleicht findet ja einer Zeit.
Vielen Dank.

Code: Alles auswählen

Sub fuellen_Rechnung

 odoc = ThisComponent
   oStammSheet = ThisComponent.sheets.getByName("Rechnungen")
      With oStammSheet ' Letzte Zeile der Spalte AI im 2. Tabellenblatt ermitteln
         x = .Columns("34:45").queryEmptyCells()
         iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
      End With
'Zellbereich AI:AT
      mycell = oStammSheet.getCellRangeByName("AI" & iLetzteZeile )
      mycell.FormulaLocal  = "=Zziel"
	  mycell = oStammSheet.getCellRangeByName("AJ" & iLetzteZeile )
      mycell.FormulaLocal  = "=mdat1"
	  mycell = oStammSheet.getCellRangeByName("AK" & iLetzteZeile )
      mycell.FormulaLocal  = "=Maz1"
      mycell = oStammSheet.getCellRangeByName("AL" & iLetzteZeile )
      mycell.FormulaLocal  = "=mdat2"
      mycell = oStammSheet.getCellRangeByName("AM" & iLetzteZeile )
      mycell.FormulaLocal  = "=Maz2"
      mycell = oStammSheet.getCellRangeByName("AN" & iLetzteZeile )
      mycell.FormulaLocal  = "=mdat3"
      mycell = oStammSheet.getCellRangeByName("AO" & iLetzteZeile )
      mycell.FormulaLocal  = "=Maz3"
      mycell = oStammSheet.getCellRangeByName("AP" & iLetzteZeile )
      mycell.FormulaLocal  = "=Zinstage"
      mycell = oStammSheet.getCellRangeByName("AQ" & iLetzteZeile )
      mycell.FormulaLocal  = "=Zinssatz"
      mycell = oStammSheet.getCellRangeByName("AR" & iLetzteZeile )
      mycell.FormulaLocal  = "=Zinsen"
      mycell = oStammSheet.getCellRangeByName("AS" & iLetzteZeile )
      mycell.FormulaLocal  = "=Mahngebühr"
      mycell = oStammSheet.getCellRangeByName("AT" & iLetzteZeile )
      mycell.FormulaLocal  = "=Anrede"
     
End Sub
Gruß Jörg

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

Re: Formeln mittels Array einfügen

Beitrag von Karolus »

Hallo

Code: Alles auswählen

…

zielbereich = oStammSheet.getCellRangeByName("AI" & iLetzteZeile & ":AT" &iLetzteZeile)

zielbereich.FormulaArray = array(array("=zZiel", "=mDat1", … , "=Anrede"))
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: Formeln mittels Array einfügen

Beitrag von Jörg »

Hallo Karolus,
vielen Dank für Deine prompte Hilfe. Es funktioniert.
(Habe nur z.Bsp. aus zZiel ->Zziel bzw. aus mDat1 -> mdat1 gemacht, wie in meinem Ursprungscode)

Werd nun mal die anderen ihrer Art bearbeiten und hoffe, das die Performance besser wird.

Also vielen Dank und bis zum nächsten Mal.

P.S. Ist zwar nicht das richtige Unterforum:
Aber in der Tagespresse las ich kürzlich, dass der Fortbestand von OpenOffice gefährdet sei, weil zu wenig Entwickler an der Sache arbeiten.
Ist da was dran?
Gruß Jörg

Win 10 Pro AOO 4.1.15
Thomas Mc Kie
******
Beiträge: 919
Registriert: Mo, 12.04.2010 00:37

Re: Formeln mittels Array einfügen

Beitrag von Thomas Mc Kie »

Jörg hat geschrieben:P.S. Ist zwar nicht das richtige Unterforum:
Aber in der Tagespresse las ich kürzlich, dass der Fortbestand von OpenOffice gefährdet sei, weil zu wenig Entwickler an der Sache arbeiten.
Ist da was dran?
Und daher auch nur der Verweis auf die Infos dazu hier im Forum. viewtopic.php?f=16&t=67388 Weitere Diskussion dazu möglichst in dem Thema oder in einem neuen.
Viele Grüße
Thomas
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Formeln mittels Array einfügen

Beitrag von Jörg »

@Thomas-Danke für den Hinweis.
Hallo Fachleute, während die Anwendung des von Karolus vorgeschlagenen Codes bei anderen Codes problemslos klappte,
krieg ich beim folgenden Versuch eine Laufzeitfehlermeldung:
Hier der ursprüngliche Code:

Code: Alles auswählen

sub neue_Preisliste ' in Eingabemaske aktivieren

myDoc = thisComponent
mySheet = myDoc.sheets(2)

mycell = mysheet.getCellRangebyName("$I16")
mycell.formulalocal= "=neuein1"
mycell = mysheet.getCellRangebyName("$I17")
mycell.formulalocal= "=neuein2"
mycell = mysheet.getCellRangebyName("$I18")
mycell.formulalocal= "=neuein3"
mycell = mysheet.getCellRangebyName("$I19")
mycell.formulalocal= "=neuein4"
mycell = mysheet.getCellRangebyName("$I20")
mycell.formulalocal= "=neuein5"
mycell = mysheet.getCellRangebyName("$J16")
mycell.formulalocal= "=neuzu1"
mycell = mysheet.getCellRangebyName("$J17")
mycell.formulalocal= "=neuzu2"
mycell = mysheet.getCellRangebyName("$J18")
mycell.formulalocal= "=neuzu3"
mycell = mysheet.getCellRangebyName("$J19")
mycell.formulalocal= "=neuzu4"
mycell = mysheet.getCellRangebyName("$J20")
mycell.formulalocal= "=neuzu5"
mycell = mysheet.getCellRangebyName("$R$2")
mycell.string = "neu"
mycell = mysheet.getCellRangebyName("$I13")
mycell.string = "Achtung neue Preisliste aktiv !!"
beep

end sub 
Mein Versuch :

Code: Alles auswählen

sub neue_Preisliste ' in Eingabemaske aktivieren

myDoc = thisComponent
mySheet = myDoc.sheets(2)
zielbereich = mySheet.getCellRangeByName("I16:I20")
zielbereich.FormulaArray = array(array("=neuein1", "=neuein2","=neuein3","=neuein4","=neuein5"))
zielbereich2 = mySheet.getCellRangeByName ("J16:J20")
zielbereich2.FormulaArray = array(array( "=neuzu1","=neuzu2","=neuzu3","=neuzu4","=neuzu5"))
mycell = mysheet.getCellRangebyName("$R$2")
mycell.string = "neu"
mycell = mysheet.getCellRangebyName("$I13")
mycell.string = "Achtung neue Preisliste aktiv !!"
beep
end sub
Vielen Dank!
Gruß Jörg

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

Re: Formeln mittels Array einfügen

Beitrag von Karolus »

Hallo

Naja, du hast hier keinen Bereich in einer Zeile sondern einen in 2 Spalten * 5 Zeilen

Code: Alles auswählen

zielbereich = mySheet.getCellRangeByName("I16:J20")
zielbereich.FormulaArray = array( array("=neuein1", "=neuzu1"),_
                                  array("=neuein2", "=neuzu2"),_
                                  array("=neuein3", "=neuzu3"),_
                                  array("=neuein4", "=neuzu4"),_
                                  array("=neuein5", "=neuzu5"))
Nur zur Demonstration, in python könnte man da schon ein einiges an Geschreibsel einsparen:

Code: Alles auswählen

    zielbereich = mySheet.getCellRangeByName("I16:J20")
    ein, zu = "=neuein{}".format, "=neuzu{}".format
    zielbereich.FormulaArray = tuple((ein(i), zu(i)) for i in range(1,6))
Zuletzt geändert von Karolus am Sa, 24.09.2016 11:42, insgesamt 1-mal geändert.
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: Formeln mittels Array einfügen

Beitrag von Jörg »

Hallo Karolus,
Vielen Dank, habs gleich auch zur "Aktivierung" der Alten Preisliste angewendet.
Wünsche ein schönes Wochenende. :D
Gruß Jörg

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

Re: Formeln mittels Array einfügen

Beitrag von Jörg »

Hallo Fachleute,
ich habe da noch einen Code, bei dem das Einfügen der Formeln im Bereich E8:E18 erfolgen soll.
Wenn ich das richtig verstanden habe, benötigt es hierzu ein
eindimensionales Array.
Meine Versuche ein solches zu erstellen, scheitern leider.
Mein Versuch sieht folgendermaßen aus.

Code: Alles auswählen

sub Formeln
 myDoc = thisComponent
  mySheet = myDoc.sheets(1)   
Dim Array(11)
zielbereich = mySheet.GetCellRangeByName ("E8:E18")
Array()=  array (array("=Patnr","=PatKK","=Patanrede","=Patname","=Patvorname","=Patplz","=Patort","=Patstrasse","=Patgebdat","=Patversnr","=Patdatum"))
for i = 1 to 11
zielbereich.FormulaArray=  Array ()
next i
 end sub
Die Fehlermeldung lautet:
Die Dimensionsangaben passen nicht zueinander!
Wär schön, wenn jemand noch mal drüber schaut. Danke.
Gruß Jörg

Win 10 Pro AOO 4.1.15
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Formeln mittels Array einfügen

Beitrag von Stephan »

naja, Dein Array ist falsch dimensioniert, es hat nur eine 'Zeile' statt der notwendigen 11. Schau Dir den Code von Karolus an, oder wenn Du unsicher bist mache es so (nicht getestet):

Code: Alles auswählen

array1 = array("=Patnr","=PatKK","=Patanrede","=Patname","=Patvorname","=Patplz","=Patort","=Patstrasse","=Patgebdat","=Patversnr","=Patdatum")
Dim array2(10)

For i = 0 To 10
	array2(i) = array(array1(i))
Next i
array2 ist dann das Array das Du an den Zellbereich übergeben kannst


Gruß
Stephan
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Formeln mittels Array einfügen

Beitrag von balu »

Hallo Jörg,
wenn jemand noch mal drüber schaut.
Habe ich, und kann nur eins sagen. Befasse dich noch mal in Ruhe mit Arrays, und der zählweise. Gibt ja genügend Infoquellen dazu.

Aber um es vorweg zu nehmen,

Code: Alles auswählen

Dim Array(11)
Das ist in diesem Falle falsch.
Nicht weil Du nicht gesagt hast ob es sich um ein String-Array handelt, oder ähnliches, sondern weil die Größendimension nicht stimmt. Denn wenn Du ein Array so deklarierst, dann umfasst das Array 12 Elemente, und zwar von 0, in Worten NULL, bis 11.

Du kannst jetzt daher gehen und sagen: *Dimm Array (10)*, dann musst Du aber auch deine Schleife nicht bei 1 anfangen lassen, sondern bei 0 und sie muss bei 10 enden.

Oder aber Du machst das so rum

Code: Alles auswählen

Dim Array(1 to 11) as String
Dann hast Du deine 11 Elemente, und die Schleife kannst Du so lassen wie sie ist, also beginnend mit 1.


Ich seh das Stephan schneller war, aber trotzdem lasse ich meine Antwort so stehen.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Formeln mittels Array einfügen

Beitrag von Jörg »

Vielen Dank Euch beiden,
konnte Eure Hinweise erfolgreich umsetzen.

Code: Alles auswählen

sub Stamm_Daten_aendern
            
    myDoc = thisComponent
    mySheet = myDoc.sheets(1)   
     
    mycell = mysheet.getCellRangebyName("$E$6")
    mycell.string = "Aktuelle Aktion: Patientendaten ändern"
    Dim array2(10)

zielbereich = mySheet.GetCellRangeByName ("E8:E18")
array1 = array("=Patnr","=PatKK","=Patanrede","=Patname","=Patvorname","=Patplz","=Patort","=Patstrasse","=Patgebdat","=Patversnr","=Patdatum")

For i = 0 To 10
   array2(i) = array(array1(i))
   
Next i
zielbereich.formulaArray =  array2()
beep
end sub
Ob aber alles verstanden habe ?????
Danke Euch !!
Gruß Jörg

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

Re: Formeln mittels Array einfügen

Beitrag von Karolus »

Hallo

Ich hab zwei Fragen dazu.

1.) Gibt es einen Grund nur Formelverweise auf diese Namensbereiche einzufügen, anstatt gleich die Inhalte zu kopieren?

2.) Sind diese benannten Zellen irgendwie frei verteilt, oder liegen die auch alle in der gleichen Reihenfolge in einer Zeile oder einer Spalte?

Karolus
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: Formeln mittels Array einfügen

Beitrag von Jörg »

Hallo Karolus,
hast eigentlich recht :)
Der ursprüngliche Code stammt noch aus den Anfängen. Hatte ich damals so gebraucht bzw. nicht besser überblickt.
Die zu kopierenden Inhalte kommen aus Tabelle 3(Index), Quellbereiche: D8:I8,C10:F10.

Wie dem auch sei.
???? Habs schon mal probiert. .....o.E. :(
Da es aber so ja geht, würd mich trotzdem freuen.
Gruß Jörg

Win 10 Pro AOO 4.1.15
Antworten