Recentemente nei gruppi di microsoft si è presentato il seguente problema:

Una collega ha un foglio excel con delle colonne in formato testo,
le quali contengono dei valori. Con una query SQL per mezzo di
ADO.NET estre i valori dal foglio excel e sorprendentemente
ottiene dei valori NULL per delle celle che contengono effettivamente
un dato.

Ecco la risposta di Microsoft:

To understand this problem, you must understand 2 things:

1) The Excel driver must "guess" the datatype of each column. To do this, it
reads (by default) the first 8 rows of data. You can change this value in
the Registry.

2) After the Excel driver guesses the datatype of the column, it returns
ONLY the values of that datatype. For example, if  the driver reads 8 rows,
and finds 5 numbers and 3 text values, it concludes that the column is
numeric, and it returns 5 numbers and 3 NULLs.

What can you do?

You can change the number of rows that the Excel driver reads (as in #1
above), but this does not resolve the problem in #2 above.

You can enable "Import Mode" in your connection string. See:

194124 PRB: Excel Values Returned as NULL Using DAO OpenRecordset