automatisches Berechnen abschalten

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

Moderator: Moderatoren

keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

automatisches Berechnen abschalten

Beitrag von keksi1970 »

Hi,

ist es Möglich, das automatische Berechnen abzuschalten und nach aktualisierung der Daten wieder an ?

lg
Andreas
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: automatisches Berechnen abschalten

Beitrag von DPunch »

Aloha

Code: Alles auswählen

Sub DisableAutoCalc
oDoc = thisComponent
If oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
oDoc.enableAutomaticCalculation(False)
End If

'Mach irgendwas

If oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
oDoc.enableAutomaticCalculation(True) 
End If
End Sub
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: automatisches Berechnen abschalten

Beitrag von komma4 »

Ja.

Code: Alles auswählen

Sub calculateCalcSheetOff
ThisComponent.enableAutomaticCalculation( FALSE ) 
End Sub
Das Wieder-Anschalten löst jedoch keine Neuberechnung aus.
Das erreichst Du mit

Code: Alles auswählen

ThisComponent.calculate()
Zu Zeiten der Version OOo 2.x wurde damit jedoch kein Geschwindigkeitsvorteil erzielt. Messe am Besten mal selbst (F1>Timer)

Hilft das?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: automatisches Berechnen abschalten

Beitrag von komma4 »

Huch, warum hab' ich die Antwort von DPunch nicht gesehen beim Speichern?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: automatisches Berechnen abschalten

Beitrag von keksi1970 »

hi, danke für eure ANtworten.

Ich glaube schon, daß es einen riesigen Geschwindigkeitsvorteil gibt.

folgendes Szenario :

Ich habe eine Datei mit 8 Tabellen + Jahresübersicht
Jede Tabelle hat 8 Spalten und 365 +24 Zeilen mit Formeln

Nun liest ein Makro 6 verschiedene txt-Dateien aus und schreibt sie in eine 9.Tabelle, aus der die Formeln Ihre Daten beziehen.

wenn nun nach jedem Eintrag alle Tabellen neu berechnet werden, 20-40000 Datensätze *2 sekunden Neuberechnung, spart man durch das Unterlassen jede Menge Zeit.
Das einlesen der txt-Dateien dauert ohne weitere Formeln ca. 1 Minute, mit ... nun ja, einfach mal n Snickers, wenns wieder länger dauert ^^

lg
Andreas
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: automatisches Berechnen abschalten

Beitrag von komma4 »

keksi1970 hat geschrieben:wenn nun nach jedem Eintrag alle Tabellen neu berechnet werden
Hier liegt IMHO das Potential von Zeiteinsparung: schreibe die Werte nicht einzeln in die Zellen, sondern als Array!

Suchbgeriff: oRange.getDataArray()

Einmal einfügen - einmal berechnen

Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: automatisches Berechnen abschalten

Beitrag von DPunch »

Kann komma4 nur zustimmen - mit einem (Data-)Array kannst Du unglaublich viel Zeit im Vergleich zum einzelnen Eintragen aller Daten in die Zellen rausholen.

Anstatt also jeden einzelnen Datensatz aus den Txt-Dateien auszulesen und direkt in die Zelle(n) in der 9. Tabelle zu schreiben, pack Dir die Daten erstmal in ein Array und schreibe dieses mittels SetDataArray in die Tabelle - das sollte den Zeitaufwand mindestens halbieren (so zumindest meine Erfahrung bei vielen Daten, die in Zellen geschrieben werden sollen).
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: automatisches Berechnen abschalten

Beitrag von keksi1970 »

hi,

wie gesagt, das Auslesen und Schreiben an sich ist nicht das Problem(a)

nur das sofort berechnet wird, und da hat komma4 mir schon extrem geholfen

zu Problem a

ich habs erst mal hingekriegt, daß ich die Textdateien (zeile für Zeile) in EINEN String packe und als Split() in die Zellen eintrage.

wenn ihr mir allerdings einen Tipp gebt, wie ich aus einem setdataArray() die einzelnen Daten in verschiedene Zellen setzen kann, würd ich das nachvollziehen können. Inzwischen sollten alle Rechner auf 3.11 sein, unter 2.41 verhält sich setdataarray etwas anders

Problemstellung:

Grösse der Textdatei : unbekannt
Anzahl Daten : unbekannt
Aufbau der Dateien :
Datum(als Zahl(also 40290 zB));wert1.00;Wert2.00;Wert3.00

Setze Wert1.00 in Spalte 1, Wert2.00 in Spalte 5, Wert3 in SPalte 9, wo das Datum stimmt ;) (.getcellrangebyname("A" & Datum-40177))
Einzeln Auslesen kein Problem, aber mit setdataArray krieg ich das so nicht hin.

habt ihr da n Vorschlag ?

LG
Andreas
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: automatisches Berechnen abschalten

Beitrag von DPunch »

Die wichtige Frage ist, ob die Daten in den Textdateien in irgendeiner Art und Weise sortiert sind.
Wenn nicht, müsstest Du halt jede Zeile einzeln mit einem DataArray beschreiben, aber selbst das ist zumindest auf diesem Rechner ca. 40% schneller als jede Zelle einzeln anzusprechen.
Wenn die Daten sortiert sind, kannst Du mehrere Zeilen umspannende Arrays bilden und somit vermutlich nochmal mehr Geschwindigkeit rauskitzeln.

Für nicht sortierte Rohdaten würde das ungefähr so aussehen:

Code: Alles auswählen

oDoc = thisComponent
oSheet = oDoc.Sheets.getByName("Tabelle9")
	
Do While bNochmehrDatensaetze = True
	'Datum und Werte aus Datei einlesen
	nThisDate = Datum - 40177
	oRange = oSheet.getCellRangeByName("A" & nThisDate & ":I" & nThisDate)
	aData = oRange.getDataArray
	aData(0)(0) = Wert1
	aData(0)(4) = Wert2
	aData(0)(8) = Wert3
	oRange.setDataArray(aData)
Loop
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: automatisches Berechnen abschalten

Beitrag von keksi1970 »

Hi,

danke erstmal für die Hilfe.

Also die Daten sind folgendermassen in der Textdatei sortiert :

Datum (Aufsteigend);Wert1.00;Wert2.00;Wert3.00 usw

stellsich mir die Frage, ob ich alle Daten auf einmal in ein Array packen kann (ohne Schleife)
wie ich die 1. Zeile aus einer textdatei auslesen kann, weiß ich, die naechste Zeile danach auch,aber krieg ich auch alle Daten auf einmal in ein Array?

LG
Andreas
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: automatisches Berechnen abschalten

Beitrag von komma4 »

nacheinander!

Die Array-Bearbeitung braucht nicht viel Zeit:
eine Zeile auslesen, Array-Element besetzen, Schleife
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: automatisches Berechnen abschalten

Beitrag von turtle47 »

Hallo Zusammen,

ein Array ist ja ein zusammenhängender Bereich den Andreas so wie ich es sehe nicht hat.
keksi1970 hat geschrieben:Wert1.00 in Spalte 1, Wert2.00 in Spalte 5, Wert3 in SPalte 9
Man könnte als Lösung vielleicht die Textdatei zeilenweise auslesen, splitten und drei "Spaltenarrays" in einem Rutsch
anlegen welche dann in die entsprechenden Spalten der Tabelle mit setDataArray übertragen werden.

Oder habe ich da etwas übersehen?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten