Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

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

Moderator: Moderatoren

Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von Simon23 »

Hallo,

ich habe ein kleines Makro geschrieben um eine riesige Tablle zu erzeugen, aus der ich eine Grafik gewinne (siehe Bild).
Bild
Das Bild ist aus einer 100 x 100 Tabelle entstanden. Um die Detailgenauigkeit weiter zu erhöhen, wollte ich nun eine 500 x 500 Tabelle benutzen.
Dummerweise startet das Makro zunächst, aber nach ca. 1 h kommt folgende Fehlermeldung:

Basic-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type: com.sun.star.lang.IndexOutOfBoundsException
Massage: .

Liegt es an daran, dass Open Office Tabellen begrenzt sind? Falls ja, kann ich sie erweitern?

Simon

PS.: Ich weiß, das es natürlich besser wäre mit einer anderen Programmiersprache wie C++ das Ganze zu realisieren. Programmieren ist allerdings nicht so meine Stärke und ich fand es in Open Office Basic schon schwer genug :wink:
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von jwr »

Hallo Simon,
Du solltest die Tabelle mal auf 255 begrenzen. Siehe die Doku.

->> In case of the Calc (Since OpenOffice 1.1.2)
the current range of valid indices for retrieving data include
the maximal table size--256 columns and 32000 rows--minus one.
Quelle:
http://api.openoffice.org/docs/common/r ... Table.html

Grüsse -Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von Simon23 »

Hallo Hans,

gibt es denn eine Möglichkeit mehr als 256 Spalten zu nutzen (kommt wahrscheinlich von 2^8 ) ? Perfekt wäre es, wenn die Spalten auch auf 32000 (müsste dann ca. 2^15 sein) erweiterbar wären.

Simon
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von jwr »

Simon23 hat geschrieben:Hallo Hans,

gibt es denn eine Möglichkeit mehr als 256 Spalten zu nutzen (kommt wahrscheinlich von 2^8 ) ? Perfekt wäre es, wenn die Spalten auch auf 32000 (müsste dann ca. 2^15 sein) erweiterbar wären.

Simon
Hallo Simon,

Lösung 1:
Du kannst die Quelle von OOo ändern und dann neu compilieren. Anbei die Codezeilen in der Quelle:

Code: Alles auswählen

101 #define MAXROWCOUNT_DEFINE 65536
102 #define MAXCOLCOUNT_DEFINE 256
Dazu musst Du gut programmieren können!
Wahrscheinlich wird die Rechengeschwindigkeit bei diesem Tabellenumfang darunter leiden.
Weitere Info:
http://www.oooforum.org/forum/viewtopic ... lumns+calc

Lösung 2:
Du kannst MS Excel 2007 benutzen. -> 1 Million Reihen und 16000 Spalten

Lösung 3:
Warten bis eine neue OOo-Release die 256er-Grenze bewältigt (kann eine Weile dauern).

Viel Erfolg und Grüsse -Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von Simon23 »

Hallo Hans,

die Lösug 1 gefällt mir persönlich am besten. Dummerweise verfüge ich nicht über die nötigen Programmierkenntnisse.
Deswegen werde ich mir wohl Excel 2007 kaufen müssen :(

Vielen Dank für deine Hilfe!

Simon
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von jwr »

Ich würde nicht unbedingt einen Haufen Geld ausgeben für eine einmalige Funktionalität.
Überlege mal wie Du das Problem anders lösen könntest.
Die Graphik, die Du erzeugst ist relativ einfach.
Die Frage ist wie genau die einen Sachverhalt darstellen soll.
Sollen die Graphiken 1% oder 10 % genau sein?

Genau genommen sind nur die Ecken der Farbflächen wichtig.
Für deren Berechnung kannst Du aber ohne allzuviel Tabellenzellen einen Wert ermitteln.
Dann verbindest Du die Linien zu Flächen und füllst die Flächen mit Farben.
Ein kluges Programm Schreiben macht auch erheblich mehr Spaß
als die Anwendung roher Gewalt mit 16000 x 16000 Zellen.
Und: Vermutlich braucht Excel drei Tage um die Berechnung durchzuführen!

Viel Erfolg -Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von Simon23 »

Hallo Hans,

ich werde es noch anderes machen:
Ich teile die Tabelle einfach in mehrere Teile auf und füge die Teile mit einem Grafikprogramm wieder zusammen.
Ist mit Sicherheit nicht die eleganteste Lösung aber simpel und funktioniert auch :wink:
Diagramm Hälfte.JPG
Diagramm Hälfte.JPG (6.49 KiB) 2147 mal betrachtet
+
Diagramm Hälfte Seite 2.JPG
Diagramm Hälfte Seite 2.JPG (5.46 KiB) 2146 mal betrachtet
=
Fertig.JPG
Fertig.JPG (10.1 KiB) 2145 mal betrachtet
Gruß

Simon

PS.: Theoretisch könnte ich auch in 4 Teile aufteilen und so die Präzision weiter steigern.
Das Ganze ist für meine Diplomarbeit und sollte möglichst wenig verpixelt sein.
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von jwr »

Wenn Du die Aufgabe so leicht auftrennen kannst, warum dann nicht gleich in 16.000 x 16.000 Teilen.
Vielleicht kannst Du jedes Farbelement einzeln berechnen und dieses Pixel einzeln plazieren.

Viel Erfolg mit Deiner Diplomarbeit.

-Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von Simon23 »

Hallo Hans,

ich könnte die Flächen auch direkt eingeben, das wäre allerdings eine extrem lang und unübersichtliche Formel.
Ich fand es einfacher die Berechnungen aufzuteilen.
Die letzte Formel (Zelle D16) z.B. ist der folgende Code:

Code: Alles auswählen

=WENN(D29="ABCDEF";WENN(D26="ABCD";WENN(D23="AB";WENN(D20="A";"A";WENN(D20="B";"B";"Fehler"));WENN(D21="C";"C";WENN(D21="D";"D";"Fehler")));WENN(D24="E";"E";WENN(D24="F";"F";"Fehler")));WENN(D27="G";"G";WENN(D27="I";"I";"Fehler")))
und dieser setzt sich aus 7 weiteren Formel zusammen, welche sich wiederrum aus 16 Berechnungen ergeben.
Das alles in eine "Monsterformel" zu stecken habe ich mich nicht getraut und ich hätte mit Sicherheit auch einen Fehler gemacht.
vorherige Berechnungen.jpg
vorherige Berechnungen.jpg (127.38 KiB) 2128 mal betrachtet
Da habe ich dann lieber folgendes Makro geschrieben:

Code: Alles auswählen

REM Das Makro
sub Diagramm
  oDoc = thisComponent  'Zugiff auf das Dokument
  oSheet = oDoc.sheets(0)  'Erstes Tabellenblatt

 
  oZelleERG = oSheet.getCellRangeByName("D16")   'Zelle Ergebnis welcher Fall
 oSheet.getCellByPosition(1,2).value = 1  'Startwert für Y
 oSheet.getCellByPosition(1,3).value = 0.502  'Startwert für N
  'oZelleC.value = 0.5   'Startwert 0.5

i = 535
r = 0

x=1 'Startwert Y = 1 
y=635 'Startwert N = 0,01

while r < 250
	while oSheet.getCellByPosition(1,2).value >= oSheet.getCellByPosition(1,3).value
 		oSheet.getCellByPosition(x,y).string = oSheet.getCellByPosition(3,15).string 'Schreibe in Zelle Buchstabe aus Ergebnis
		oSheet.getCellByPosition(1,2).value = oSheet.getCellByPosition(1,2).value - 0.002 'Verringere Y um 0.01 
		if oSheet.getCellByPosition(x,y).string = "A" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,250,100)
		if oSheet.getCellByPosition(x,y).string = "B" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,100,250)
		if oSheet.getCellByPosition(x,y).string = "E" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,250,100)
		if oSheet.getCellByPosition(x,y).string = "G" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,100,250)
		if oSheet.getCellByPosition(x,y).string = "I" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(100,100,100)
		if oSheet.getCellByPosition(x,y).string = "F" then oSheet.getCellByPosition(x,y).CellBackColor(R,G,B)=RGB(250,100,100)
		y = y + 1
	wend
	y = 635
	r = r+1
	x = x+1 
	oSheet.getCellByPosition(1,2).value = 1
	oSheet.getCellByPosition(1,3).value = oSheet.getCellByPosition(1,3).value + 0.002
	i = i-1
wend
end sub
Wenn Du eine bessere Lösung hast, ich bin für Kritik offen und dankbar.

Liebe Grüße

Simon

PS.: Nachdem mein Rechner über 3 h mit dem abgeänderten Makro gerechnet hat (also 4 Teilstücke der Tabelle erstellt hat), bin ich nun endlich mit der Qualität zufrieden :D
Ich würde das fertige Bild gerne in den Anhang packen, es ist allerdings unkomprimiert 24,8 MB groß. Deshalb füge ich das Jpeg bei, das immernoch eine gute Qualität bietet.
Komplett -300dpi high.jpg
Komplett -300dpi high.jpg (47 KiB) 2111 mal betrachtet
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von jwr »

Hallo Simon,

Das Bild sieht jetzt richtig gut aus.
Jetzt reizt mich noch die Frage: wie lautet denn die Aufgabe deiner Diplomarbeit?
Es hat offensichtlich mit der Gewinnoptimierung von Firmen zu tun.

Schöne Grüsse -Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von Simon23 »

Hallo Hans,

du liegst vollkommen richtig, es hat mit Gewinnoptimierung von 2 Firmen zu tun.
Es geht um ein Spieltheoretisches Modell, das ich aufbauend auf einem Modell meines Profs. entwickelt habe:
Zunächst vermarkten zwei Firmen ein homogenes Gut und produzieren es zu gleichen Stückkosten.
Firma 1 kann ein neues Produkt auf den Markt bringen (Produktinnovation), dafür sind 2 Stufen notwendig (erst wird ein Prototyp entwickelt, dann das neue Produkt vermarktet). Firma 2 kann darauf seine Produktionskosten mit einer Prozessinnovation reagieren (ebenfalls zweistufig, zunächst eine Planungsphase, dann die eigentliche Prozessinnovation).
Ich untersuche nun (unter anderem), wann sollte Firma 1 ein neues Produkt veröffentlichen und wann sollte Firma 2 eine Prozessinnovation betreiben.
Dies hängt unter anderem davon ab, wie stark sich das neue Produkt von Firma 1 vom bisherigen unterscheidet, deswegen gibt es zwei Differenzierungsparameter (eta und gamma, für die vertikale und die horzontale Produktdifferenzierung).
Ich möchte nun untersuchen in welchen Parameterkonstellationen welcher Fall auftritt.
Da ein Bild mehr sagt als 1000 Worte, sieh dir am das folgende Diagramm an:

http://wwwhomes.uni-bielefeld.de/smeier8/28ia-m.jpg

Ich hoffe es gefällt dir ;-)

Simon

PS.: An dem Bild kann man gut erkennen, dass die Entscheidungen der Firmen von sehr vielen "Wenn Dann" Entscheidungen abhängen. Deswegen ist es sehr schwierig, die Formel komplett in einer Zeile zu implementieren. Ich vermute sogar, das Open Office abstürzen würde, oder zumindest sehr träge würde, wenn ich solche eine Monsterformel in (1000 x 1000) / 2 = 500.000 Zellen schreiben würde.
Zuletzt geändert von Simon23 am Mi, 15.08.2007 14:15, insgesamt 1-mal geändert.
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von jwr »

Hallo Simon,

Dein Konzept für die Problemanalyse Deiner Diplomarbeit gefällt mir sehr gut.
Calc ist wirklich universell einsetzbar. Vielleicht sollte das Forum eine Liste verschiedenster Anwendungsmöglichkeiten als Anregung für den CALC-Einsatz aufführen. Ich habe vor einiger Zeit mit einer Tabellenkalkulation Differentialgleichungen für eine thermische Analyse gelöst, indem ein Iterationsprogramm für jede Einzelzelle eines Modells die Oberflächentemparatur aus dem Mittelwert der vier benachbarten Zellen berechnet hat. Auch das hat sehr gut funktioniert.
Mit mathematischen Formeln wäre das sehr viel aufwendiger geworden.

In Deinem letzten Beitrag ist übrigens sehr störend, dass bei Vergrößerung Deiner Abbildung eine bildschirmfüllende Werbung eingeblendet wird, die sich wohl nur durch anklicken wieder wegblenden läßt. (Da ich solche Werbungen wg. Virusrisiken grundsätzlich nicht anklicke, merke ich mir diese Marke als abschreckendes Beispiel für SPAM...).

Grüsse -Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von Simon23 »

Hallo Hans,

ich habe deine Kritik berücksichtigt, das Bild ist nun auf meinem (werbefreien) Webspace der Uni.
Ich habe nur leider keine Minituransicht einfügen können :(
Ich bin übrigens von der Leitungsfähigkeit von Open Office begeistert! Wenn in einer der nächsten Versionen noch die maximale Spaltenanzahl erhöht wird, ist das Programm für meine Anwendungen perfekt :D
Vor allem, dass es Freeware ist begeistert mich.

Simon
Zuletzt geändert von Simon23 am Mi, 15.08.2007 15:59, insgesamt 1-mal geändert.
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von jwr »

Simon23 hat geschrieben: ich habe deine Kritik berücksichtigt, das Bild ist nun auf meinem (werbefreien) Webspace der Uni.
Simon
Danke!
Simon23 hat geschrieben: Wenn in einer der nächsten Versionen noch die Spaltenbreite erhöht wird, ist das Programm für meine Anwendungen perfekt :D
Simon
Ist die Spaltenbreite (in mm) oder die Spaltenzahl (256) ein Problem?
Wahrscheinlich hast Du die Spaltenzahl wohl mit der Spaltenbreite verwechselt.

Ich glaube aber, dass in den meisten Fällen bei einem Tabellenentwurf mit mehr als 256 Spalten ein Umstieg auf eine echte Datenbank sinnvoller ist.

Gruss -Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Re: Basic Laufzeitfehler - Ist die Anzahl der Zellen begrenzt?

Beitrag von kannenklaus »

hallo simon,

Code: Alles auswählen

Wenn in einer der nächsten Versionen noch die Spaltenbreite erhöht wird
oo-calc wird excel 2007 in der version 3.0 unterstützen. dann müßte auch die wesentlich höhere spaltenzahl von excel 2007 mit untersützt werden. zur roadmap von version 3 s.a.

http://de.wikipedia.org/wiki/OpenOffice ... _Versionen

grüße

klaus
Antworten