Import von Exeldaten in Xbase++
Moderator: Moderatoren
Import von Exeldaten in Xbase++
Hallo zum, Thema Excelansprache :
leider steig ich in Xbase++ nicht so tief ein ..
Gibt es eine "einfache" Methode-/ Code-Beispiel für :
(Xbase++ 1.9)
1. Öffnen einer Exceldatei
2. Auslesen der Daten z.B. in einen Array
oder Einzelansprache der Spalten und Zellen
oder
1. Öffnen einer Exceltabelle ?
2. Sofortiges speichern als .CSV ?
3. Einlesen dieser .CSV in Array (bekannte Methode)
Die Datei kann vorher nicht manuell in eine .CSV umgewandelt werden, kann dies
vielleicht Xbase++ automatisiert machen und diese dann normal öffnen ?
Danke fürs Überdenken
Rainer
leider steig ich in Xbase++ nicht so tief ein ..
Gibt es eine "einfache" Methode-/ Code-Beispiel für :
(Xbase++ 1.9)
1. Öffnen einer Exceldatei
2. Auslesen der Daten z.B. in einen Array
oder Einzelansprache der Spalten und Zellen
oder
1. Öffnen einer Exceltabelle ?
2. Sofortiges speichern als .CSV ?
3. Einlesen dieser .CSV in Array (bekannte Methode)
Die Datei kann vorher nicht manuell in eine .CSV umgewandelt werden, kann dies
vielleicht Xbase++ automatisiert machen und diese dann normal öffnen ?
Danke fürs Überdenken
Rainer
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Import von Exeldaten in Xbase++
dies geht z.B. so
Allerdings muss vorher feststehen, welches Arbeitsblatt und von welcher Größe
cFile ist die Datei , cWork der Name des Arbeitsblattes cVonBis behinhaltet z.B: A1:K2000
zum schluss nur noch oExcel:quit() und oExcel:destroy()
Code: Alles auswählen
oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
MsgBox( "Excel ist nicht installiert" )
RETURN Nil
ENDIF
oExcel:DisplayAlerts := .F.
oExcel:visible := .f.
oBook := oExcel:Workbooks:Open(cFile)
oSheetDat := oBook:Sheets(cWork)
oSheetDat:Select()
oRange:=oSheetDat:Range(cVonBis)
oRange:select()
aExcelWerte:=oRange:Value()
cFile ist die Datei , cWork der Name des Arbeitsblattes cVonBis behinhaltet z.B: A1:K2000
zum schluss nur noch oExcel:quit() und oExcel:destroy()
Re: Import von Exeldaten in Xbase++
Rolf- danke - ein Anfang ....
Kennst Du auch die 2. Methode -> Öffnen und sofort wieder speichern als .csv ?
Erscheint mir erstmal einfacher oder ... ?
Die Größe ist immer variabel, die Werte müssen ? in einen Array zur weiteren Bearbeitung.
Gruß
Rainer
Kennst Du auch die 2. Methode -> Öffnen und sofort wieder speichern als .csv ?
Erscheint mir erstmal einfacher oder ... ?
Die Größe ist immer variabel, die Werte müssen ? in einen Array zur weiteren Bearbeitung.
Gruß
Rainer
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Import von Exeldaten in Xbase++
Unter Xbase gibt es ein Beispiel, das mit Excel eine DBF öffnet und als XLS abspeichert, genauso geht das auch mit CSV, nur die Namen und der Parameter muss angepaßt werden.
D:\...\XPPW32\source\samples\activex\msexcel
hier Beispiel 1
D:\...\XPPW32\source\samples\activex\msexcel
hier Beispiel 1
Code: Alles auswählen
//////////////////////////////////////////////////////////////////////
PROCEDURE main
LOCAL oExcel, oBook
LOCAL cSDir, cTDir
// Erzeugen eines "Excel.Application"-Objektes
oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
MsgBox( "Excel ist nicht installiert" )
RETURN
else
MsgBox( "Excel (Version: "+var2char(oExcel:version)+") ist installiert !" )
ENDIF
// Vermeiden von Nachrichten wie "Die Datei
// existiert bereits". Sicherstellen, dass
// die Excel-Anwendung sichtbar ist.
oExcel:DisplayAlerts := .F.
oExcel:visible := .T.
// Das Quellverzeichnis ist das Verzeichnis mit
// den DBF-Tabellen der Xbase++-Beispielkollektion.
// Das Zielverzeichnis ist das Verzeichnis der
// Anwendung.
cTDir := CurDrive()+":\"+CurDir()
cSDir := cTDir + "\..\..\data"
// Eine DBF-Tabelle in einem Workbook oeffnen.
oBook := oExcel:workbooks:Open(cSDir+"\customer.dbf") // hier einfach XLS angeben, Excel kennt den Typ
// Das Workbook wird mit einem neuen Namen abgespeichert.
// Ein voll qualifizierter Pfad muss angegeben werden.
// xlWorkbookNormal erzeugt eine normale Excel-Datei.
oBook:SaveAs( cTDir+"\MyExcel.xls" , xlWorkbookNormal ) // hier als Endung CSV und als Typ ... vermutlich eines von diesen xlCSV, xlCSVMSDOS, xlCSVWindows
// Beenden von Excel und Zerstoeren des Anwendungs-
// objektes
oExcel:Quit()
oExcel:Destroy()
WAIT
RETURN
Gruß
Hubert
Hubert
Re: Import von Exeldaten in Xbase++
Noch ein blödes Syntax-Problem ....
Ich will ein bestimmtes Arbeitsblatt ansprechen
So kommt Fehlermeldung .. hmmm
eine Idee ?
Gruß
Rainer
Ich will ein bestimmtes Arbeitsblatt ansprechen
So kommt Fehlermeldung .. hmmm
Code: Alles auswählen
oSheet := oExcel:Workbooks:Open(cExcelfile):ActiveSheet // Exceltabelle laden
oSheet:=oExcel:workbooks:("GM ambulant"):Select <----- hier kommt der Syntaxfehler
oSheet :SaveAs("F:\ambulant.csv" , 24 )
Gruß
Rainer
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2824
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Import von Exeldaten in Xbase++
Hallo, Rainer -
also, ich gehe wie folgt vor:
Makro aufzeichen
Schritte durchlaufen, die mein Programm machen soll
Makroaufzeichnung beenden
Makro ansehen
Damit klären sich oft und schnell Fragen nach Objekten, Methoden oder Syntax bei dem Namen eines Tabellenblattes.
also, ich gehe wie folgt vor:
Makro aufzeichen
Schritte durchlaufen, die mein Programm machen soll
Makroaufzeichnung beenden
Makro ansehen
Damit klären sich oft und schnell Fragen nach Objekten, Methoden oder Syntax bei dem Namen eines Tabellenblattes.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Import von Exeldaten in Xbase++
Ein Workbook ist die XLS(X) Datei selbst.
Das Arbeitsblatt ist ein sheet, wenn ich von einer Zelle auf eine auf einem anderen Arbeitsblatt verweise und das Macro aufzeichne, dann kommt das dabei raus:
das mit dem Verketten geht in Xbase++ nicht so gut, daher sauber die Objekte trennen:
deine Fehlerzeile würde ich aus dem Stand so übersetzen:
Das Arbeitsblatt ist ein sheet, wenn ich von einer Zelle auf eine auf einem anderen Arbeitsblatt verweise und das Macro aufzeichne, dann kommt das dabei raus:
Code: Alles auswählen
Range("A6").Select
ActiveCell.FormulaR1C1 = "45" ' 45 eingetippt ... dumm, + vergessen
Sheets("Tabelle2").Select
Range("B12").Select
Sheets("Tabelle1").Select
Range("A6").Select
ActiveCell.FormulaR1C1 = "=45+Tabelle2!R[2]C[2]" ' so sieht eine Formel über zwei Sheets aus
Range("A7").Select
Application.Goto Reference:="Makro1"
Code: Alles auswählen
// Erzeugen eines "Excel.Application"-Objektes
oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
MsgBox( "Excel ist nicht installiert" )
RETURN
else
MsgBox( "Excel (Version: "+var2char(oExcel:version)+") ist installiert !" )
ENDIF
oBook := oExcel:Workbooks:Open(cExcelfile)
oSheet := oBook:ActiveSheet
// querformat
oSheet:PageSetup:Orientation := xlLandscape
// Die Spalten werden formatiert. Die erste Spalte
// soll den Namen beinhalten. Alle anderen Spalten
// beinhalten numerische Zahlenwerte
oSheet:Columns( 2 ):NumberFormat := "0.00"
oSheet:Columns( 3 ):NumberFormat := "0.00"
... Werte füllen in Zellen, man kann das auch schneller über die Zwischenablage
// Die Daten werden aus der DBF Tabelle in die
// Zellen des Arbeitsblattes uebertragen
? "Werte aus der DBF Tabelle uebertragen"
DO WHILE !EOF()
oSheet:Cells(nRow,1):Value := FIELD->PARTNAME
oSheet:Cells(nRow,2):Value := FIELD->PURCHASE
oSheet:Cells(nRow,3):Value := FIELD->SELLPRICE
nRow++
DbSkip(1)
ENDDO
// Die Breite der ersten Spalte wird dem Inhalt der
// Zellen angepasst.
oSheet:Columns( 1 ):AutoFit()
? oBook:FullName
Code: Alles auswählen
oSheet := oBook:Sheets("GM ambulant")
oSheet:...
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Import von Exeldaten in Xbase++
Sheets("Tabelle1").Select
Das .Select (soweit ich das verstanden habe) speichert ein Ergebnis-Objekt (dieses Select-Befehls)
in einer Art von globaler Umgebungsvariable für alle folgenden Befehle (bis eine Aufhebung erfolgt ...)
wir müssen das Ergebnis in einer Objektvariablen speichern:
oSheet := Sheets("Tabelle1")
Dafür können wir sehr genau auf die verschiedenen Objekte zugreifen, auch gemischt.
Das .Select (soweit ich das verstanden habe) speichert ein Ergebnis-Objekt (dieses Select-Befehls)
in einer Art von globaler Umgebungsvariable für alle folgenden Befehle (bis eine Aufhebung erfolgt ...)
wir müssen das Ergebnis in einer Objektvariablen speichern:
oSheet := Sheets("Tabelle1")
Dafür können wir sehr genau auf die verschiedenen Objekte zugreifen, auch gemischt.
Gruß
Hubert
Hubert
Re: Import von Exeldaten in Xbase++
danke - aber kam dann doch nicht weiter - ich will einfach ein anderes sheet abspeichern hmmm
das ist jetzt mal der Code ... der nicht sauber arbeitet
oSheet := oExcel:workbooks:Open(cExcelfile):ActiveSheet // Exceltabelle laden
oSheet :SaveAs("F:\stationär.csv" , 24 )
-------> oSheet := oExcel:workbooks:Sheets("GM ambulant") Fehler
osheet :SaveAs("F:\ambulant.csv" , 24 )
Gruß
rainer
das ist jetzt mal der Code ... der nicht sauber arbeitet
oSheet := oExcel:workbooks:Open(cExcelfile):ActiveSheet // Exceltabelle laden
oSheet :SaveAs("F:\stationär.csv" , 24 )
-------> oSheet := oExcel:workbooks:Sheets("GM ambulant") Fehler
osheet :SaveAs("F:\ambulant.csv" , 24 )
Gruß
rainer
Re: Import von Exeldaten in Xbase++
das kommt auch mit Fehler hoch ... kennt sheets zum Objekt nicht
oSheet := oBook:Sheets("GM ambulant")
oSheet:...
oSheet := oBook:Sheets("GM ambulant")
oSheet:...
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Import von Exeldaten in Xbase++
Ich habe hier eine andere Funktion, welche über die Nummer auf die Sheets zugreift (Namen suche ich normal nicht):
Ob sich aber ein Sheet einzeln Speichern läßt, das weiß ich nicht
Code: Alles auswählen
oBook := oExcel:workbooks:Open(cXLS)
for s := 1 to 2
oSheet := oBook:worksheets(s)
? "Aktuelles Arbeitsblatt: ",oSheet:name
oSheet:activate()
oSheet:visible := .t.
oSheet:Columns(2):NumberFormat := "@" // Phoenics-AZ -> TEXT Format !
oSheet:Columns(3):NumberFormat := "@" // Phoenics-AZ -> TEXT Format !
nMaxX := len(oSheet:usedRange:value) // Anzahl der Datenzeilen
Gruß
Hubert
Hubert
Re: Import von Exeldaten in Xbase++
.. danke so arbeitet es sauber ........... und speichert das angesprochene sheet
.............
.............
Eine csv lässt sich dann gut verarbeiten ....
Gruß
Rainer
.............
Code: Alles auswählen
obook := oExcel:Workbooks:Open(cExcelfile)
oSheet := oBook:activesheet
oSheet :SaveAs("F:\station.csv" , 24 )
oSheet := oBook:worksheets("GM ambulant")
osheet :SaveAs("F:\ambulant.csv" , 24 )
Eine csv lässt sich dann gut verarbeiten ....
Gruß
Rainer