/******************************************************************************* * 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 *******************************************************************************/ using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Globalization; namespace OfficeOpenXml.Style { /// /// The numberformat of the cell /// public sealed class ExcelNumberFormat : StyleBase { internal ExcelNumberFormat(ExcelStyles styles, OfficeOpenXml.XmlHelper.ChangedEventHandler ChangedEvent, int PositionID, string Address, int index) : base(styles, ChangedEvent, PositionID, Address) { Index = index; } /// /// The numeric index fror the format /// public int NumFmtID { get { return Index; } //set //{ // _ChangedEvent(this, new StyleChangeEventArgs(eStyleClass.Numberformat, "NumFmtID", value, _workSheetID, _address)); //} } /// /// The numberformat /// 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 StyleChangeEventArgs(eStyleClass.Numberformat, eStyleProperty.Format, (string.IsNullOrEmpty(value) ? "General" : value), _positionID, _address)); } } internal override string Id { get { return Format; } } /// /// If the numeric format is a build-in from. /// 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; } } } }