2008-11-22 2 views

Répondre

18

Cela signifie que quelque part dans le programme tente de convertir vers ou à partir d'une date OLE Automation en dehors de la plage valide 1-Janvier-4713 BC à 31-Décembre-9999 AD. Il peut avoir traversé car les dates OLE Automation sont représentées comme double.

Commencez par la recherche de toute utilisation des méthodes:

DateTime.FromOADate

DateTime.ToOADate

0

Cela signifie que vous avez fourni une date non valide quelque part, en essayant de convertir ou d'une date OLE Automation en dehors de la plage valide 1-Janvier -4713 av. J.-C. au 31 décembre-9999 ap. Une cause possible est que cela pourrait avoir traversé car les dates OLE Automation sont représentées comme un double.

+2

N'est-ce pas un peu trop évident une réponse? – bugmagnet

+2

C'est une question évidente, je ne sais pas comment on pourrait être plus utile si le PO ne fournira aucun détail. –

+0

D'accord. Nous ne pouvons pas aider plus sans plus de détails comme le code. – lacop

12

Un OADate est représenté sous la forme d'une double valeur dont la valeur est le nombre de jours à partir de minuit le 30 décembre 1899 (valeurs négatives représentant les dates antérieures).

Cette exception est levée lors de la tentative de conversion d'une valeur hors de la plage valide des dates Ole Automation vers/depuis une valeur .NET DateTime (méthodes DateTime.FromOADate et DateTime.ToOADate - qui sont également utilisées implicitement pour COM Interop).

Je crois être valide pour la conversion en un OADate la valeur .NET DateTime doit être strictement supérieure à 01/01/0100.

Pour convertir OADate en valeur .NET DateTime, la valeur double doit être strictement supérieure à -657435 (= 01/01/0100) et strictement inférieure à 2958466.0 (01/01/10000).

0

Je l'ai utilisé:

try 
{ 
    if (folderItem.ModifyDate.Year != 1899) 
    { 
     this.FileModifiedDate = folderItem.ModifyDate.ToShortDateString() + 
      " " + 
      folderItem.ModifyDate.ToLongTimeString(); 
    } 
} 
//we need this because it throws an exception if it's an invalid date... 
catch (ArgumentException) { } 

pour faire face au même problème que je vais avoir. Il jette l'exception quand on vérifie l'année dans mon cas. Ne rien faire à une date invalide est exactement le comportement que je veux, donc ce hack fonctionne.

0

Ce que j'ai trouvé était qu'une colonne avec un grand row_id '257381195' essayait d'être lue par Excel comme date. Ce que j'ai fini par faire était de modifier les données de cette colonne en une chaîne en précédant le row_id avec un seul guillemet. Cela a résolu mon problème. J'espère que cela t'aides.

Questions connexes