Formeln im benamsten Bereich

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

Moderator: Moderatoren

gschuckar
****
Beiträge: 140
Registriert: Fr, 24.02.2006 14:27

Formeln im benamsten Bereich

Beitrag von gschuckar »

Hallo liebe OO programmierer,
in OCalc habe ich ein Sheet, welches als Datenbank funktioniert. In diesem Sheet werden mi Hilfe eines Dialoges Daten eingetragen. Unmittelbar im Anschluß werden in diesem Sheet dann Berechnungen durchgeführt. Mit jedem Eintrag wächst diese Tabelle um eine weitere Zeile. Mit dem jetzt folgendem Code bename ich die Spalten. Dabei reicht die die Benamung immer von der ersten Zeile der Einträge bis zur aktuellen. Der Datenbankbereich beginnt bei Zeile 3. Hier nun der Code:
' ---------------------------------------------
' set new NamedRanges in table Ablesungen
private sub setNamedRange() on Error goto ErrorHandler
Dim thisDocument as Object
Dim oProperties as Object
dim iActRow as Integer
thisDocument = ThisComponent
oProperties = thisDocument.getSheets().getByName("properties")
iActRow = 3 + oProperties.getCellRangeByName("countDbAblesungen").getValue
Dim oCellAdress as new com.sun.star.table.CellAddress
' first delete old names
with thisDocument.NamedRanges
if .hasByName("ablese_datum") then
.removeByName("ablese_datum")
end if
if .hasByName("ablese_jahr") then
.removeByName("ablese_jahr")
end if
if .hasByName("ablese_monat") then
.removeByName("ablese_monat")
end if
if .hasByName("ablesung_gas") then
.removeByName("ablesung_gas")
end if
if .hasByName("ablesung_wasser") then
.removeByName("ablesung_wasser")
end if
if .hasByName("ablesung_strom") then
.removeByName("ablesung_strom")
end if
if .hasByName("ablesung_extern") then
.removeByName("ablesung_extern")
end if
if .hasByName("verbrauch_gas") then
.removeByName("verbrauch_gas")'h
end if
if .hasByName("verbrauch_wasser") then
.removeByName("verbrauch_wasser")'i
end if
if .hasByName("verbrauch_strom") then
.removeByName("verbrauch_strom")'j
end if
if .hasByName("verbrauch_extern") then
.removeByName("verbrauch_extern")'k
end if
end with 'thisDocument.NamedRanges
' removebyname setzt iActRow um 1 zurueck. Warum?
' for debug reasons a MsgBox:
' msgBox iActRow
' second set new namedRanges
with thisDocument.NamedRanges
.addNewByName("ablese_datum","$Ablesungen.$A3:$A" & iActRow,oCellAdress,0)
.addNewByName("ablese_jahr","$Ablesungen.$B3:$B" & iActRow,oCellAdress,0)
.addNewByName("ablese_monat","$Ablesungen.$C3:$C" & iActRow,oCellAdress,0)
.addNewByName("ablesung_gas","$Ablesungen.$D3:$D" & iActRow,oCellAdress,0)
.addNewByName("ablesung_wasser","$Ablesungen.$E3:$E" & iActRow,oCellAdress,0)
.addNewByName("ablesung_strom","$Ablesungen.$F3:$F" & iActRow,oCellAdress,0)
.addNewByName("ablesung_extern","$Ablesungen.$G3:$G" & iActRow,oCellAdress,0)
.addNewByName("verbrauch_gas","$Ablesungen.$H3:$H" & iActRow,oCellAdress,0)
.addNewByName("verbrauch_wasser","$Ablesungen.$I3:$I" & iActRow,oCellAdress,0)
.addNewByName("verbrauch_strom","$Ablesungen.$J3:$J" & iActRow,oCellAdress,0)
.addNewByName("verbrauch_extern","$Ablesungen.$K3:$K" & iActRow,oCellAdress,0)
end with
exit sub
ErrorHandler:
MsgBox "Error " & Err & ": " & Error$ & " (line : " & Erl & ")\n" & "in mdlConnection.setNamedRange"
end sub ' setNamedRange
' -----------------------------------------------------------------------------------------------------------------------------------------------
Das funktioniert soweit recht gut. Jetzt habe ich aus dem Dokument eine Vorlage gemacht und im Template verzeichnuns als eine solche abgespeichert.
Wenn ich jetzt auf Basis dieser Vorlage ein neues Dokument erstelle und Daten eingebe - eintrage, dann werden die Bereiche richtig benamst. Aber: Wenn mit diesen Bereichen gerechnet wird, dann gibt es als Ergebniss immer 0.
Wenn ich die namen jetzt manuell lösche und hernach manuell wieder festlege, dann funktioniert alles wie gehabt.
Was verändert sich am Code, wenn man aus einem Dokument eine Vorlage macht?
Ich weis nicht weiter.
Gruß
Gerd
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Formeln im benamsten Bereich

Beitrag von Toxitom »

Hallo Gerd,

im Code ändert sich nichts - da kann ich dich beruhigen. Ich erinnere mich, so etwas ähnliches mal gehabt zuhaben. Glaube, ich habe damals einfach ein calculate() am Ende des Codes eingefügt, also den expliziten Befehl, das Sheet neu zu berechnen.

Probier das doch bitte einmal. Wirkt es nicht, sag noch mal Bescheid, dann suche ich mal :-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
gschuckar
****
Beiträge: 140
Registriert: Fr, 24.02.2006 14:27

Re: Formeln im benamsten Bereich

Beitrag von gschuckar »

Hallo und guten Morgen Thomas,
Toxitom hat geschrieben:Hallo Gerd,

im Code ändert sich nichts - da kann ich dich beruhigen. Ich erinnere mich, so etwas ähnliches mal gehabt zuhaben. Glaube, ich habe damals einfach ein calculate() am Ende des Codes eingefügt, also den expliziten Befehl, das Sheet neu zu berechnen.

Probier das doch bitte einmal. Wirkt es nicht, sag noch mal Bescheid, dann suche ich mal :-)
Habe ich gemacht. An dieser Stelle wird dann Error 12: Variable nicht definiert angezeigt.
Gruß Gerd
gschuckar
****
Beiträge: 140
Registriert: Fr, 24.02.2006 14:27

Re: Formeln im benamsten Bereich

Beitrag von gschuckar »

Hallo Thomas,
ich habe gestern Abend den Code teil von dem Dokument gelöst, will sagen: Der Code wird nicht im Dokument gespeichert. Der Effekt ist leider der Gleiche. Ich hatte das Problem vor einiger Zeit schon einmal. In der damaligen Anwendung habe ich das Problem dadurch gelöst, das ich die Bennenung der Bereiche nicht mehr über den Code hab machen lassen, sondern ich habe damals die Spalten von 3 - 65000 manuel benannt. Und das blieb dann so. Ist aber nicht Sinn der Sache. Ich möchte das die Benennung immer soweit reicht, wie der Datenbankbereich Zeilen hat.
In den nächsten Tagen versuche ich das Ganze mal mit Java. Mal sehen, ob der Effekt der Gleiche ist. Trotzdem wäre ich an einer Lösung, auch im Interesse anderer Programmierer sehr interessiert.
Ich bekomme zum Wochende eine Maschine mit Windows. Mal sehen, ob der Effekt dort auch festzustellen ist.
Gruß Gerd
gschuckar
****
Beiträge: 140
Registriert: Fr, 24.02.2006 14:27

Re: Formeln im benamsten Bereich

Beitrag von gschuckar »

Hallo ,
ich habe nicht bis Morgen warten können. Jetzt habe ich mal ein altes Notebook reaktiviert. Hier ist Windows 2000 und OpenOffice 2.2.0 drauf.
Ich habe ein Dokument angelegt, daten eingetragen und schwupp: Funktioniert. Dann habe ich mittels der Vorlage ein weiters Dokument angelegt, Daten eingetragen und Schwupp: Der Effekt ist der Gleiche. Im zweiten Dokument werden in den Formeln die Benannten Bereiche nicht oder falsch, mit dem Ergebnis 0 berechnet.
Kann es vielleicht sein, das man in zwei verschiedenen Dokumenten auch, wenn sie nicht gleichzeitig geöffnet sind, keine gleichen Namesnbereiche haben sollte? Speichert OO die Bereiche von geschlossenen Dokumenten irgendwo ab, wo sie sich dann gegegnseitig beeinflussen? Ist vielleicht ein bischen gewagt, diese Theorie, aber wie war das noch mit den Pferden vor der Apotheke?
Gruß Gerd
Antworten