Excel et les formats de date récupérés avec C# .NET
Par Ronan le samedi, juillet 21 2007, 14:24 - Plateforme .NET - Lien permanent
Dans une classe servant à lire des fichiers Excel, on utilise souvent la méthode :
Excel._WorkSheet.get_Rang(Object cell1 Object cell2)
provenant des API de Excel pour récupérer un tableau des valeurs des cellules se trouvant dans une plage entre deux cellules de début et de fin. Dans la classe gérant l'API d'Excel, la méthode correspond souvent à ceci :
public string[] Excel_GetRange(string range)
{
Excel.Range workingRangeCells =
this._excelWorksheet.get_Range(range, Type.Missing);
workingRangeCells.Select();
System.Array array =
(System.Array)workingRangeCells.Cells.Value2;
string[] arrayS = this.ConvertToStringArray(array);
return arrayS;
}
Lorsqu'on récupère la valeur d'une cellule au format date, elle est quelques fois dans un format standard peu éloquent, du genre "39326" pour une date "01/09/2007". En fait c'est la cellule d'Excel qui est au format Date, mais la valeur stockée n'est pas une date mais un entier. Cet entier est un nombre de jours : le nombre de jour entre le 30/12/1899 et la date récupérée dans Excel. Une première solution consiste à ré-écrire la méthode GetRange(), comme proposé ici. Une autre méthode consiste à faire faire à .NET le calcul rapide de la date réelle, en utilisant DateTime.AddDays();.
// Dans une classe de traitement lisant les valeurs d'Excel :
//datevalueFromExcel est la string récupérée depuis Excel via
DateTime dt = new DateTime(1899, 12, 30).AddDays(
Convert.ToDouble(datevalueFromExcel));
dispo_date = dt.ToShortDateString();
Hop !
Commentaires