Hallo,
hat von euch jemand ein Beispiel wie ich aus Excel Daten
in eine dBase oder ADS Datenbank einlesen kann?
Benutze Xbase Vers. 1.9 + XClass Vers. 4
Daten aus Excel einlesen
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Daten aus Excel einlesen
hi,
grundsätzlich kannst du unter Xbase++ v1.9x per activeX zugreifen, ABER
sowohl lesen als auch schreiben ist "extrem langsam" ...
hier ein Beispiel wie ich aus einer chinesischen Excel Tabelle auslese und
dabei die chinesischen Schriftzeichen als Bitmap "fotographiere" und in
die *.FPT abspeichere :
wie schon gesagt es geht sehr langsam ... ich würde immer zu einem CVS
Export aus Excel raten und die dann per FOpen/FRead einlesen , aber ich
kann in diesem Fall (chinesich = Unicode) keine CVS Format verwenden.
gruss by OHR
Jimmy
zunächst willkommen im deutschen Xbase-Forum.Wilfried Boos hat geschrieben: hat von euch jemand ein Beispiel wie ich aus Excel Daten
in eine dBase oder ADS Datenbank einlesen kann?
Benutze Xbase Vers. 1.9 + XClass Vers. 4
grundsätzlich kannst du unter Xbase++ v1.9x per activeX zugreifen, ABER
sowohl lesen als auch schreiben ist "extrem langsam" ...
hier ein Beispiel wie ich aus einer chinesischen Excel Tabelle auslese und
dabei die chinesischen Schriftzeichen als Bitmap "fotographiere" und in
die *.FPT abspeichere :
Code: Alles auswählen
#pragma library( "ascom10.lib" )
#include "XBP.CH"
// This one was created with:
// tlb2ch Excel.Application > excel.ch
#include "Excel.ch"
PROCEDURE Main( )
LOCAL oClipBoard, oRange, aFormats, nFormat, nPos
LOCAL oXbpBitmap, oExcel
LOCAL cFile := CurDrive()+":"+CurDir()+"\CHINA.XLS"
IF !FILE("CHINABMP.DBF")
CRE_CHINABMP()
ENDIF
USE CHINABMP EXCLUSIV
ZAP
// Create Excel object and open document
oExcel := GetObject( , "Excel.Application" )
oExcel:Workbooks:open( cFile )
FOR nRow := 1 TO 847 // row_of_bottomrightcell
APPEND BLANK
FOR nCol := 1 TO 2 // column_of_bottomrightcell
IF nCol == 1
cdummy := "A"
oWorkSheet := oExcel:Worksheets( "Tabelle1" ) //:range( "A"+nRow+":"+"A"+nRow )
* oRange:copyPicture(, xlBitmap)
oRange := oWorksheet:cells
oCells := oRange:cells
osinglecell:=ocells:cells(nrow,ncol):value
IF osinglecell != NIL
IF !EMPTY(osinglecell)
DO CASE
CASE VALTYPE(osinglecell) = "N"
REPLACE BILDNR WITH STR(osinglecell,10,0)
CASE VALTYPE(osinglecell) = "C"
REPLACE BILDNR WITH osinglecell
ENDCASE
? cdummy := BILDNR
ENDIF
ENDIF
ELSE
// Copy a range to clipboard in bitmap format
// :copyPicture() without parameter will save as Metafile
* oRange := oExcel:Worksheets( "Tabelle1" ):range( "A4:C6" )
cRange := "B"+LTRIM(STR(nRow)) //+":"+"C"+LTRIM(STR(nRow))
oRange := oExcel:Worksheets( "Tabelle1" ):range( cRange )
oRange:copyPicture(, xlBitmap)
// Create a clipboardobject and read the image from
// clipboard. Thereafter destroy the object
oClipBoard := XbpClipBoard():new():create()
oClipBoard:open()
aFormats := oClipBoard:queryFormats()
nFormat := XBPCLPBRD_BITMAP
IF 0 != ( nPos := AScan( aFormats, nFormat ) )
oXbpBitmap := oClipBoard:getBuffer( aFormats[ nPos ] )
ENDIF
oClipBoard:close()
oClipBoard:destroy()
REPLACE BITMAP WITH oXbpBitmap:setBuffer()
IF VAL(cdummy) > 0
ELSE
cdummy := "B"+LTRIM(STR(RECNO()))
ENDIF
// Save Bitmap to file
oXbpBitmap:saveFile( TRIM(cdummy)+".bmp" )
// cleanup
oXbpBitmap:destroy()
ENDIF
NEXT
NEXT
// End Automationserver and destroy connection
oExcel:quit()
oExcel:destroy()
RETURN
PROCEDURE CRE_CHINABMP()
// New table, store bitmap to memofield using FOXDBE
DbCreate( "CHINABMP", {{ "BILDNR" , "C", 6, 0 }, ;
{ "BILDNAME", "C", 40, 0 }, ;
{ "BITMAP" , "M", 10, 0}}, "FOXCDX" )
RETURN
Export aus Excel raten und die dann per FOpen/FRead einlesen , aber ich
kann in diesem Fall (chinesich = Unicode) keine CVS Format verwenden.
gruss by OHR
Jimmy
Hallo Wilfried,
Jimmy war schneller:
Gruß
Alfred
Jimmy war schneller:
Code: Alles auswählen
#include "activex.ch"
#include "excel.ch" // siehe samples\activex\msexcel
PROCEDURE main
LOCAL oExcel, oBook, oSheet1, buchtext
// Create the "Excel.Application" object
oExcel := CreateObject("Excel.Application")
oExcel:visible := .T.
IF Empty( oExcel )
MsgBox( "Excel is not installed" )
RETURN
ENDIF
oBook := oExcel:Workbooks:Open("test_datei1.xls")
oSheet1 := oBook:Worksheets("Tabelle2")
oSheet1:Activate
buchtext := ALLTRIM(oSheet1:cells(1,7):value)
msgbox(buchtext)
oExcel:Quit()
oExcel:Destroy()
RETURN
Gruß
Alfred
Hallo Jimmy, Hallo Alfred,
vielen Dank für die Beitäge.
Werde diese im laufe der Woche testen.
CSV geht bei mir leider nicht aus ähnlichen Gründen wie bei Jimmy.
Noch eine Frage:
Wie kann ich geziehlt Felder, Zeilen und Spalten ansprechen
die ich einlesen will und eventuell die Formatierung ändern.
Gruß
Wilfried
vielen Dank für die Beitäge.
Werde diese im laufe der Woche testen.
CSV geht bei mir leider nicht aus ähnlichen Gründen wie bei Jimmy.
Noch eine Frage:
Wie kann ich geziehlt Felder, Zeilen und Spalten ansprechen
die ich einlesen will und eventuell die Formatierung ändern.
Gruß
Wilfried
Hallo Wilfried,
mein Programm habe ich extra für dich abgespeckt, damit Du die Grund-
lagen dir erarbeiten kannst und ist für Testzwecke voll lauffähig.
Du must nur eine entsprechende Exceldatei anlegen und in der
Tabelle 2 in der Zeile 1 Spalte 7 einen Text eingeben und im Programm
einen Pfad zu der Exceltabelle angeben.
Somit hast Du bereits den Zugriff auf eine Datei, ein Arbeitsblatt und eine
Zelle.
Für den Zugriff gelten die ganz normalen Office Automationsregeln
für Excel.
Du solltest konkret beschreiben was Du tun möchtest, dann kann man
gezielt Ratschläge geben. Auch wäre wichtig mit welcher Excelversion
Du arbeitest.
Gruß
Alfred
mein Programm habe ich extra für dich abgespeckt, damit Du die Grund-
lagen dir erarbeiten kannst und ist für Testzwecke voll lauffähig.
Du must nur eine entsprechende Exceldatei anlegen und in der
Tabelle 2 in der Zeile 1 Spalte 7 einen Text eingeben und im Programm
einen Pfad zu der Exceltabelle angeben.
Somit hast Du bereits den Zugriff auf eine Datei, ein Arbeitsblatt und eine
Zelle.
Für den Zugriff gelten die ganz normalen Office Automationsregeln
für Excel.
Du solltest konkret beschreiben was Du tun möchtest, dann kann man
gezielt Ratschläge geben. Auch wäre wichtig mit welcher Excelversion
Du arbeitest.
Gruß
Alfred