Seite 1 von 1
automatisches Berechnen abschalten
Verfasst: Mo, 01.02.2010 16:52
von keksi1970
Hi,
ist es Möglich, das automatische Berechnen abzuschalten und nach aktualisierung der Daten wieder an ?
lg
Andreas
Re: automatisches Berechnen abschalten
Verfasst: Mo, 01.02.2010 17:19
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
Re: automatisches Berechnen abschalten
Verfasst: Mo, 01.02.2010 17:41
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
Zu Zeiten der Version OOo 2.x wurde damit jedoch kein Geschwindigkeitsvorteil erzielt. Messe am Besten mal selbst (F1>Timer)
Hilft das?
Re: automatisches Berechnen abschalten
Verfasst: Mo, 01.02.2010 17:42
von komma4
Huch, warum hab' ich die Antwort von DPunch nicht gesehen beim Speichern?
Re: automatisches Berechnen abschalten
Verfasst: Mo, 01.02.2010 18:51
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
Re: automatisches Berechnen abschalten
Verfasst: Mo, 01.02.2010 19:05
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!
Re: automatisches Berechnen abschalten
Verfasst: Di, 02.02.2010 15:08
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).
Re: automatisches Berechnen abschalten
Verfasst: Fr, 05.02.2010 15:30
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
Re: automatisches Berechnen abschalten
Verfasst: Fr, 05.02.2010 20:32
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
Re: automatisches Berechnen abschalten
Verfasst: So, 07.02.2010 15:40
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
Re: automatisches Berechnen abschalten
Verfasst: So, 07.02.2010 15:49
von komma4
nacheinander!
Die Array-Bearbeitung braucht nicht viel Zeit:
eine Zeile auslesen, Array-Element besetzen, Schleife
Re: automatisches Berechnen abschalten
Verfasst: So, 07.02.2010 18:01
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