2012-03-30 19 views
7

Sto tentando di utilizzare C# per leggere il file excel che ha un tipo di dati mescolato. Qui di seguito è la mia stringa di connessioneLettura di Excel DataType InterMixed senza modificare la chiave di registro

var path = //xls location 
var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;IMEX=1;'"); 

ricerca mi ha insegnato che la completa Extended Properties nella stringa di connessione si suppone che sia

Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text

Tuttavia, mi è stato informato che nella stringa di connessione, il TypeGuessRows=0ha nessun significato come il valore sarà prelevato direttamente dal Registro di sistema. Quindi ho bisogno di modificare la chiave manualmente e rimuovere questa proprietà dalla stringa di connessione.

La particolare chiave di registro che è stato coinvolto è:

sentiero:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

chiave:

TypeGuessRows

valore originale = , al fine di farlo funzionare in cambio =

Senza fare questo il IMEX non funzionerà nemmeno difficile aggiungo TypeGuessRows=0 nella Extended Properties.

Tuttavia, la mia azienda proibisce di modificare il valore del registro (rigorosamente). Mi è stato detto di trovare alternative facendo questo.

In breve:

Esiste un modo per lettura tipo di dati mescolati eccellere file di , senza dovermodificare qualsiasi chiave di registro (che è una pratica abbastanza comune)?

Ulteriore argomento:

Avete sperimentato prima? Ci sono possibilità che possiamo impostare TypeGuessRows=0 dalla stringa di connessione solo senza dover modificare la chiave di registro (annullando la mia premessa precedente).

Se le cose non funzionano con OleDb:

Esistono alternative accanto OleDb?

Apprezzo qualsiasi consiglio o suggerimento.

saluti

risposta

6

Che cosa si può fare è quello di richiedere avendo intestazione in prima fila di Excel e stringa di connessione impostato su

var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1;'"); 

La chiave qui è di impostare HDR = No (nessuna intestazione), ma dal momento che hai intestazione ora ogni colonna sarà trattata come stringa (testo), e si può fare analisi o convalida su ogni valore di cella. Ovviamente è necessario saltare o rimuovere la prima riga, poiché contiene informazioni di intestazione.