J'ai du mal à formater mes cellules en date.
FileInfo info = new FileInfo(path);
using (ExcelPackage package = new ExcelPackage(info))
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add(sheetName);
ws.Cells[3, 1].Style.Numberformat.Format = "yyyy-mm-dd";
ws.Cells["A3"].Formula = "=DATE(2014,10,5)";
}
Résultat de ceci dans Excel: 41 917,00
Pourquoi ça ne marche pas?
Je suis d'accord avec Yosoyke. Vous ciblez probablement les mauvaises cellules. Tu peux essayer:
ws.Cells["A3"].Style.Numberformat.Format = "yyyy-mm-dd";
ws.Cells["A3"].Formula = "=DATE(2014,10,5)";
worksheet.Cells["YOURDATECELL_OR_YOURDATECELLRANGE"].Style.Numberformat.Format = "mm-dd-yy";
si vous utilisez la formule mentionnée par taraz. ne pas ajouter feuille de calcul.Calculer () à la fin ..__ référence https://epplus.codeplex.com/wikipage?title=About%20Formula%20calculation
Ou au lieu d'utiliser une formule, approche alternative
private static decimal GetExcelDecimalValueForDate(DateTime date)
{
DateTime start = new DateTime(1900, 1, 1);
TimeSpan diff = date - start;
return diff.Days + 2;
}
worksheet.Cells["A2"].Value = GetExcelDecimalValueForDate(Convert.ToDateTime('2016-04-29'));
worksheet.Cells["A2"].Style.Numberformat.Format = "mm-dd-yy";//or m/d/yy h:mm
Par défaut, lorsque Excel enregistre un champ de date, il l’enregistre sous le nom numFormatId
14 (Regardez les fichiers xml dans le fichier xls). Cela garantit les formats de date correctement dans tous les pays lors de l'ouverture du fichier. Dans Epplus mm-dd-yy
se traduit par numFormatId
14 pour Excel. Cela garantira que, lorsque le fichier est ouvert dans un pays, la date sera formatée correctement en fonction des paramètres de date abrégée du pays . Notez également que m/d/yy h:mm
est correctement formaté pour tous les pays.
var dateColumns = from DataColumn d in dt.Columns
where d.DataType == typeof(DateTime) || d.ColumnName.Contains("Date")
select d.Ordinal + 1;
foreach (var dc in dateColumns)
{
worksheet.Cells[2, dc, rowCount + 2, dc].Style.Numberformat.Format = "mm/dd/yyyy hh:mm:ss AM/PM";
}
il formatera toutes les colonnes avec l'en-tête Date au format spécifique donné/fourni
Solution générique qui prend IEnumerable (data), elle parcourt les propriétés de l'objet générique qui est de type DateType ou nullableDate Type et applique le formatage:
//set the list of dateColumns which will be used to formate them
List<int> dateColumns = new List<int>();
//get the first indexer
int datecolumn = 1;
//loop through the object and get the list of datecolumns
foreach (var PropertyInfo in data.FirstOrDefault().GetType().GetProperties())
{
//check if property is of DateTime type or nullable DateTime type
if (PropertyInfo.PropertyType == typeof(DateTime) || PropertyInfo.PropertyType == typeof(DateTime?))
{
dateColumns.Add(datecolumn);
}
datecolumn++;
}
// Create the file using the FileInfo object
var file = new FileInfo(outputDir + fileName);
//create new Excel package and save it
using (var package = new ExcelPackage())
{
//create new worksheet
var worksheet = package.Workbook.Worksheets.Add("Results");
// add headers
worksheet.Cells["A1"].LoadFromCollection(data, true);
//format date field
dateColumns.ForEach(item => worksheet.Column(item).Style.Numberformat.Format = "dd-mm-yyyy");
// auto size columns
worksheet.Cells.AutoFitColumns();
//save package
package.SaveAs(file);
}
Quelques nouvelles:
ws.Cells ["A3"]. Style.Numberformat.Format = "[$ -en-US] aaaa-mmm-jj";
ws.Cells ["A3"]. Formula = "= DATE (2014,10,5)";