Нужен более быстрый метод взаимодействия с Excel

Кажется, всем известно, что взаимодействие с Excel и .Net происходит очень медленно. Мне известно о возможности скопировать массив значений в объект рабочего листа за один раз, но, согласно моему секундомеру, даже одна команда (внутри VB.Net) типа:

 WS.Range(--range string here--).Value = array

... занимает более 0,3 с! Это складывается, поскольку моя процедура записывает десятки массивов на каждый рабочий лист, а на каждую книгу приходится несколько рабочих листов, и я, вероятно, также буду перебирать несколько книг.

Если бы существовал способ записывать сразу прерывистые непрямоугольные группы ячеек, то я мог бы сделать всю WS с помощью одной команды записи. Но я не думаю, что есть способ сделать это при сохранении исходных значений для «промежуточных» ячеек. Эти книги предварительно отформатированы, поэтому я должен оставить определенные ячейки как есть.

Что я могу сделать, чтобы это ускорить?


person Tekito    schedule 10.05.2012    source источник
comment
Вы пробовали отключить расчет, а затем снова включить его в конце? Не забудьте пересчитать все. Кроме того, попробуйте сделать это из VBA - если он все еще медленный, тогда .Net не виноват.   -  person Ben    schedule 10.05.2012
comment
Спасибо, это действительно имело большое значение. Я знал об этой практике, но не думал, что расчет был таким большим хитом (во всяком случае, для этих листов). Просто предположил, что узким местом было взаимодействие .Net-Com. Не знаю, как дать ответ на комментарий, так что думаю, я просто отправлю его сам.   -  person Tekito    schedule 10.05.2012
comment
Вы также можете попросить Бена опубликовать ответ, чтобы вы могли его принять :)   -  person user850010    schedule 11.05.2012


Ответы (2)


Вышеупомянутый комментарий Бена в значительной степени подошел к этому вопросу; расчеты по формулам в Excel были узким местом. Я рад, потому что знал, что взаимодействие .Net-Excel имеет репутацию медленного, но не думал, что оно настолько.

person Tekito    schedule 11.05.2012

Я не знаю точно, возможно ли это, но вы заглянули в библиотеку, которая делает то же самое: NPOI. Он может читать и писать из / в документы Excel. Благодаря этому мое приложение стало намного быстрее (получение данных из xls в приложение C #)

person RvdK    schedule 11.05.2012