Подтвердить что ты не робот

Excel 2010 Тип Conflict NumberFormat

У меня есть небольшая программа, которая создает файлы Excel из таблицы базы данных, а Excel 2013 работает отлично, но теперь мне нужно это для Excel 2010, и теперь я получаю следующее исключение, когда я добавлю "Формат" к NumberFormatLocal (range.NumberFormatLocal = format;) Такое же исключение произойдет, когда я использую range.NumberFormat = format;

Исключение:

Сообщение об ошибке: System.Runtime.InteropServices.COMException(0x80020005): Введите Conflict. (Исключение HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))     В System.RuntimeType.ForwardCallToInvokeMember(String memberName, флаги BindingFlags, ObjectTarget, Int32 [] aWrapperTypes, MessageData и msgData)

функция:

if (chkWithValues.Checked && results.Item3.Any())
            {
                var rows = results.Item3.Count;
                var cols = results.Item3.Max(x => x.Count);
                object[,] values = new object[rows, cols];
                object[,] format = new object[rows, cols];

                //All returned items are inserted into the Excel file
                //Item2 contains the database types, Item3 the Values
                // pgMain shows the progress for the selected tables
                for (int j = 0; j < results.Item3.Count(); j++)
                {
                    int tmpNbr = 1;
                    SetMessage($"{selectedTableItem.TableName} {j} von {results.Item3.Count}", LogHelper.NotificationType.Information);
                    foreach (string value in results.Item3[j])
                    {
                        values[j, tmpNbr - 1] = Converter.Convert(results.Item2[tmpNbr - 1], value).ToString().Replace("'", "");
                        format[j, tmpNbr - 1] = ExcelColumnTypes.ConvertToExcelTypes(results.Item2[tmpNbr - 1]);
                        tmpNbr++;
                    }
                    pgMain.Maximum = results.Item3.Count();
                    pgMain.PerformStep();
                }
                Excel.Range range = xlWorksheet.Range["A3", GetExcelColumnName(cols) + (rows + 2)];
                SetMessage($"{results.Item3.Count * results.Item1.Count} Zellen werden formatiert....", LogHelper.NotificationType.Information);

                range.NumberFormatLocal = format;
                range.Value = values;
            }

Мои типы Excel:

public const string INT = "0";

    public const string TEXT = "@";
    public const string GENERAL = "General";
    public const string STANDARD = "Standard";

    public const string Date1 = "m/d/yyyy";
    public const string DATE2 = "TT.MM.JJJJ";
    public const string DATE3 = "T.M.JJ h:mm;@";
    public const string DATETIME = "d/m/yy h:mm;@";

    public const string DOUBLECO1 = "#.##0,00";
    public const string DOUBLECO2 = "0,00";

    public const string DOUBLEPO1 = "#0,##0.00";
    public const string DOUBLEPO2 = "0.00";

    public const string CUSTOM = "#,##000";

    public const string CURRENCYEU1 = "#,##0,00 _€";
    public const string CURRENCYEU2 = "#,##0 _€";
    public const string CURRENCYEU3 = "#,##0,00 €";

    public const string CURRENCYDO1 = "#,##0.00 _$";
    public const string CURRENCYDO2 = "#,##0 _$";
    public const string CURRENCYDO3 = "#,##0.00 $";

    public const string PERCENTAGE1 = "0.00%";
    public const string PERCENTAGE2 = "0.0%";
    public const string PERCENTAGE3 = "0%";

Update:

Я попытался использовать уже public const string TEXT = "@"; как только формат, но та же ошибка приходит

Обновление 2:

Ошибка возникает только в том случае, если таблица имеет много записей. Когда я использую, например, таблицу с 1000 входами, это не проблема, и все работает нормально, если я использую таблицу с 200 000 записей, возникает ошибка

Обновление 3:

[NumberFormat and the value for one cell[1]

Я пытался использовать только стандартный формат для тестирования, возникает следующая ошибка:

Сообщение об ошибке: System.OutOfMemoryException: недостаточно памяти для продолжения программы.

введите описание изображения здесь

4b9b3361

Ответ 1

Может быть, вы передаете что-то в Excel, который интерпретируется как целое число, которое слишком велико для целочисленного типа данных в Excel 2010? Может быть, номер строки, например? Протестируйте его, загрузив 32 760 строк, а 32 770, поскольку целые числа достигают 32 767 в XL 2010. Стоит попробовать: o)

Ответ 2

Это зависит от используемого формата файла:

В Excel 2010 максимальный размер листа составляет 1048576 строк по столбцам 16384 при использовании XLSX.

Однако вы не можете сгенерировать это в более раннем формате XLS, поскольку он по-прежнему ограничен 65 536 строками.