VB6: Mehrere Zeilen auf einmal in Calc schreiben

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

Moderator: Moderatoren

glashans
Beiträge: 1
Registriert: Di, 30.03.2010 13:07

VB6: Mehrere Zeilen auf einmal in Calc schreiben

Beitrag von glashans »

Hallo,

ich versuche mehrere Zeilen auf einmal in OpenOffice Calc mit Daten zu füllen.
Es funktioniert auch ohne Probleme, wenn ich jeden Wert einzeln in die
Tabelle schreib:

Code: Alles auswählen

For i = 1 to 1000 
    Call oSheet.GetCellByPosition(1 + ii, i + 7).SetFormula(strTemp(i)) 
Next i 
Doch dies ist relativ langsam, da es sich um mehrere 1000 Werte handeln kann.
Jetzt hatte ich mir vorgestellt alle Werte durch vbCrLf trennen und in
eine Variable zu schreiben.
Diese dann auf einmal in die Tabelle zu schreiben:

Code: Alles auswählen

For i = 1 to 1000 
    strVar = strVar & strWert(i)  & vbCrLf
Next i 
Call oSheet.GetCellByPosition(1, 7).SetFormula(strVar)
Doch leider funktioniert das nicht!

Kann mir vielleicht jemand weiterhelfen wie man mehrere Zeilen/Spalten auf einmal in die Tabelle schreibt??
Vielleicht mit einer Feldvariablen?
Einem 2-dimensionalen Array?

Danke schon mal.

MfG, Hans Hegau
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: VB6: Mehrere Zeilen auf einmal in Calc schreiben

Beitrag von Karolus »

Hallo
Ein Zellbereich verfügt über die Methoden .setDataarray bzw. setFormulaarray
Diesen Methoden muss aber ein 2dimensionaler Array übergeben werden (1. Dimension sind die Zeilen , die 2. die Spalten )auch wenn die 2.Dimension nur aus 1 Spalte besteht.

Etwas Beispielscode:

Code: Alles auswählen

Sub datenarray
'Zahlen mit Punkt als Dezimaltrenner, Formeln mit englischen Funktionsbezeichnungen
aindat = array("Montag","dienstag","3.14","Donnerstag","=sum(A3:A5)")  '1 dimensionaler Array
idimension = ubound(aindat())
startzeile = 3
'in der for-schleife wird aindat 2dimensional
for i = 0 to idimension
	aindat(i) = array(aindat(i))
next i
'Der Zellbereich mit den identischen Dimensionen wie aindat wird befüllt
Zielrange = thiscomponent.sheets(0).getcellrangebyposition( 2 , startzeile , 2 , startzeile + idimension)
zielrange.setformulaarray(aindat())
'oder 
'zielrange.setdataarray(aindat())

End Sub
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: VB6: Mehrere Zeilen auf einmal in Calc schreiben

Beitrag von turtle47 »

Hallo Hans,

schau Dich mal nach setDataArray hier und im englischen Forum um.

Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten