using System; using System.Globalization; using System.Threading; using CPF.ReoGrid.DataFormat; namespace CPF.ReoGrid.IO.OpenXML { internal sealed class BuiltinNumberFormats { public static bool SetFromExcelBuiltinFormat(Worksheet rgSheet, Cell cell, int formatId, out CellDataFormatFlag dataFormatFlag) { CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; CellDataFormatFlag? cellDataFormatFlag = null; object dataFormatArgs = null; switch (formatId) { case 0: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.General); break; case 1: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 0, UseSeparator = false }; break; case 2: case 11: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2, UseSeparator = false }; break; case 3: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 0, UseSeparator = true }; break; case 4: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2, UseSeparator = true }; break; case 9: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Percent); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 0, UseSeparator = false }; break; case 10: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Percent); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2, UseSeparator = false }; break; case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.DateTime); dataFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs { CultureName = currentCulture.Name, Format = DateTimeFormat.Formats[formatId] }; break; case 37: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 0, UseSeparator = true, NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Brackets }; break; case 38: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 0, UseSeparator = true, NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets }; break; case 39: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2, UseSeparator = true, NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Brackets }; break; case 40: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number); dataFormatArgs = new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2, UseSeparator = true, NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets }; break; case 45: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.DateTime); dataFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs { CultureName = currentCulture.Name, Format = "mm:ss" }; break; case 46: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.DateTime); dataFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs { CultureName = currentCulture.Name, Format = "h:mm:ss" }; break; case 47: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.DateTime); dataFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs { CultureName = currentCulture.Name, Format = "mmss.f" }; break; case 49: cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Text); break; } bool flag = cellDataFormatFlag == null; bool result; if (flag) { dataFormatFlag = CellDataFormatFlag.General; result = false; } else { cell.DataFormat = cellDataFormatFlag.Value; cell.DataFormatArgs = dataFormatArgs; dataFormatFlag = cellDataFormatFlag.Value; result = true; } return result; } } }