private static decimal ApplyDisplayType(this decimal value, ValueDisplayType valueDisplayType) { switch (valueDisplayType) { case ValueDisplayType.Default: return(value); case ValueDisplayType.Percent: return(Math.Round(value, 2)); case ValueDisplayType.Money: case ValueDisplayType.MoneyWithZeroCopecks: return(Math.Round(value, 2)); case ValueDisplayType.Volume: return(Math.Round(value, 4)); case ValueDisplayType.Weight: case ValueDisplayType.WeightWithZeroFractionPart: return(Math.Round(value, 3)); case ValueDisplayType.CurrencyRate: return(Math.Round(value, 6)); case ValueDisplayType.FileSize: return(Math.Round(value, 2)); case ValueDisplayType.PackCount: return(Math.Round(value, 3)); default: return(value); } }
public static string ForDisplay(this decimal?value, ValueDisplayType valueDisplayType = ValueDisplayType.Default) { if (!value.HasValue) { return("---"); } return(value.Value.ForDisplay(valueDisplayType)); }
public static string ForDisplay(this decimal value, ValueDisplayType valueDisplayType = ValueDisplayType.Default) { var nfi = new NumberFormatInfo(); // получаем шаблон вывода дробной части значения var fractionPartTemplate = GetDisplayTypeFractionPartTemplate(valueDisplayType); var format = String.Format("### ### ### ### ### ##0.{0}", fractionPartTemplate); return(value.ApplyDisplayType(valueDisplayType).ToString(format, nfi).TrimStart(' ') .Replace("- ", "-").Replace("- ", "-").Replace("- ", "-").Replace("- ", "-").Replace("- ", "-")); }
/// <summary> /// Получение шаблона вывода дробной части для указанного типа отображения значения /// </summary> /// <param name="valueDisplayType">тип отображения значения</param> /// <returns>Шаблон вывода дробной части</returns> private static string GetDisplayTypeFractionPartTemplate(ValueDisplayType valueDisplayType) { switch (valueDisplayType) { case ValueDisplayType.WeightWithZeroFractionPart: return("000###"); case ValueDisplayType.MoneyWithZeroCopecks: return("00####"); default: return("######"); } }
/// <summary> /// Установить формат для ячейки /// </summary> /// <param name="range"></param> /// <param name="displayType"></param> /// <returns></returns> private static ExcelRange SetFormat(this ExcelRange range, ValueDisplayType displayType) { foreach (var cell in range) { if (cell.Value is decimal) { decimal value = ((decimal)cell.Value); switch (displayType) { case ValueDisplayType.FileSize: case ValueDisplayType.Percent: case ValueDisplayType.Money: case ValueDisplayType.MoneyWithZeroCopecks: cell.Value = Math.Round(value, 2); cell.Style.Numberformat.Format = "#,##0.00"; break; case ValueDisplayType.PackCount: case ValueDisplayType.Weight: cell.Value = Math.Round(value, 3); cell.Style.Numberformat.Format = "#,##0.000"; break; case ValueDisplayType.Volume: cell.Value = Math.Round(value, 4); cell.Style.Numberformat.Format = "#,##0.0000"; break; case ValueDisplayType.CurrencyRate: cell.Value = Math.Round(value, 6); cell.Style.Numberformat.Format = "#,##0.000000"; break; default: cell.Style.Numberformat.Format = "@"; cell.Value = value.ToString(); break; } } } return(range); }
public static string ForEdit(this decimal value, ValueDisplayType valueDisplayType = ValueDisplayType.Default) { var nfi = new NumberFormatInfo(); return(value.ApplyDisplayType(valueDisplayType).ToString("0.######", nfi)); }
/// <summary> /// Задать значение ячейке, установить ее формат и стиль /// </summary> /// <param name="range">Диапазон ячеек</param> /// <param name="value">Значение</param> /// <param name="style">Стиль</param> /// <param name="displayType">Тип данных</param> public static ExcelRange SetFormattedValue(this ExcelRange range, object value, ExcelCellStyle style, ValueDisplayType displayType = ValueDisplayType.Default) { return(range.SetFormattedValue(value, displayType).ApplyStyle(style)); }
/// <summary> /// Задать значение ячейке и установить ее формат (Будет установлен формат по умолчанию) /// </summary> /// <param name="range">Диапазон ячеек</param> /// <param name="value">Значение</param> /// <param name="displayType">Тип данных</param> public static ExcelRange SetFormattedValue(this ExcelRange range, object value, ValueDisplayType displayType = ValueDisplayType.Default) { decimal dresult = 0; long lresult = 0; if (value is string?decimal.TryParse(value.ToString().Replace('.', ','), out dresult) : value is decimal || value is double || value is float) { range.Value = value is string?dresult : value; range.SetFormat(displayType); } else { if (value is string?long.TryParse(value.ToString().Replace('.', ','), NumberStyles.Integer | NumberStyles.AllowThousands, CultureInfo.CurrentCulture, out lresult) : value is int || value is long || value is short) { range.Value = value is string?lresult : value; } else { DateTime dtresult = new DateTime(1, 1, 1); if (value is string?DateTime.TryParse(value.ToString(), out dtresult) : value is DateTime) { range.Value = value is string?dtresult : value; range.Style.Numberformat.Format = "dd.mm.yyyy";//Формат даты } else { range.Value = value; } } } return(range); }