Schreib- / Lesegeschwindigkeit zu gering

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

vollkern
*
Beiträge: 11
Registriert: Do, 21.01.2010 21:36

Schreib- / Lesegeschwindigkeit zu gering

Beitrag von vollkern »

Hallo allerseits,

ich möchte von VBA (Excel) nach OOo (Calc) migrieren und muß dabei ein relativ umfangreiches Programm (ca. 20.000 Codezeilen) übersetzen. Da freu ich mich auch schon drauf ;-)

Nun ist mir bei ersten Tests aufgefallen, daß der Schreibzugriff in Tabellenblättern extrem langsam ist (und der Lesezugriff demzufolge vermutlich auch) - etwa 10 mal langsamer als in Excel. Kann man da irgendwas beschleunigen?

Ich greife mit
oDocument = ThisComponent
oSheet = oDokument.Sheets.GetByIndex(0)
auf das Tabellenblatt zu. (Also nicht über UNO - ist das richtig??)

Kann mir da jemand helfen?
Ich bin da leider noch ganz am Anfang und möchte die Sache nicht aufgeben müssen...

Danke schon mal
Volker
famo
*****
Beiträge: 275
Registriert: Do, 06.01.2005 00:15
Wohnort: Berlin

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von famo »

Hallo Volker,
es kann durchaus sein das Calc/Basic soviel langsamer ist, ohne das du etwas falsch machst. Für eine fundiertere Antwort würde ich es aber mal im Basic & Java Unterforum versuchen.

Aber mal abgesehen davon, bist du sicher dass du dich mit 20.000 Codezeilen noch im richtigen Programm befindest?
Du hast leider nicht geschrieben wofür das gut sein soll, mein Tip ins Blaue: schon mal was von MATLAB gehört?

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

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von komma4 »

@vollkern: Willkommen im Forum.
Ja, da gibt es noch Tricks...

@famo: Gute Antwort!
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)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von Stephan »

Nun ist mir bei ersten Tests aufgefallen, daß der Schreibzugriff in Tabellenblättern extrem langsam ist (und der Lesezugriff demzufolge vermutlich auch) - etwa 10 mal langsamer als in Excel.


Ja, das ist so. 10-mal langsamer ist wahrscheinlich ein recht guter Durchschnittswert, denn Starbasic ist im Vergleich zu VBA nicht in Allem gleich langsam.
Kann man da irgendwas beschleunigen?
Du mußt Werte als Array lesen und schreiben und nicht einzelne Zellen, im Prinzip also z.B.:

Code: Alles auswählen

Sub schreiben()
tmp = Timer()
Dim x(19999)
Dim y(0)
For i = 0 To 19999
	x(i) = Array(RND)
Next i
ThisComponent.Sheets().getbyIndex(0).getCellRangeByPosition(0, 0, 0, 19999).setDataArray(x())
zeit = Timer() - tmp
Msgbox (zeit & " Sekunden", 0, "Zeitdauer")
End Sub

Code: Alles auswählen

Sub lesen()
tmp = Timer()
x = ThisComponent.Sheets().getbyIndex(0).getCellRangeByPosition(0, 0, 0, 19999).getDataArray()
For i = 0 To UBOUND(x())
	y = x(i)
	zellwert = y(0)
Next i
zeit = Timer() - tmp
Msgbox (zeit & " Sekunden", 0, "Zeitdauer")
End Sub

Im Übrigen ist es generell eine schlechte Idee zu versuchen VBA-Code 1:1 nach Starbasic zu übertragen, da das zu diversen Problemen bzw. sehr ungünstigen Implementierungen führt (bzw. führen kann), es gilt vielmehr zu überlegen was der VBA-Code inhaltlich tut und das dann (wissend um Möglichkeiten und um Vor- und Nachteile von StarBasic) in Starbasic zu implementieren.


Gruß
Stephan
vollkern
*
Beiträge: 11
Registriert: Do, 21.01.2010 21:36

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von vollkern »

Vielen Dank an alle!

@famo: Ich werde nochmal eine kleine Anfrage im Forum Basic reinstellen.
Ob ich mich im richtigen Programm befinde? Ich weiß, daß Basic schon lange nicht mehr ideal ist. Hier eine kurze Beschreibung des Programms:
Software für die Unterstützung des Betriebes einer Lieferbäckerei. Highlights: professionelle Rezeptverwaltung, Warenwirtschaft, Produktionsaufträge, Kundenverwaltung, Auswertungen u.v.m. Ein vergleichbares Programm gibt es nicht, es würde sich immer um Kompromisse handeln (irgendwas fehlt immer) Preis anderer Anbieter: 8...14 TEUR.
Beides, Bäckerei und Software, sind vor 10 Jahre gegründet worden und entwickeln sich seither dynamisch weiter.
Folgende Punkte sprechen für eine Weiterentwicklung der Software in Basic:
1. Ich kann keine andere Sprache.
2. In Excel/Calc können viele Vorgänge direkt im Blatt/Formular vorgenommen werden (Formatierungen z.B.), während in anderen Applikationen dafür erst Routinen geschrieben werden müssen.
3. Ich brauche einen nahtlosen Übergang. Eine neue Software würde den höchstwahrscheinlich nicht unterstützen.

MATLAB hab ich mir angesehen. Ist nicht das richtige.

@komma4:
komma4 hat geschrieben:@vollkern: Willkommen im Forum.
Ja, da gibt es noch Tricks...
... ich bin gespannt... :-P

@Stephan:
Stephan hat geschrieben:Im Übrigen ist es generell eine schlechte Idee zu versuchen VBA-Code 1:1 nach Starbasic zu übertragen, da das zu diversen Problemen bzw. sehr ungünstigen Implementierungen führt (bzw. führen kann), es gilt vielmehr zu überlegen was der VBA-Code inhaltlich tut und das dann (wissend um Möglichkeiten und um Vor- und Nachteile von StarBasic) in Starbasic zu implementieren.
Ja, sehr richtig! Ich wollte die Grundstruktur behalten und von den Abläufen ca. 80% übernehmen, heißt übertragen. Nur: Welches sind die Vorteile in StarBasic zu VBA?
Den Code probiere ich aus.


Viele Grüße
Volker
famo
*****
Beiträge: 275
Registriert: Do, 06.01.2005 00:15
Wohnort: Berlin

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von famo »

Hallo Volker,
vollkern hat geschrieben: Software für die Unterstützung des Betriebes einer Lieferbäckerei. Highlights: professionelle Rezeptverwaltung, Warenwirtschaft, Produktionsaufträge, Kundenverwaltung, Auswertungen u.v.m. Ein vergleichbares Programm gibt es nicht, es würde sich immer um Kompromisse handeln (irgendwas fehlt immer) Preis anderer Anbieter: 8...14 TEUR.
ja, Matlab ist sicher nicht das richtige dafür, bezweifele auch (wie du schon schreibst) das es dafür überhaupt ein Programm gibt, weil hier so viele Funktionen in ein Programm gestopft worden sind.
vollkern hat geschrieben: Beides, Bäckerei und Software, sind vor 10 Jahre gegründet worden und entwickeln sich seither dynamisch weiter.
Also bei der Software wurde wohl mit Excel begonnen und diese dann nach und nach mit immer mehr Funktionen vollgepfropft, das ist m.E. eine eher wenig dynamische Entwicklung... :?
Bei Excel als auch bei Calc handelt es sich um Tabellenkalkulationen, die vlt. für diese Zwecke missbraucht werden können aber sicherlich nicht dafür geeignet sind.

Ich würde dir empfehlen auf ca. 2 - 3 spezialisierte Programme (+ Calc) umzusteigen, die Ihre jeweiligen Aufgaben dann ohne Frickelei erledigen - der Austausch zwischen den Programm erfordert diese dann evtl. in einem gewissen Maß:
vollkern hat geschrieben: Folgende Punkte sprechen für eine Weiterentwicklung der Software in Basic:
1. Ich kann keine andere Sprache.
2. In Excel/Calc können viele Vorgänge direkt im Blatt/Formular vorgenommen werden (Formatierungen z.B.), während in anderen Applikationen dafür erst Routinen geschrieben werden müssen.
3. Ich brauche einen nahtlosen Übergang. Eine neue Software würde den höchstwahrscheinlich nicht unterstützen.
zu 1. Sollte hoffentlich nicht nötig sein (s.o.).
zu 2. Andere Applikationen haben i.d.R. schon vorgefertigte Ausdruck-Vorlagen, so dass hier nicht manuell Formate etc. eingestellt werden müssen. Für eigene spezifische Auswertungen, die durch die anderen Programme nicht abgedeckt werden, kann ja nach wie vor die Tabellenkalkulation benutzt werden.
zu 3. Befürchte du wirst auch keine nahtlosen Übergang von Excel/VBA zu Calc/Basic hinbekommen, selbst wenn du allen Code "übersetzt" bekommst, so wird es doch Unterschiede in der Benutzerführung geben.


Hoffe das hilft, vg
famo

PS:
Für die spezialisierten Programm gibt es auch OpenSource Lösungen mit durchaus professionellem Anspruch:
GnuCash: http://www.gnucash.org/de/
Gourmet: http://grecipe-manager.sourceforge.net/
hier nur zwei, bei intensiverer Recherche läßt sich sicherlich noch mehr finden ...
vollkern
*
Beiträge: 11
Registriert: Do, 21.01.2010 21:36

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von vollkern »

Hallo Stephan,

vielen Dank für den Hinweis, ein Array direkt einzulesen. Klappt prima. Die Geschwindigkeit ist fast doppelt (!) so schnell wie in Excel.
Bei großen Datenmengen sind die Daten ja sowieso wie in Arrays strukturiert, so daß es nur eine kleine Änderung im Programm wäre.
Nur habe ich in der Hilfe keinen solchen Befehl (setArray) gefunden. Überhaupt habe ich noch kein wirklich vollständiges Kompendium gefunden... Ich suche weiter. Mit den Auflistungen DBG_Properties usw. komme ich nicht zurecht.

Vielen Dank soweit und viele Grüße
Volker
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von Stephan »

Nur habe ich in der Hilfe keinen solchen Befehl (setArray) gefunden.
Es handelt sich nicht um einen Befehl sondern um eine Methode des Interfaces XCellRangeData:
http://api.openoffice.org/docs/common/r ... eData.html

Solche Methoden sind natürlich nicht Bestandteil der Sprache (wie bei VBA sinngemäß ebenfalls nicht) sondern leiten sich vom Objektmodell bzw. der API ab. Sie stehen deshalb nicht in der OOo-Hilfe (dort stehen nur sprachspezifische (=StarBasic-spezifisch) Dinge), sondern in der IDL-Referenz:
http://api.openoffice.org/docs/common/r ... le-ix.html



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

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von komma4 »

vollkern hat geschrieben:Mit den Auflistungen DBG_Properties usw. komme ich nicht zurecht.
Volker: nimm einen anständigen Debugger, wie XRay oder MRI

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)
vollkern
*
Beiträge: 11
Registriert: Do, 21.01.2010 21:36

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von vollkern »

Hallo famo,

vielen Dank für Deine Antwort. Du hast Dich gut in die Problematik reingedacht, ohne daß ich viel erklären mußte.
famo hat geschrieben:Also bei der Software wurde wohl mit Excel begonnen und diese dann nach und nach mit immer mehr Funktionen vollgepfropft, das ist m.E. eine eher wenig dynamische Entwicklung... :?
Bei Excel als auch bei Calc handelt es sich um Tabellenkalkulationen, die vlt. für diese Zwecke missbraucht werden können aber sicherlich nicht dafür geeignet sind.
Exakt.
famo hat geschrieben: Ich würde dir empfehlen auf ca. 2 - 3 spezialisierte Programme (+ Calc) umzusteigen, die Ihre jeweiligen Aufgaben dann ohne Frickelei erledigen
Schon allein die Rezeptverwaltung gibt es nur in professionellen Backprogrammen. Sorry, aber der Laie versteht unter Rezept immer nur Zutat1 + Zutat2 + Zutat3 = Produkt - fertig. Das ist alles viel viel komplizierter. Der gesamte Arbeitsablauf einer Bäckerei von morgens bis morgens wird quasi virtuell nachgestellt, da müssen Zeiten eingehalten, die Warenwirtschaft kontrolliert werden und und und. Das ist - leider - nicht eben mal mit einem separatem Programm plus Anbindung zu machen.
famo hat geschrieben: Für die spezialisierten Programm gibt es auch OpenSource Lösungen mit durchaus professionellem Anspruch:
GnuCash: http://www.gnucash.org/de/
Gourmet: http://grecipe-manager.sourceforge.net/
hier nur zwei, bei intensiverer Recherche läßt sich sicherlich noch mehr finden ...
GnuCash sieht super aus! Wenn ich zu Linux (irgendwann mal) wechsle, wäre das schon mal mein Favourit (das Programm deckt aber 'nur' die Finanzsoftware ab).
grecipe-manager ist ein typisches Kochrezept-Projekt, hab ich oben schon runtergemacht. (Nichts gegen die Köche - sind halt keine Bäcker).

Leider leider muß ich Dir Recht geben, daß die Realisierung meiner Anforderungen in StarBasic + Calc ein sehr fauler Kompromiß ist, der letztendlich auf Kosten der Performance geht. Ich weiß mir aber keinen anderen Rat - die Alternative wäre, in Windows zu bleiben und mir ein professionelles Programm für besagte 8...14 TEUR zuzulegen.

Eine letzte Möglichkeit sehe ich noch im koppeln von Base (für die Datenquellen) und Calc (+Writer für die Ausgaben). Nur leider fehlen mir die Erfahrungen im Programmieren mit Datenbanken. Erste (oberflächliche) Tests zeigten auch, daß allein die Kunden-Datenbank ungeheuer groß und schwerfällig wäre.

Hast Du noch einen Rat? Gerne auch außerhalb dieses Forums - ist vielleicht für die anderen Leser mittlerweile etwas langweilig...

Viele Grüße
Volker
vollkern
*
Beiträge: 11
Registriert: Do, 21.01.2010 21:36

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von vollkern »

Hallo Stephan und komma4,

vielen Dank für Tips udn Links - das sind dann meine nächsten Stationen.

UND DANKE FÜR DIE SCHNELLE UND ZIELSICHERE BEHANDLUNG IN DIESEM FORUM. MAN FÜHLT SICH SEHR GUT AUFGEHOBEN!

Viele Grüße
Volker
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von Stephan »

Leider leider muß ich Dir Recht geben, daß die Realisierung meiner Anforderungen in StarBasic + Calc ein sehr fauler Kompromiß ist, der letztendlich auf Kosten der Performance geht. Ich weiß mir aber keinen anderen Rat
der Rat wäre der das Ganze zunächst in eine Datenbankapplikation zu überführen (also Base verwenden, als DB jedoch nicht die interne sondern bespielsweise MySQL), das verbessert zwar nicht die Langsamkeit von Basic, aber es bringt die Dinge schonmal in die richtige Richtung - Datenbank statt Tabellenkalkulation).
die Alternative wäre, in Windows zu bleiben und mir ein professionelles Programm für besagte 8...14 TEUR zuzulegen
das kann ich funktionell nicht beurteilen, preislich jedoch scheint mir das zumindest dann eher günstig, wenn Du alternativ davon sprichst allein 20.000 Zeilen VBA umstellen zu müssen.
Eine letzte Möglichkeit sehe ich noch im koppeln von Base (für die Datenquellen) und Calc (+Writer für die Ausgaben). Nur leider fehlen mir die Erfahrungen im Programmieren mit Datenbanken.


Naja, ich frage mich nur ob Du überhaupt den Arbeitsaufwand für 20.000 Zeilen Code umzustellen realistisch einschätzt. Ich würde nämlich denken das sich der Aufwand das zu lernen was Du zur Base-Programmierung brauchst dem gegenüber nicht besonders groß ausnimmt, zumal Du ja auch Calc-Programmierung keineswegs automatisch kannst, nur weil Du mit VBA zurecht kommst.
Erste (oberflächliche) Tests zeigten auch, daß allein die Kunden-Datenbank ungeheuer groß und schwerfällig wäre.
Du solltest bei heutigem Stand der Entwicklung nicht die Base-interne HSQLDB verwenden sondern, wie schon oben gesagt eine Externe, vielleicht MySQL. Das hingegen eine Datenbank, verglichen mit einer Calc-Tabelle generell langsamer ist trifft nicht zu, prinzipiell sogar eher das Gegenteil.


insgesamt:
Obiges hört sich vielleicht allgemein an und ist deswegen wohl auch wenig befriedigend, nur mehr kann man kaum sagen ohne alles genau zu kennen.
Du darfst nur insgesamt den Aufwand nicht unterschätzen, denn 20.000 Zeilen Code umstellen ist keine Aufgabe die man so nebenbei macht.


Gruß
Stephan
famo
*****
Beiträge: 275
Registriert: Do, 06.01.2005 00:15
Wohnort: Berlin

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von famo »

Hallo Volker,
vollkern hat geschrieben:GnuCash sieht super aus! Wenn ich zu Linux (irgendwann mal) wechsle, wäre das schon mal mein Favourit (das Programm deckt aber 'nur' die Finanzsoftware ab).
grecipe-manager ist ein typisches Kochrezept-Projekt, hab ich oben schon runtergemacht. (Nichts gegen die Köche - sind halt keine Bäcker).
also GnuCash gibt es auch für Windows - laut http://www.alice-dsl.net/gnuc2ooo/gnuc2 ... intro.html wird es vermutlich in Zukunft sogar möglich sein GnuCash und OOo Base direkt über eine SQlite Datenbank zu koppeln.
Und wegen der Rezeptverwaltung: OK davon habe ich gar keine Ahnung, kann dir nur empfehlen da selber nochmal zu recherchieren, vor allem auch unter Verwendung der englischen Fachtermini - durchaus möglich das es dafür auch freie Software gibt, aber zugegeben nicht so wahrscheinlich...
Hatte das hier noch gefunden: http://www.treshna.com/bakery/:
http://www.treshna.com/bakery/ hat geschrieben:Bakery and food management software. This product is no longer marketed to new customers as treshna focuses on other developments.
Weiß zwar nicht genau was das heißen soll, aber vlt. gibt es ja Restposten-Preise dafür... :wink:
vollkern hat geschrieben:Eine letzte Möglichkeit sehe ich noch im koppeln von Base (für die Datenquellen) und Calc (+Writer für die Ausgaben). Nur leider fehlen mir die Erfahrungen im Programmieren mit Datenbanken. Erste (oberflächliche) Tests zeigten auch, daß allein die Kunden-Datenbank ungeheuer groß und schwerfällig wäre.
S.o. und Stephans Kommentar, kann mich dem nur anschließen und würde es auf alle Fälle versuchen.
vollkern hat geschrieben:Hast Du noch einen Rat? Gerne auch außerhalb dieses Forums - ist vielleicht für die anderen Leser mittlerweile etwas langweilig...
Das Thema ist vlt. etwas OT, aber ich glaube hier sind alle gespannt darauf was du mit deinem 20.000 Zeilen VBA Code machst. :-D

vg
famo
vollkern
*
Beiträge: 11
Registriert: Do, 21.01.2010 21:36

Re: Schreib- / Lesegeschwindigkeit zu gering

Beitrag von vollkern »

Hallo famo,

ich fang jetzt erstmal an und wenn ich weitere Probleme kriege, weiß ich ja wo ich mir Rat holen kann :roll:

Grüße Volker
Antworten