2012-05-10 2 views
1

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

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

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

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

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

+2

Вы пытались отключить расчет, а затем снова включить его в конце? Не забудьте сделать recalc все. Кроме того, попробуйте сделать это из VBA - если он все еще медленный, то .Net не виноват. – Ben

+0

Спасибо, что на самом деле сильно изменилось. Я знал об этой практике, но не думал, что расчет был настолько большим (для этих рабочих таблиц так или иначе). Просто предположил, что узким местом был .Net-Com interop. Не уверен, как дать ответ на комментарий, так что предположим, что я просто отправлю его сам. – Tekito

+1

Вы также можете попросить Бена отправить ответ, чтобы вы могли его принять :) – user850010

ответ

2

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

+0

Всегда рад помочь! – Ben

0

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

Смежные вопросы