[gelöst] Zellinhalt und CellContentType lesen und schreiben

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

Moderator: Moderatoren

TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

[gelöst] Zellinhalt und CellContentType lesen und schreiben

Beitrag von TrueColor »

Hallo,

ausgehend von diesem Posting und der dort angehängten Datei: viewtopic.php?p=257099#p257099

Wie kann ich effektiver als dort gezeigt Zellinhalt und CellContentType (zur Unterscheidung von Text und Zahlen) lesen (zum auslesen ist kein besonderer Aufwand nötig) und insbesondere schreiben. Gibt es einen Weg, der ohne die Fallunterscheidung nach CellContentType beim schreiben auskommt?

Danke!
Zuletzt geändert von TrueColor am Do, 16.07.2015 08:07, insgesamt 1-mal geändert.
System:
LibO 6 + LibO 7
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Zellinhalt und CellContentType lesen und schreiben

Beitrag von Karolus »

Hallo

Wie wäre es mit ...getDataArray() →→ ...setDataArray(...)
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellinhalt und CellContentType lesen und schreiben

Beitrag von Stephan »

Gibt es einen Weg, der ohne die Fallunterscheidung nach CellContentType beim schreiben auskommt?
.FormulaLocal dürfte gehen, d.h. das hier:

Code: Alles auswählen

oCell.FormulaLocal= aData(i)
sollte zum selben Ergebnis führen wie:

Code: Alles auswählen

     Select Case aCellContentType(i)
         Case "Value"
            oCell.Value = aData(i)
         Case "String"
            oCell.String = aData(i)
      End Select
(das was Karolus schreibt ist natürlich effizienter für viele Zellen, statt der Zugriff per Schleife auf Einzelzellen)


Gruß
Stephan
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: Zellinhalt und CellContentType lesen und schreiben

Beitrag von TrueColor »

DataArray: das klingt natürlich gut, nachteilig ist allerdings, dass (so wie ich's verstanden habe) der zu lesende und der zu schreibende Bereich die gleiche Form und Größe haben muss (im Beispiel ist das der Fall). Damit man in der Gestaltung des Eingabeformulars beschränkt.

Danke euch beiden!
System:
LibO 6 + LibO 7
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: [gelöst] Zellinhalt und CellContentType lesen und schreiben

Beitrag von TrueColor »

Oh, böse Falle, FormulaLocal übernimmt Formeln, ohne dass die Bezüge angepasst werden.

DataArray übernimmt nur Werte. Lässt sich mit sehr wenig Code realisieren, gefällt mir.
System:
LibO 6 + LibO 7
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Zellinhalt und CellContentType lesen und schreiben

Beitrag von Karolus »

TrueColor hat geschrieben:DataArray: das klingt natürlich gut, nachteilig ist allerdings, dass (so wie ich's verstanden habe) der zu lesende und der zu schreibende Bereich die gleiche Form und Größe haben muss (im Beispiel ist das der Fall). Damit man in der Gestaltung des Eingabeformulars beschränkt.
nein, du kannst einzelne Elemente auslesen:

Code: Alles auswählen

data = some_cellrange.DataArray()
for each row in data
    for each value in row
        print value
    next
next
du kannst selbst solche DataArray's erstellen:

Code: Alles auswählen

output = array( array(1,2,3), array("a","b","c"))
und du kannst das dann auch in einen Zellbereich mit den passenden Dimensionen als DataArray reinschreiben

Code: Alles auswählen

sheet.getCellRangeByName("A1:C2").setDataArray( output )
oder

Code: Alles auswählen

sheet.getCellRangeByName("A1:C2").DataArray = output 
..DataArray gibt die einzelnen Elemente als Text (falls Text in der Zelle steht) und double falls Werte in der Zelle stehen oder 0.0 falls die Zelle leer ist.

analog dazu ..FormulaArray gibt immer Text zurück (im Falle einer echten Formel eben den englischen Formeltext)
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: [gelöst] Zellinhalt und CellContentType lesen und schreiben

Beitrag von TrueColor »

Also könnte ich doch auch einzelne, verstreute Elemente in das DataArray einlesen, um das dann anschließend als Ganzes zu schreiben?

Ich glaube, ich stoße grad an meine Grenzen des Verständnisses. Wie ist so ein DataArray aufgebaut? Ich hab nicht wirklich was aussagekräftiges gefunden. Von Dannenhöfer konnte ich etwas Code 1:1 übernehmen, das war auch soweit verständlich, aber das war nur der einfache rechteckige Bereich. Im AOO-Wiki sind die Angaben doch sehr spärlich.
System:
LibO 6 + LibO 7
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: [gelöst] Zellinhalt und CellContentType lesen und schreiben

Beitrag von Karolus »

Hallo

Wie oben bereits beschrieben ist es in Basic ein verschachteltes Array von Array's

Stell dir das Objekt vor wie einen Zug, die Wagen representieren die Zeilen (aus der Tabelle) und die Sitzplätze in jedem Wagen representieren die Zellen der einzelnen Zeile.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: [gelöst] Zellinhalt und CellContentType lesen und schreiben

Beitrag von TrueColor »

Ah, das macht das klarer.

Also müsste ich, um
einzelne, verstreute Elemente in das DataArray einlesen
die einzelnen Zellen erstmal Stück für Stück in das Array einlesen, und zwar in der Reihenfolge, wie ich sie später schreiben will.

Bsp.:
A1 --> DataArray(aZeile(0), Zelle(0))
A2 --> DataArray(aZeile(0), Zelle(1))
B3 --> DataArray(aZeile(0), Zelle(2))
B4 --> DataArray(aZeile(0), Zelle(3))

Hm... muss mal gucken, wie sich das in Code umsetzen lässt... Array von Arrays...

Danke erstmal, muss ich ich durch den Kopf gehen lassen!
System:
LibO 6 + LibO 7
Antworten