automatisches Berechnen abschalten

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: automatisches Berechnen abschalten

Re: automatisches Berechnen abschalten

von turtle47 » So, 07.02.2010 18:01

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

Re: automatisches Berechnen abschalten

von komma4 » So, 07.02.2010 15:49

nacheinander!

Die Array-Bearbeitung braucht nicht viel Zeit:
eine Zeile auslesen, Array-Element besetzen, Schleife

Re: automatisches Berechnen abschalten

von keksi1970 » So, 07.02.2010 15:40

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

von DPunch » Fr, 05.02.2010 20:32

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

von keksi1970 » Fr, 05.02.2010 15:30

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

von DPunch » Di, 02.02.2010 15:08

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

von komma4 » Mo, 01.02.2010 19:05

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

von keksi1970 » Mo, 01.02.2010 18:51

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

von komma4 » Mo, 01.02.2010 17:42

Huch, warum hab' ich die Antwort von DPunch nicht gesehen beim Speichern?

Re: automatisches Berechnen abschalten

von komma4 » Mo, 01.02.2010 17:41

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?

Re: automatisches Berechnen abschalten

von DPunch » Mo, 01.02.2010 17:19

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

automatisches Berechnen abschalten

von keksi1970 » Mo, 01.02.2010 16:52

Hi,

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

lg
Andreas

Nach oben