Mancano millisecondi quando si ottiene un valore DateTime da Excel utilizzando .Net Interop
-
08-07-2019 - |
Domanda
Se inserisco un valore DateTime in una cella Excel utilizzando Range.set_value
tramite .Net COM Interop, e quindi recupero il valore di quella stessa cella utilizzando Range.get_value
, la parte in millisecondi del valore non viene restituita, sebbene tutto il resto sia corretto.
È un bug?
Qual è la soluzione alternativa? Immagino che l'utilizzo della proprietà Value2 potrebbe essere d'aiuto. Qualcun altro ha provato questo?
Soluzione 2
Come Jon ha suggerito , la conversione di DateTime in doppio usando DateTime.ToOADate (poi di nuovo usando DateTime.FromOADate) funziona se imposti il ??valore usando la proprietà Range.Value2.
L'unico problema con questa proprietà è che, se non lo sai già, non ti dice che la cella dovrebbe essere trattata come un DateTime. Immagino che per risolvere questo problema, avresti bisogno di usare un approccio a due passaggi: ottenere i valori delle celle utilizzando Range.get_Value per determinare il loro tipo, quindi, per qualsiasi cella DateTime, ottenere nuovamente i loro valori utilizzando Range.Value2, quindi convertire utilizzando DateTime .FromOADate.
Altri suggerimenti
Se imposti manualmente una data / ora con un valore in millisecondi in Excel, lo mantiene? Non conosco il modello di oggetti interno di Excel, ma è ipotizzabile che non supporti millisecondi.
EDIT: Okay, ora sappiamo che il set fallisce (anche il get potrebbe fallire, ovviamente) ... potresti provare a impostarlo come double dopo averlo convertito tramite DateTime.ToOADate () . Non sto dicendo che sto offrendo molta speranza, ma vale la pena provare ...
Probabilmente è a causa del problema descritto in questo articolo KB .
In tal caso, l'impostazione della proprietà Value2 dovrebbe funzionare.