it-swarm.com.de

Excel-Datumsformat mit EPPlus

Ich habe Probleme beim Formatieren meiner Zellen in 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)";
}

Ausgabe davon in Excel: 41 917,00

Warum funktioniert das nicht? 

45
MrProgram

Ich stimme mit Yosoyke überein. Sie zielen wahrscheinlich auf die falschen Zellen. Du kannst es versuchen:

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";

wenn Sie die von taraz angegebene Formel verwenden. Fügen Sie am Ende Arbeitsblatt.Calculate () hinzu Referenz https://epplus.codeplex.com/wikipage?title=About%20Formula%20calculation

Oder anstelle der Formel alternativer Ansatz

private static decimal GetExcelDecimalValueForDate(DateTime date)
{
    DateTime start = new DateTime(1900, 1, 1);
    TimeSpan diff = date - start;
    return diff.Days + 2;
}

Referenz

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

Wenn Excel ein Datumsfeld speichert, wird es standardmäßig als numFormatId 14 (Schauen Sie sich die XML-Dateien in den XLS-Dateien an). Dies stellt sicher, dass die Datumsformate in allen Ländern korrekt sind, wenn die Datei geöffnet wird. In Epplus wird mm-dd-yy für Excel in numFormatId 14 übersetzt. Dadurch wird sichergestellt, dass beim Öffnen der Datei in einem Land das Datum basierend auf den kurzen Datumseinstellungen des Landes richtig formatiert wird .____. Auch das m/d/yy h:mm-Format ist für jedes Land korrekt.

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";
}

es werden alle Spalten mit der Kopfzeile Date in einem bestimmten Format formatiert

4
Swapnil Bidkar

Generische Lösung, die IEnumerable (Daten) durchläuft, durchläuft die Eigenschaften des generischen Objekts "DateType" oder "NullableDate Type" und verwendet die Formatierung

   //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

Einige Nachrichten:

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

0