Нужна помощь с Excel
От: brash  
Дата: 23.01.08 08:54
Оценка:
Люди помогите, пытаюсь прочитать значения из EXCEL книги, если количество записей меньше 10000 то все работает нормально, но как только становится более 10000 сразу выдается ошибка
Выход за пределы диапазона. (Исключение из HRESULT: 0x8002000A (DISP_E_OVERFLOW))
в System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
в System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
в System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args)

вот код
object[,] values;
string start="1";
string end="10001";
Excel.Range rng = application.get_Range("1:" + start, "255:" + end);
values = (object[,])rng.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rng, null);
Re: Нужна помощь с Excel
От: denezuela Россия  
Дата: 23.01.08 09:55
Оценка:
Здравствуйте, brash, Вы писали:

B>Люди помогите, пытаюсь прочитать значения из EXCEL книги, если количество записей меньше 10000 то все работает нормально, но как только становится более 10000 сразу выдается ошибка

B>Выход за пределы диапазона. (Исключение из HRESULT: 0x8002000A (DISP_E_OVERFLOW))
B> в System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
B> в System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
B> в System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args)

B>вот код

B>object[,] values;
B>string start="1";
B>string end="10001";
B>Excel.Range rng = application.get_Range("1:" + start, "255:" + end);
B>values = (object[,])rng.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rng, null);

Наверняка проблема с самим Excel, я думаю очень большое количество ячеек (шутка ли 255 * 10000 > 2.5 млн ячеек), наверное, банально не хватает памяти, а зачем, если не секрет такое огромный range? может можно вашу проблему по-другому решить? Когда такие огромные матрицы, обычно что-то не так с логикой. На крайний случай, обрабатывайте ячейки пачками, максимально-допустимое количество ячеек вы уже определили , хотя на другом компьютере все может быть иначе .
Re[2]: Нужна помощь с Excel
От: brash  
Дата: 23.01.08 10:00
Оценка:
Здравствуйте, denezuela, Вы писали:

D>Наверняка проблема с самим Excel, я думаю очень большое количество ячеек (шутка ли 255 * 10000 > 2.5 млн ячеек), наверное, банально не хватает памяти, а зачем, если не секрет такое огромный range? может можно вашу проблему по-другому решить? Когда такие огромные матрицы, обычно что-то не так с логикой. На крайний случай, обрабатывайте ячейки пачками, максимально-допустимое количество ячеек вы уже определили , хотя на другом компьютере все может быть иначе .


Проблема в том что в excele файле данные могут храниться в обсалютно разных местах, и выявить какая именно последняя колонка непредставляется возможным.
Сейчас сделал что бы обрабатывать пачками максимум по 10000, но появилась новая проблема, если я пытаюсь достать данные из 2 пачи то ессть с 10001 по 20000 то опять выкидывает это исключение. Хотя rng.Rows выдает что колличество нормально.
Re[3]: Нужна помощь с Excel
От: Pavel_Agurov Россия  
Дата: 23.01.08 10:36
Оценка:
B>Проблема в том что в excele файле данные могут храниться в обсалютно разных местах, и выявить какая именно последняя колонка непредставляется возможным.

Чтобы узнать где есть данные есть свойство Sheet1.UsedRange. Оно вернет ровно тут кусок, где что-то есть.
Re[4]: Нужна помощь с Excel
От: brash  
Дата: 23.01.08 10:40
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:

B>>Проблема в том что в excele файле данные могут храниться в обсалютно разных местах, и выявить какая именно последняя колонка непредставляется возможным.


P_A>Чтобы узнать где есть данные есть свойство Sheet1.UsedRange. Оно вернет ровно тут кусок, где что-то есть.


Спасибо, но все равно ошибка осталась
Re[3]: Нужна помощь с Excel
От: denezuela Россия  
Дата: 23.01.08 10:48
Оценка:
Здравствуйте, brash, Вы писали:

B>Здравствуйте, denezuela, Вы писали:


D>>Наверняка проблема с самим Excel, я думаю очень большое количество ячеек (шутка ли 255 * 10000 > 2.5 млн ячеек), наверное, банально не хватает памяти, а зачем, если не секрет такое огромный range? может можно вашу проблему по-другому решить? Когда такие огромные матрицы, обычно что-то не так с логикой. На крайний случай, обрабатывайте ячейки пачками, максимально-допустимое количество ячеек вы уже определили , хотя на другом компьютере все может быть иначе .


B>Проблема в том что в excele файле данные могут храниться в обсалютно разных местах, и выявить какая именно последняя колонка непредставляется возможным.

B>Сейчас сделал что бы обрабатывать пачками максимум по 10000, но появилась новая проблема, если я пытаюсь достать данные из 2 пачи то ессть с 10001 по 20000 то опять выкидывает это исключение. Хотя rng.Rows выдает что колличество нормально.

Тем не менее не очень понятно, как вы собираетесь обрабатывать данные в С#, если не знаете где последняя колонка, какие ячейки значимые, а какие — нет. Наверное, можно в самом excel (с помощью его интерфейса) пробежаться по ячейкам и определить необходимый range и тянуть на клиента только то, что нужно. Или другой вариант, обрабатывать построчно (по 100 строк и т.д) в цикле. В любом случае, excel c такими огромными range , похоже, работать не умеет. Я думаю на VBA будут точно такие же проблемы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.