web-dev-qa-db-fra.com

Format de date Excel avec EPPlus

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? 

45
MrProgram

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)";
57
Taraz
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;
}

Référence

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.

10
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

4
Swapnil Bidkar

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);
            }
0
User

Quelques nouvelles:

ws.Cells ["A3"]. Style.Numberformat.Format = "[$ -en-US] aaaa-mmm-jj";
ws.Cells ["A3"]. Formula = "= DATE (2014,10,5)";

0
Carmelo Quartarone