Ignorert kolonner ved hjelp VB6 for å trekke ut fra utmerker

stemmer
0

Jeg prøver å trekke ut en tabell med verdier fra en excel (2003) regneark ved hjelp VB6, hvor resultatet må lagres i et (adodb) recordset. Tabellen ser slik ut:

    Navn Option.1 Option.2 Option.3 Option.4 Option.5 Option.6 
    -------------------------------------------------- ---------------
    Name1 2 3 4
    Name2 2 3 4
    NAME3 2 3 4
    NAME4 2 3 4
    NAME5 2 3 4
    Name6 2 3 4
    Name7 2 3 4
    Name8 2 3 4
    Name9 2 3 4 5 6 7  

Etter tilkobling og behandlingen av forespørselen SELECT * FROM [Sheet1$], eller til og med en kolonne-spesifikke SELECT [Option#6] FROM [Sheet1$] (se fotnote 1) og viderekobling av resultatene, er jeg gitte Nullverdier for p Name9, Option.4-> Option.6snarere enn de korrekte verdiene 5, 6, og 7 . det virker forbindelsen til regnearket ved hjelp av en best guess med å avgjøre hva de gyldige bordgrenser er, og tar bare et visst antall rader i betraktning.

For å koble til regnearket, jeg har prøvd begge tilkoblings leverandører Microsoft.Jet.OLEDB.4.0og MSDASQLog få samme problem.

Her er tilkoblingsinnstillingene jeg bruker:

Set cn = New ADODB.Connection
With cn
    .Provider = Microsoft.Jet.OLEDB.4.0
    .ConnectionString = Data Source= & filePath & ;Extended Properties=Excel 8.0;
    - - - - OR - - - - 
    .Provider = MSDASQL
    .ConnectionString = Driver={Microsoft Excel Driver (*.xls)}; & _
                        DBQ= & filePath & ;MaxScanRows=0;
    .CursorLocation = adUseClient
    .Open
End With  
Set rsSelects = New ADODB.Recordset
Set rsSelects = cn.Execute(SELECT [Option#5] FROM  & [ & strTbl & ])

Dette problemet oppstår bare når det er mer enn 8 p (unntatt kolonnenavnene), og jeg har satt MaxScanRow=0for MSDASQLtilkobling, men dette har gitt de samme resultatene.

Kjente prosjektreferanser jeg har tatt med er:

  • MS ActiveX Data Objects 2.8 Library
  • MS ActiveX Data Objects Recordset 2,8 Library
  • MS Excel 11.0 Object Library
  • MS data bindende Collection VB 6.0 (SP4)

Noen hjelp i denne saken ville være veldig verdsatt!

(1) For noen grunn, da inkludert et punktum i kolonnenavnet, det blir tolket som en #.


Takk alle sammen! Halvveis gjennom å prøve å sette opp en Schema.iniprogrammatisk fra KB155512 onedaywhen skjer utmerket innlegg pekte meg mot løsningen:

.Provider = Microsoft.Jet.OLEDB.4.0
.ConnectionString = Data Source= & filePath & ;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;

Jeg vil oppfordre alle som har lignende problemer å lese innlegget og kommentarer, siden det er små variasjoner til en løsning fra en person til en annen.

Publisert på 23/10/2008 klokken 09:35
kilden bruker
På andre språk...                            


3 svar

stemmer
3

Excel ISAM-driveren som standard ser inn i første håndfull av dine rekker og gjetter deres datatype. Skulle det være (senere i tabellen) data som ikke passer inn i den første antakelsen, frowns det og viser det til NULL.

Din MaxScanRows=0innstilling er nøkkelen til dette problemet. Det høres ut som det ville gjøre det rette (skanne hele tabellen for datatypen å bruke), men egentlig er det ikke.

Se onedaywhen 's svar for ytterligere detaljer, min første info om KB282263 var ikke riktig råd.

Svarte 23/10/2008 kl. 10:00
kilden bruker

stemmer
0

Det beste rådet jeg kan gi deg er å slutte å gjøre det i VB6 miljøet. Åpne Excel, trykk ALT + F11 og laste VBA IDE. Sett inn koden der inne. Fra i dette miljøet kan du få tilgang til hele Excel objektmodellen.

Jeg har sett mange mennesker prøver og samhandle med Excel på mange forskjellige måter, og de har alle problemer. Enten ved hjelp av VBA-makro, eller Add-in-metoden er en beste måten jeg har funnet for å få på dataene. Det er hvordan Microsoft får Excel og Project til å integrere med TFS.

Noen ganger må du tenke gjennom prosessen litt for denne tilnærmingen å være egnet. Eg Du må kanskje få brukeren som bruker regneark til å kjøre en makro som vil presse data ut av regnearket i stedet for deg å kjøre en prosess for å trekke data fra regnearket, men vanligvis er det ganske gjennomførbart.

Svarte 23/10/2008 kl. 11:05
kilden bruker

stemmer
1

Du er riktig: det er å gjette datatypen basert på et antall rader. Det er lokale maskin registernøkler du kan være i stand til å endre for å påvirke datatype som velges. For mer informasjon, se dette svaret .

Svarte 23/10/2008 kl. 11:31
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more