示例#1
0
        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);
            }
        }
示例#2
0
        public static string ForDisplay(this decimal?value, ValueDisplayType valueDisplayType = ValueDisplayType.Default)
        {
            if (!value.HasValue)
            {
                return("---");
            }

            return(value.Value.ForDisplay(valueDisplayType));
        }
示例#3
0
        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("- ", "-"));
        }
示例#4
0
        /// <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("######");
            }
        }
示例#5
0
        /// <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);
        }
示例#6
0
        public static string ForEdit(this decimal value, ValueDisplayType valueDisplayType = ValueDisplayType.Default)
        {
            var nfi = new NumberFormatInfo();

            return(value.ApplyDisplayType(valueDisplayType).ToString("0.######", nfi));
        }
示例#7
0
 /// <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));
 }
示例#8
0
        /// <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);
        }