1

Konu: excel den gelen datanın tipi

excel den veri alırken alttaki örnekte  veri tipinde sorun çıkıyor

.Range("A"+Alltrim(Str(i))).Value
ve
.Range("B"+Alltrim(Str(i))).Value   değerlerinin tipi nedir ?
bunları karekter ve sayı formatında kayıt eymek için ne yapılır?

teşekkürler




Use Report
Go Top
oExcel = Createobject("Excel.Application")
oExcel.Visible = .T.
oBook = oExcel.Workbooks.Open("C:\report.xls")

With    oExcel.Worksheets["report"]

    For i=1 To 30
   
    
    ? .Range("A"+Alltrim(Str(i))).Value
    ? .Range("B"+Alltrim(Str(i))).Value

      SELECT report
       APPEND BLANK
    REPLACE report.a WITH .Range("A"+Alltrim(Str(i))).Value    && hata veriyor   report.a sayı
    REPLACE report.b WITH .Range("B"+Alltrim(Str(i))).Value   && hata veriyor        report.b memo alanı

    Endfor
Endwith

2

Re: excel den gelen datanın tipi

Bununla denesene bir

Visual Fox Pro
#Define adSchemaCatalogs 1

#Define adSchemaColumns 4
#Define adSchemaTables 20
Close Databases All
Local lFirstRowHasHeader,lReturnAllAsText,lcDataSource,lcConStr
lFirstRowHasHeader = .F.
lReturnAllAsText = .F.
 
lcDataSource = 'C:\report.xls'
 
* Excel97-2003
*!*    lcConStr = ;
*!*      'Provider=Microsoft.Jet.OLEDB.4.0;'+;
*!*      'Data Source='+m.lcDataSource+';'+;
*!*      'Extended Properties="Excel 8.0;HDR='+;
*!*      IIF(m.lFirstRowHasHeader,'Yes','No')+';IMEX='+;
*!*      IIF(m.lReturnAllAsText,'1','0')+'"'
 
* Excel2007
lcConStr = ;
  'Provider=Microsoft.ACE.OLEDB.12.0;'+;
  'Data Source='+m.lcDataSource+';'+;
  'Extended Properties="Excel 8.0;HDR='+;
  IIF(m.lFirstRowHasHeader,'Yes','No')+'"
'
 
ReadSchema(m.lcConStr)
Select TableList
Scan
  lcTableName = Trim(Table_name)
  lcLocalCursor = Textmerge("Sheet<<PADL(RECNO(),2,'0')>>")
  ADOQuery(m.lcConStr, Textmerge("select * from [<<m.lcTableName>>]"), m.lcLocalCursor)
Endscan
 
Procedure ADOQuery(tcConStr,tcQuery,tcCursorName)
  Local oConn As 'ADODB.Connection'
  Local oRS As ADODB.RecordSet
  oConn = Createobject('ADODB.Connection')
  oConn.Mode= 1  && adModeRead
  oConn.Open( m.tcConStr )
  oRS = oConn.Execute(m.tcQuery)
  RS2Cursor(oRS,m.tcCursorName)
  oRS.Close
  oConn.Close
Endproc
 
Procedure ReadSchema(tcConStr)
  Local oConn As 'ADODB.Connection'
  Local rstSchema As ADODB.RecordSet
  oConn = Createobject('ADODB.Connection')
  oConn.Mode = 1  && adModeRead
  oConn.Open( m.tcConStr )
  rstSchema = oConn.OpenSchema(adSchemaTables)
  *rstSchema = oConn.OpenSchema(adSchemaColumns)
  RS2Cursor(rstSchema,'TableList')
  rstSchema.Close
  oConn.Close
Endproc
 
Procedure RS2Cursor(toRS, tcCursorName) && simple single cursor - not intended for complex ones
  tcCursorName = Iif(Empty(m.tcCursorName),'ADORs',m.tcCursorName)
  Local xDOM As 'MSXML.DOMDocument'
  xDOM = Createobject('MSXML.DOMDocument')
  toRS.Save(xDOM, 1)
  Xmltocursor(xDOM.XML, m.tcCursorName)
Endproc

3

Re: excel den gelen datanın tipi

teşekkurler
yanlız şöyle bir hata çıktı. alanlardan birinde çok fazla miktarda enter var
muhtemelen bundan dolayı sorun çıkartıyor. kabaca memo alanı gibi

sadece dönen datanın biçimini bilsem çözebilirim gibi geldi.
.Range("B"+Alltrim(Str(i))).Value       bu karekter veya sayı değil   

tekrar sağolun

4

Re: excel den gelen datanın tipi

?  type('.Range("A"+Alltrim(Str(i))).Value')   && N  gösteriyor
?  type('.Range("B"+Alltrim(Str(i))).Value')  && C gösteriyor

ama Numerik olan alan numerik başka alana kaydetme durumunda sorun çıkartıyor. aynı şekilde karekter olan alan  bir başka karekter alana save edilirken sorun çıkartıyor

fikri olan var mı?

teşekkurler

5

Re: excel den gelen datanın tipi

Sen su XLS'in bır kopyesini gondersen:)

6

Re: excel den gelen datanın tipi

email adresini yazabilirmisin

teşekkurler

7

Re: excel den gelen datanın tipi

cetin.basoz - at - deu.edu.tr

8 Son düzenleyen, cetinbasoz (06.12.2008 15:24:36)

Re: excel den gelen datanın tipi

Gerek excel dosyan, gerek XML bir garip (XML hatali). Neyse boyle okunuyor:

Visual Fox Pro
#Define adSchemaCatalogs 1

#Define adSchemaColumns 4
#Define adSchemaTables 20
Close Databases All
Local lFirstRowHasHeader,lReturnAllAsText,lcDataSource,lcConStr
lFirstRowHasHeader = .T.
lReturnAllAsText = .F.
 
lcDataSource = 'C:\temp\XLS - XML\XLS - XML\report.xls'
 
* Excel97-2003
*!*    lcConStr = ;
*!*      'Provider=Microsoft.Jet.OLEDB.4.0;'+;
*!*      'Data Source='+m.lcDataSource+';'+;
*!*      'Extended Properties="Excel 8.0;HDR='+;
*!*      IIF(m.lFirstRowHasHeader,'Yes','No')+';IMEX='+;
*!*      IIF(m.lReturnAllAsText,'1','0')+'"'
 
* Excel2007
lcConStr = ;
  'Provider=Microsoft.ACE.OLEDB.12.0;'+;
  'Data Source='+m.lcDataSource+';'+;
  'Extended Properties="Excel 8.0;HDR='+;
  IIF(m.lFirstRowHasHeader,'Yes','No')+'"
'
 
ReadSchema(m.lcConStr)
Select TableList
Scan
  lcTableName = Trim(Table_name)
  lcLocalCursor = Textmerge("Sheet<<PADL(RECNO(),2,'0')>>")
  *  ADOQuery(m.lcConStr, Textmerge("select * from [<<m.lcTableName>>]"), m.lcLocalCursor)
  Query2Cursor(m.lcConStr, Textmerge("select * from [<<m.lcTableName>>]"), m.lcLocalCursor)
Endscan
 
Procedure Query2Cursor(tcConStr,tcQuery,tcCursorName)
  loCursor = Newobject('CaGeneric','cageneric.prg','','ADO',m.tcConStr)
  loCursor.SelectCmd = m.tcQuery
  If loCursor.QueryFill()
    Select * From (loCursor.Alias) Into Cursor (m.tcCursorName)
  Endif
Endproc
 
Procedure ADOQuery(tcConStr,tcQuery,tcCursorName)
  Local oConn As 'ADODB.Connection'
  Local oRS As ADODB.RecordSet
  oConn = Createobject('ADODB.Connection')
  oConn.Mode= 1  && adModeRead
  oConn.Open( m.tcConStr )
  oRS = oConn.Execute(m.tcQuery)
  RS2Cursor(oRS,m.tcCursorName)
  oRS.Close
  oConn.Close
Endproc
 
Procedure ReadSchema(tcConStr)
  Local oConn As 'ADODB.Connection'
  Local rstSchema As ADODB.RecordSet
  oConn = Createobject('ADODB.Connection')
  oConn.Mode = 1  && adModeRead
  oConn.Open( m.tcConStr )
  rstSchema = oConn.OpenSchema(adSchemaTables)
  *rstSchema = oConn.OpenSchema(adSchemaColumns)
  RS2Cursor(rstSchema,'TableList')
  rstSchema.Close
  oConn.Close
Endproc
 
Procedure RS2Cursor(toRS, tcCursorName) && simple single cursor - not intended for complex ones
  tcCursorName = Iif(Empty(m.tcCursorName),'ADORs',m.tcCursorName)
  Local xDOM As 'MSXML.DOMDocument'
  xDOM = Createobject('MSXML.DOMDocument')
  toRS.Save(xDOM, 1)
  Xmltocursor(xDOM.XML, m.tcCursorName)
Endproc

CaGeneric.prg

Visual Fox Pro
Define Class CaGeneric As CursorAdapter

  CompareMemo = .F.
  FetchAsNeeded = .T.
  FetchSize = 100
  FetchMemo = .T.
  BatchUpdateCount = 100
  WhereType = 1
  AllowSimultaneousFetch = .T.
  MapVarchar = .T.
  MapBinary = .T.
  BufferModeOverride = 5
  *!*      *  Nodata = .T.
  Handle = 0
 
  Procedure AutoOpen
    If Not Pemstatus(This, '__VFPSetup', 5)
      This.AddProperty('__VFPSetup', 1)
      This.Init()
    Endif
  Endproc
 
  Procedure Init(tcType,tcConnectionString)
    Local llReturn
    Do Case
      Case Not Pemstatus(This, '__VFPSetup', 5)
        This.AddProperty('__VFPSetup', 0)
      Case This.__VFPSetup = 1
        This.__VFPSetup = 2
      Case This.__VFPSetup = 2
        This.__VFPSetup = 0
        Return
    Endcase
    Set Multilocks On
    llReturn = DoDefault()
 
    This.DataSourceType = m.tcType
 
    Store This.DataSourceType To ;
      this.InsertCmdDataSourceType, ;
      this.UpdateCmdDataSourceType, ;
      this.DeleteCmdDataSourceType
 
    ***<DataSource>
    Do Case
      Case Upper(This.DataSourceType) == "ODBC"
        This.Handle = Sqlstringconnect(m.tcConnectionString)
 
        Store This.Handle To ;
          This.Datasource,;
          This.InsertCmdDataSource,;
          This.UpdateCmdDataSource,;
          This.DeleteCmdDataSource
 
      Case Upper(This.DataSourceType) == "ADO"
        Local loConnDataSource
        loConnDataSource = Createobject('ADODB.Connection')
        ***<DataSource>
        loConnDataSource.ConnectionString = m.tcConnectionString
        ***</DataSource>
        loConnDataSource.Open()
        This.Datasource = Createobject('ADODB.RecordSet')
        This.Datasource.CursorLocation   = 3  && adUseClient
        This.Datasource.LockType         = 3  && adLockOptimistic
        This.Datasource.ActiveConnection = loConnDataSource
        *** End of Select connection code: DO NOT REMOVE
 
        loCommand = Createobject('ADODB.Command')
        loCommand.ActiveConnection = loConnDataSource
        This.AddProperty('oCommand',loCommand)
        This.UpdateCmdDataSource=loCommand
        This.InsertCmdDataSource=loCommand
        This.DeleteCmdDataSource=loCommand
 
      Case Upper(This.DataSourceType)="NATIVE" && Not implemented
      Case Upper(This.DataSourceType)="XML"  && Not implemented
    Endcase
    ***</DataSource>
 
    If This.__VFPSetup = 1
      This.__VFPSetup = 2
    Endif
    Return llReturn
  Endproc
 
  Procedure MakeUpdatable(tcTableName,tckeyField,tlDoNotIncludeKey)
    This.Tables = m.tcTableName
    This.KeyFieldList = m.tckeyField
    Local ix, lnUpdateableFCount
    lnUpdateableFCount = Fcount(This.Alias)-Iif(This.DataSourceType='ADO',1,0) && last one is ADOBOOKMARK
    For ix = 1 To m.lnUpdateableFCount
      If !m.tlDoNotIncludeKey Or !(Upper(Field(m.ix,This.Alias,0)) == Upper(m.tckeyField))
        This.UpdatableFieldList = This.UpdatableFieldList + ;
          IIF(Empty(This.UpdatableFieldList),'',',') + ;
          FIELD(m.ix,This.Alias,0)
      Endif
      This.UpdateNameList = This.UpdateNameList + ;
        IIF(Empty(This.UpdateNameList),'',',') + ;
        TEXTMERGE('<<FIELD(m.ix,this.Alias,0)>> <<m.tcTableName>>.<<FIELD(m.ix,this.Alias,0)>>')
    Endfor
  Endproc
 
  Procedure QueryFill()
    Local llSuccess
    If This.DataSourceType ="ADO"
      llSuccess = This.CursorFill(.F.,.F.,0,This.oCommand)
    Else
      llSuccess = This.CursorFill(.F.)
    Endif
    If !m.llSuccess
      Messagebox(This.GetErrorExplanation())
    Endif
    Return m.llSuccess
  Endproc
 
  Procedure GetErrorExplanation
    Local lcError,ix
    Local Array aWhy[1]
    Aerror(aWhy)
    lcError = ""
    For ix = 1 To 7
      lcError = m.lcError + Transform(aWhy[m.ix]) + Chr(13)
    Endfor
    Return m.lcError
  Endproc
Enddefine

9

Re: excel den gelen datanın tipi

teşekkür ederim