Seite 1 von 1

Array in Excel anzeigen

Verfasst: Mi, 09. Mai 2012 18:41
von peternmb
Hallo,

ich habe ein kleines 3-dim-Array, in dem jeweils ein Datum, der Betreff und der Betrag stehen.
Wie kann ich das ohne den Umweg über eine temporäre DBF zu gehen einfach in Excel ausgeben lasssen?
So in der Art, nur statt DBF das Array:

Code: Alles auswählen

xls_datei:=XbpFileDialog():new():create():saveas(Hauptpfad+"\Export\Kasse.xls")
oExcel := CreateObject("Excel.Application")
oExcel:DisplayAlerts := .F.
oExcel:visible       := .F.
oBook  := oExcel:workbooks:Open(Hauptpfad+"\Daten\tmp.dbf")
oBook:SaveAs( xls_datei , xlWorkbookNormal )
Ich finde zwar in der Wissensdatenbank einige ähnliche Beiträge, aber nicht was mir wirklich hilft :(

Re: Array in Excel anzeigen

Verfasst: Mi, 09. Mai 2012 20:08
von Tom
Dreidimensional ist wirklich schwierig, denn Tabellen sind nun einmal zweidimensional. Für die dritte Dimension müsstest Du dann weitere Arbeitsmappen anlegen. Viel Spaß dabei! 8)

Wie auch immer. Das geht per ActiveX, ist aber nicht trivial - ich kann meinen Code leider nicht posten, da er überwiegend nicht von mir ist. <hüstel>

Eine simplere Lösung besteht darin, die Tabelle - mit Headern - an die Zwischenablage zu übergeben, Excel per AX zu starten und zum Einfügen aus der Zwischenablage zu zwingen. Wenn man das "hidden" macht, kann man die entstandene Datei speichern und Excel gleich wieder beenden. Wichtig: Alle Daten in Anführungszeichen, mit Tab trennen und Zeilen mit CR/LF abschließen. Ist nicht wirklich elegant (und schwer zu kontrollieren), sollte aber funktionieren - zweidimensional. Ansonsten ist der Weg über eine temporäre DBF eigentlich okay, wenn man diese beispielsweise im Temp-Verzeichnis ablegt und nach der Operation löscht. Alternativ kann man auch eines der vielen sonstigen Importformate nutzen, die Excel unterstützt, etwa separierte Textdateien oder ähnliches.

Re: Array in Excel anzeigen

Verfasst: Mi, 09. Mai 2012 20:30
von Wolfgang Ciriack
Vielleicht denke ich ja zu einfach...

Warum nicht die Daten in ein neues aMyArray und dann in einem Rutsch nach Excel mit

Code: Alles auswählen

SetExcelValue("A1:"+"C:"+ntrim(len(aMyArray)),oWorkSheet,aMyArray)

*********************************************************************
static FUNCTION SetExcelValue(cRange,oWorkSheet,xValue)
LOCAL oRange
oRange := oWorkSheet:Range(cRange)
oRange:Select()
oRange:Value := xValue
oRange:Font:Name:="Arial"
oRange:Font:Size:=8
oRange := nil
RETURN nil

Re: Array in Excel anzeigen

Verfasst: Do, 10. Mai 2012 8:40
von Paul Brem
Meinst Du wirklich einen 3-dimensionaler Array? So wie Du ihn beschrieben hast ist es ein 2-dimensionaler Array mit 3 Spalten und diesen kann man einfach in das Excel übergeben.

Bei einem 3-dimensionaler Array muss man aus der 3. Dimension Arbeitsblätter bilden. Die kann man mit dem Befehl oBook:workSheets:Add() anfügen.

Paul

Re: Array in Excel anzeigen

Verfasst: Do, 10. Mai 2012 8:41
von Markus Walter
Hi,

ich vermute, dass Peter "3 Spalten" mit "dreidimensional" verwechselt, oder?

Re: Array in Excel anzeigen

Verfasst: Do, 10. Mai 2012 9:52
von peternmb
Markus Walter hat geschrieben:Hi,

ich vermute, dass Peter "3 Spalten" mit "dreidimensional" verwechselt, oder?
JA, 2-dimensional mit 3 Spalten :color:

Re: Array in Excel anzeigen

Verfasst: Sa, 12. Mai 2012 17:43
von brandelh
Tom hat geschrieben:Dreidimensional ist wirklich schwierig, denn Tabellen sind nun einmal zweidimensional. Für die dritte Dimension müsstest Du dann weitere Arbeitsmappen anlegen. Viel Spaß dabei! 8)
was soll schwierig daran sein neue Arbeitsblätter in der Arbeitsmappe anzulegen ?
Im Büro habe ich da ein Beispiel, wenn es also bis dann noch nicht gelöst ist, einfach nochmal fragen ...
diesen Thread werde ich sonst nach meinem Urlaub sicher vergessen haben 8)

Re: Array in Excel anzeigen

Verfasst: So, 13. Mai 2012 5:25
von AUGE_OHR
peternmb hat geschrieben:JA, 2-dimensional mit 3 Spalten :color:
du musst nur zwischen o:Sheets( Nummer ) "umschalten"

Code: Alles auswählen

   oExcel:= CreateObject( "Excel.Application" ) 
   oWorkBooks    := oExcel:Workbooks
   oBook         := oWorkbooks:Open( cPath + 'MyTable.xls'  )
   oWorkSheet1   := oBook:Sheets( 1 )
   oWorkSheet2   := oBook:Sheets( 2 )