Mancano millisecondi quando si ottiene un valore DateTime da Excel utilizzando .Net Interop

StackOverflow https://stackoverflow.com/questions/298458

  •  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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top