EPPlus-Nummernformat

72

Ich habe eine mit Epplus erstellte Excel-Tabelle, habe einige Probleme und möchte von jemandem geleitet werden, der eine ähnliche Herausforderung gelöst hat.

Ich muss die Zahlenformatierung auf einen doppelten Wert anwenden und möchte ihn in Excel so darstellen.

  • 8 → 8.0
  • 12 → 12.0
  • 14.54 → 14.5
  • 0 → 0.0

Hier ist mein Code

ws.Cells[row, col].Style.Numberformat.Format = "##0.0";

Die endgültige Excel-Datei hängt immer E + 0 an das Ende dieses Formats an und zeigt daher stattdessen die endgültigen Werte wie folgt an.

  • 8 → 8.0E + 0
  • 12 → 12.0E + 0
  • 14,54 → 14,5E + 0
  • 0 → 000.0E + 0

Als ich in dem Format Zellen der erzeugten Excel - Tabelle zu überprüfen, ich sehe , dass mein Format erscheint ##0.0E+2statt , ##0.0dass ich aufgebracht.

Was kann falsch sein?

Tonto
quelle
## 0.0 steht für das Währungsformat. "0.00" ist für das Zahlenformat
Richa Garg

Antworten:

157

Hier sind einige Optionen für das Zahlenformat für EPPlus:

//integer (not really needed unless you need to round numbers, Excel will use default cell properties)
ws.Cells["A1:A25"].Style.Numberformat.Format = "0";

//integer without displaying the number 0 in the cell
ws.Cells["A1:A25"].Style.Numberformat.Format = "#";

//number with 1 decimal place
ws.Cells["A1:A25"].Style.Numberformat.Format = "0.0";

//number with 2 decimal places
ws.Cells["A1:A25"].Style.Numberformat.Format = "0.00";

//number with 2 decimal places and thousand separator
ws.Cells["A1:A25"].Style.Numberformat.Format = "#,##0.00";

//number with 2 decimal places and thousand separator and money symbol
ws.Cells["A1:A25"].Style.Numberformat.Format = "€#,##0.00";

//percentage (1 = 100%, 0.01 = 1%)
ws.Cells["A1:A25"].Style.Numberformat.Format = "0%";

//accounting number format
ws.Cells["A1:A25"].Style.Numberformat.Format = "_-$* #,##0.00_-;-$* #,##0.00_-;_-$* \"-\"??_-;_-@_-";

Ändern Sie die Dezimal- und Tausendertrennzeichen nicht in Ihre eigene Lokalisierung. Excel erledigt das für Sie.

Auf Anfrage einige DateTime-Formatierungsoptionen.

//default DateTime pattern
worksheet.Cells["A1:A25"].Style.Numberformat.Format = DateTimeFormatInfo.CurrentInfo.ShortDatePattern;

//custom DateTime pattern
worksheet.Cells["A1:A25"].Style.Numberformat.Format = "dd-MM-yyyy HH:mm";
VDWWD
quelle
Gibt es eine ähnliche Referenz für Datums- und Uhrzeitformate? Ich versuche, eine Datei zu lesen, deren Format als TT-MM-JJ h: mm angegeben ist, aber beim Debuggen sehe ich das Format wie folgt: "[$ -10409] m / t / JJJJ \\ h: mm: ss \\ AM / PM "
Segmentierungsfehler
1
Einige Beispiele hinzugefügt, aber im Grunde funktioniert es genauso wie Zahlen.
VDWWD
1
Nvm, habe es gefunden. Anstatt nur ein Symbol zu verwenden, müssen mehrere Zeichen maskiert werden. Für CHF könnte es so aussehen:_ \"CHF\" * # ##0.00_ ;_ \"CHF\" * -# ##0.00_ ;_ \"CHF\" * \"-\"??_ ;_ @_
UeliDeSchwert
2
Don't change the decimal and thousand separators to your own localization. Excel will do that for you.Das! Der Versuch, Dezimalstellen zu "korrigieren", ist eine große Quelle von Fehlern und fehlerhaften Formeln!
Panagiotis Kanavos
6
Wenn Sie Ihre Zellen als Text formatieren möchten, setzen SieStyle.Numberformat.Format = "@";
Mass Dot Net
2

Ergänzung zur akzeptierten Antwort, da der Wert Accept Object die Nummer zum Beispiel an Value übergeben muss, wenn Ihre Eingabe in einer Zeichenfolge erfolgt:

var input = "5";    
ws.Cells["A1:A25"].Value = double.Parse(input);
Afshin Razaghi
quelle
0

Ein weiterer Zusatz zur akzeptierten Antwort: Sie können nullfähige Werte verwenden und die Formatierung sieht gut aus, ABER es wird eine Zeichenfolge in Excel und Sie können nicht SUM, AVG usw.

Stellen Sie also sicher, dass Sie die tatsächliche ValueNullwerte verwenden.

Matt Kemp
quelle
0

Und wenn Sie eine bestimmte Spalte wie die Spalte "B" im Zahlenformat formatieren möchten, können Sie dies auf folgende Weise tun:

using (var package = new ExcelPackage())
{
  var worksheet = package.Workbook.Worksheets.Add("SHEET1");
  worksheet.Cells["A1"].LoadFromDataTable(dataTable, PrintHeaders: true);
  for (var col = 1; col < dataTable.Columns.Count + 1; col++)
  {
    if (col == 2)//col number 2 is equivalent to column B
    {
      worksheet.Column(col).Style.Numberformat.Format = "#";//apply the number formatting you need
    }
    worksheet.Column(col).AutoFit();
  }
  return File(package.GetAsByteArray(), XlsxContentType, "report.xlsx");//downloads file
}
Atiq Baqi
quelle