Beispiel #1
0
 public static bool IsExcelNumberDataType(TypeCode type)
 {
     if (FormatHandler.GetDataType(type) == ExcelDataType.Number)
     {
         return(true);
     }
     return(false);
 }
Beispiel #2
0
        private static string GetDateTimeFormat(string format, string language, object rplCalendar)
        {
            if (format == null || format.Length <= 0)
            {
                format = "G";
            }
            CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture(language);

            cultureInfo = new CultureInfo(cultureInfo.Name, false);
            if (cultureInfo.DateTimeFormat == null)
            {
                cultureInfo.DateTimeFormat = DateTimeFormatInfo.CurrentInfo;
            }
            if (rplCalendar != null)
            {
                bool       flag              = false;
                Calendar   calendarInstance  = LayoutConvert.GetCalendarInstance((RPLFormat.Calendars)rplCalendar);
                Type       type              = calendarInstance.GetType();
                Calendar[] optionalCalendars = cultureInfo.OptionalCalendars;
                foreach (Calendar calendar in optionalCalendars)
                {
                    if (type == calendar.GetType())
                    {
                        flag = true;
                        break;
                    }
                }
                if (flag)
                {
                    cultureInfo.DateTimeFormat.Calendar = calendarInstance;
                }
                else
                {
                    calendarInstance = new GregorianCalendar();
                    cultureInfo.DateTimeFormat.Calendar = calendarInstance;
                }
            }
            string             empty          = string.Empty;
            DateTimeFormatInfo dateTimeFormat = cultureInfo.DateTimeFormat;
            string             timeSeparator  = dateTimeFormat.TimeSeparator;
            string             dateSeparator  = dateTimeFormat.DateSeparator;

            empty = ((format.Length != 1) ? format : FormatHandler.GetDateTimePattern(format[0], dateTimeFormat));
            return(FormatHandler.GetExcelPictureDateTimeFormat(empty, timeSeparator, dateSeparator));
        }
Beispiel #3
0
        public static string GetExcelNumberFormat(string rsNumberFormat, string language, RPLFormat.Calendars rplCalendar, string numeralLanguage, int numeralVariant, TypeCode type, object originalValue, out string hexFormula, out bool invalidFormatCode)
        {
            hexFormula = null;
            string empty = string.Empty;
            string str   = string.Empty;

            invalidFormatCode = false;
            if (type != TypeCode.DateTime)
            {
                bool flag  = false;
                bool flag2 = default(bool);
                empty = FormatHandler.GetNumberFormat(rsNumberFormat, language, out flag2, type, originalValue, ref flag);
                if (string.IsNullOrEmpty(empty))
                {
                    invalidFormatCode = true;
                }
                else if (!flag2)
                {
                    if (empty != null && empty.Length > 0 && empty != "General")
                    {
                        str = FormatHandler.GetFormatStringPrefix(rplCalendar, numeralVariant, language, numeralLanguage);
                    }
                }
                else
                {
                    hexFormula = empty;
                }
            }
            else
            {
                empty = FormatHandler.GetDateTimeFormat(rsNumberFormat, language, rplCalendar);
                if (string.IsNullOrEmpty(empty))
                {
                    invalidFormatCode = true;
                }
                else
                {
                    str = FormatHandler.GetFormatStringPrefix(rplCalendar, numeralVariant, language, numeralLanguage);
                }
            }
            return(str + empty);
        }
Beispiel #4
0
        private static string GetCurrencyFormat(NumberFormatInfo numberFormatInfo, int precision)
        {
            string currencyDecimalSeparator = NumberFormatInfo.InvariantInfo.CurrencyDecimalSeparator;
            string currencyGroupSeparator   = NumberFormatInfo.InvariantInfo.CurrencyGroupSeparator;

            int[]  currencyGroupSizes      = numberFormatInfo.CurrencyGroupSizes;
            int    currencyNegativePattern = numberFormatInfo.CurrencyNegativePattern;
            int    currencyPositivePattern = numberFormatInfo.CurrencyPositivePattern;
            string text  = "\"" + numberFormatInfo.CurrencySymbol + "\"";
            string text2 = '\\' + numberFormatInfo.NegativeSign;
            int    num   = 3;

            if (currencyGroupSizes.Length > 0)
            {
                num = currencyGroupSizes[0];
            }
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("#");
            stringBuilder.Append(currencyGroupSeparator);
            for (int i = 0; i < num - 1; i++)
            {
                stringBuilder.Append("#");
            }
            stringBuilder.Append('0');
            if (0 < precision)
            {
                stringBuilder.Append(currencyDecimalSeparator);
            }
            for (int j = 0; j < precision; j++)
            {
                stringBuilder.Append('0');
            }
            StringBuilder stringBuilder2 = new StringBuilder(string.Format(CultureInfo.InvariantCulture, FormatHandler.GetPositiveCurrencyPattern(currencyPositivePattern), stringBuilder.ToString(), text));

            stringBuilder2.Append(";");
            stringBuilder2.Append(string.Format(CultureInfo.InvariantCulture, FormatHandler.GetNegativeCurrencyPattern(currencyNegativePattern), stringBuilder.ToString(), text, text2));
            return(stringBuilder2.ToString());
        }
Beispiel #5
0
        private static string GetNumberFormat(NumberFormatInfo numberFormatInfo, int precision)
        {
            string numberDecimalSeparator = NumberFormatInfo.InvariantInfo.NumberDecimalSeparator;
            string numberGroupSeparator   = NumberFormatInfo.InvariantInfo.NumberGroupSeparator;

            int[]  numberGroupSizes      = numberFormatInfo.NumberGroupSizes;
            int    numberNegativePattern = numberFormatInfo.NumberNegativePattern;
            string negativeSign          = numberFormatInfo.NegativeSign;
            int    num = 3;

            if (numberGroupSizes.Length > 0)
            {
                num = numberGroupSizes[0];
            }
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("#");
            stringBuilder.Append(numberGroupSeparator);
            for (int i = 0; i < num - 1; i++)
            {
                stringBuilder.Append("#");
            }
            stringBuilder.Append('0');
            if (precision > 0)
            {
                stringBuilder.Append(numberDecimalSeparator);
            }
            for (int j = 0; j < precision; j++)
            {
                stringBuilder.Append('0');
            }
            StringBuilder stringBuilder2 = new StringBuilder(stringBuilder.ToString());

            stringBuilder2.Append(";");
            stringBuilder2.Append(string.Format(CultureInfo.InvariantCulture, FormatHandler.GetNegativePattern(numberNegativePattern), stringBuilder.ToString(), numberFormatInfo.NegativeSign));
            return(stringBuilder2.ToString());
        }
Beispiel #6
0
        private static string GetFormatStringPrefix(RPLFormat.Calendars?calendar, int numeralVariant, string language, string numeralLanguage)
        {
            if (-1 != numeralVariant && calendar.HasValue && numeralLanguage != null && language != null)
            {
                string excelCalendarDigits = FormatHandler.GetExcelCalendarDigits(calendar.Value);
                string value        = string.Empty;
                int    languageLCID = FormatHandler.GetLanguageLCID(language);
                string value2       = string.Empty;
                if (numeralVariant != 2)
                {
                    if (numeralVariant.Equals("3"))
                    {
                        value2 = FormatHandler.GetExcelNumeralVariant(numeralLanguage);
                    }
                    else
                    {
                        switch (numeralVariant)
                        {
                        case 4:
                            value        = "[DBNUM1]";
                            languageLCID = FormatHandler.GetLanguageLCID(numeralLanguage);
                            value2       = string.Empty;
                            break;

                        case 5:
                            value        = "[DBNUM2]";
                            languageLCID = FormatHandler.GetLanguageLCID(numeralLanguage);
                            value2       = string.Empty;
                            break;

                        case 6:
                            value        = "[DBNUM3]";
                            languageLCID = FormatHandler.GetLanguageLCID(numeralLanguage);
                            value2       = string.Empty;
                            break;

                        case 7:
                            value        = "[DBNUM4]";
                            languageLCID = FormatHandler.GetLanguageLCID(numeralLanguage);
                            value2       = string.Empty;
                            break;
                        }
                    }
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append(value);
                    stringBuilder.Append("[$-");
                    stringBuilder.Append(value2);
                    stringBuilder.Append(excelCalendarDigits);
                    string text = System.Convert.ToString(languageLCID, 16);
                    if (text.Length < 4)
                    {
                        for (int num = 4 - text.Length; num > 0; num--)
                        {
                            text = "0" + text;
                        }
                    }
                    stringBuilder.Append(text);
                    stringBuilder.Append("]");
                    return(stringBuilder.ToString());
                }
                return(string.Empty);
            }
            return(string.Empty);
        }
Beispiel #7
0
        private static string GetNumberFormat(string format, string language, out bool isHex, TypeCode typeCode, object originalValue, ref bool isGeneral)
        {
            isHex = false;
            if (string.IsNullOrEmpty(format))
            {
                return("General");
            }
            CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture(language);

            cultureInfo = new CultureInfo(cultureInfo.Name, false);
            NumberFormatInfo numberFormat = cultureInfo.NumberFormat;

            if (format.Length > 3)
            {
                return(FormatHandler.GetExcelPictureNumberFormat(format));
            }
            if (format.Length == 1)
            {
                switch (format[0])
                {
                case 'x':
                    switch (typeCode)
                    {
                    case TypeCode.SByte:
                    case TypeCode.Byte:
                    case TypeCode.Int16:
                    case TypeCode.UInt16:
                    case TypeCode.Int32:
                    case TypeCode.UInt32:
                    case TypeCode.Int64:
                    case TypeCode.UInt64:
                        isHex = true;
                        return("LOWER(DEC2HEX({0}))");

                    default:
                        return(string.Empty);
                    }

                case 'X':
                    switch (typeCode)
                    {
                    case TypeCode.SByte:
                    case TypeCode.Byte:
                    case TypeCode.Int16:
                    case TypeCode.UInt16:
                    case TypeCode.Int32:
                    case TypeCode.UInt32:
                    case TypeCode.Int64:
                    case TypeCode.UInt64:
                        isHex = true;
                        return("DEC2HEX({0})");

                    default:
                        return(string.Empty);
                    }

                case 'C':
                case 'c':
                    return(FormatHandler.GetCurrencyFormat(numberFormat, numberFormat.CurrencyDecimalDigits));

                case 'N':
                case 'n':
                    return(FormatHandler.GetNumberFormat(numberFormat, numberFormat.NumberDecimalDigits));

                case 'G':
                case 'g':
                    return("General");

                default:
                    return(FormatHandler.GetShortNumberFormat(format[0]));
                }
            }
            bool flag = false;
            int  num  = default(int);

            if (int.TryParse(format.Substring(1), out num))
            {
                switch (format[0])
                {
                case 'x':
                    switch (typeCode)
                    {
                    case TypeCode.SByte:
                    case TypeCode.Byte:
                    case TypeCode.Int16:
                    case TypeCode.UInt16:
                    case TypeCode.Int32:
                    case TypeCode.UInt32:
                    case TypeCode.Int64:
                    case TypeCode.UInt64:
                        isHex = true;
                        return("LOWER(DEC2HEX({0}, " + num + "))");

                    default:
                        return(string.Empty);
                    }

                case 'X':
                    switch (typeCode)
                    {
                    case TypeCode.SByte:
                    case TypeCode.Byte:
                    case TypeCode.Int16:
                    case TypeCode.UInt16:
                    case TypeCode.Int32:
                    case TypeCode.UInt32:
                    case TypeCode.Int64:
                    case TypeCode.UInt64:
                        isHex = true;
                        return("DEC2HEX({0}, " + num + ")");

                    default:
                        return(string.Empty);
                    }

                case 'C':
                case 'c':
                    return(FormatHandler.GetCurrencyFormat(numberFormat, num));

                case 'N':
                case 'n':
                    return(FormatHandler.GetNumberFormat(numberFormat, num));

                case 'G':
                case 'g':
                {
                    if (originalValue == null)
                    {
                        return(string.Empty);
                    }
                    char generalFormat = FormatHandler.GetGeneralFormat(typeCode, originalValue, num, cultureInfo);
                    isGeneral = true;
                    return(FormatHandler.GetLongNumberFormat(generalFormat, num));
                }

                default:
                    return(FormatHandler.GetLongNumberFormat(format[0], num));
                }
            }
            return(FormatHandler.GetExcelPictureNumberFormat(format));
        }
Beispiel #8
0
        private static string GetExcelPictureNumberFormat(string format)
        {
            string        text          = format.ToUpperInvariant();
            StringBuilder stringBuilder = new StringBuilder();

            for (int i = 0; i < format.Length; i++)
            {
                switch (format[i])
                {
                case '"':
                case '\'':
                {
                    char c = format[i];
                    stringBuilder.Append('"');
                    i++;
                    bool flag = false;
                    while (i < format.Length)
                    {
                        if (format[i] != c)
                        {
                            stringBuilder.Append(format[i]);
                            i++;
                            continue;
                        }
                        flag = true;
                        break;
                    }
                    if (flag)
                    {
                        stringBuilder.Append('"');
                    }
                    break;
                }

                case 'E':
                case 'e':
                    stringBuilder.Append(format[i]);
                    if (i + 1 < format.Length && format[i + 1] == '0')
                    {
                        stringBuilder.Append('-');
                    }
                    break;

                case '\\':
                    if (i + 1 < format.Length && format[i + 1] == '\'')
                    {
                        stringBuilder.Append("\\'");
                        i++;
                    }
                    else if (i + 1 < format.Length && format[i + 1] == '"')
                    {
                        stringBuilder.Append("\\005c\"");
                        i++;
                    }
                    else
                    {
                        stringBuilder.Append('"');
                        stringBuilder.Append(format[i]);
                        stringBuilder.Append('"');
                    }
                    break;

                case '*':
                case '_':
                    stringBuilder.Append('"');
                    stringBuilder.Append(format[i]);
                    stringBuilder.Append('"');
                    break;

                default:
                    if (FormatHandler.NeedNumberEscape(text[i]))
                    {
                        stringBuilder.Append('"');
                        stringBuilder.Append(format[i]);
                        stringBuilder.Append('"');
                    }
                    else
                    {
                        stringBuilder.Append(format[i]);
                    }
                    break;
                }
            }
            return(stringBuilder.ToString());
        }