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!
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
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!
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
Re: Array in Excel anzeigen
Verfasst: So, 13. Mai 2012 5:25
von AUGE_OHR
peternmb hat geschrieben:JA, 2-dimensional mit 3 Spalten
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 )