blob: 32d88acecae1147ed95684767c39b031e9966c2b [file] [log] [blame]
/*******************************************************************************
* You may amend and distribute as you like, but don't remove this header!
*
* EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
* See http://www.codeplex.com/EPPlus for details.
*
* Copyright (C) 2011 Jan Källman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
* If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
*
* All code and executables are provided "as is" with no warranty either express or implied.
* The author accepts no liability for any damage or loss of business that this product may cause.
*
* Code change notes:
*
* Author Change Date
* ******************************************************************************
* Jan Källman Initial Release 2009-10-01
* Jan Källman License changed GPL-->LGPL 2011-12-16
*******************************************************************************/
namespace OfficeOpenXml.Style;
/// <summary>
/// The numberformat of the cell
/// </summary>
public sealed class ExcelNumberFormat : StyleBase {
internal ExcelNumberFormat(
ExcelStyles styles,
XmlHelper.ChangedEventHandler changedEvent,
int positionId,
string address,
int index)
: base(styles, changedEvent, positionId, address) {
Index = index;
}
/// <summary>
/// The numeric index fror the format
/// </summary>
public int NumFmtID => Index;
/// <summary>
/// The numberformat
/// </summary>
public string Format {
get {
for (int i = 0; i < _styles.NumberFormats.Count; i++) {
if (Index == _styles.NumberFormats[i].NumFmtId) {
return _styles.NumberFormats[i].Format;
}
}
return "general";
}
set =>
_ChangedEvent(
this,
new(
eStyleClass.Numberformat,
eStyleProperty.Format,
(string.IsNullOrEmpty(value) ? "General" : value),
_positionID,
_address));
}
internal override string Id => Format;
/// <summary>
/// If the numeric format is a build-in from.
/// </summary>
public bool BuildIn { get; private set; }
internal static string GetFromBuildInFromId(int numFmtId) {
switch (numFmtId) {
case 0:
return "General";
case 1:
return "0";
case 2:
return "0.00";
case 3:
return "#,##0";
case 4:
return "#,##0.00";
case 9:
return "0%";
case 10:
return "0.00%";
case 11:
return "0.00E+00";
case 12:
return "# ?/?";
case 13:
return "# ??/??";
case 14:
return "mm-dd-yy";
case 15:
return "d-mmm-yy";
case 16:
return "d-mmm";
case 17:
return "mmm-yy";
case 18:
return "h:mm AM/PM";
case 19:
return "h:mm:ss AM/PM";
case 20:
return "h:mm";
case 21:
return "h:mm:ss";
case 22:
return "m/d/yy h:mm";
case 37:
return "#,##0 ;(#,##0)";
case 38:
return "#,##0 ;[Red](#,##0)";
case 39:
return "#,##0.00;(#,##0.00)";
case 40:
return "#,##0.00;[Red](#,##0.00)";
case 45:
return "mm:ss";
case 46:
return "[h]:mm:ss";
case 47:
return "mmss.0";
case 48:
return "##0.0";
case 49:
return "@";
default:
return string.Empty;
}
}
internal static int GetFromBuildIdFromFormat(string format) {
switch (format) {
case "General":
case "":
return 0;
case "0":
return 1;
case "0.00":
return 2;
case "#,##0":
return 3;
case "#,##0.00":
return 4;
case "0%":
return 9;
case "0.00%":
return 10;
case "0.00E+00":
return 11;
case "# ?/?":
return 12;
case "# ??/??":
return 13;
case "mm-dd-yy":
return 14;
case "d-mmm-yy":
return 15;
case "d-mmm":
return 16;
case "mmm-yy":
return 17;
case "h:mm AM/PM":
return 18;
case "h:mm:ss AM/PM":
return 19;
case "h:mm":
return 20;
case "h:mm:ss":
return 21;
case "m/d/yy h:mm":
return 22;
case "#,##0 ;(#,##0)":
return 37;
case "#,##0 ;[Red](#,##0)":
return 38;
case "#,##0.00;(#,##0.00)":
return 39;
case "#,##0.00;[Red](#,##0.00)":
return 40;
case "mm:ss":
return 45;
case "[h]:mm:ss":
return 46;
case "mmss.0":
return 47;
case "##0.0":
return 48;
case "@":
return 49;
default:
return int.MinValue;
}
}
}