Как регулярно отправлять данные Excel в веб-службу?

У меня есть требование пользователя, с которым я некоторое время безуспешно боролся. Мне нужно написать надстройку, которая может считывать около 100 ячеек на основе формул (конкретной электронной таблицы) каждые пару минут и отправлять их в веб-службу.

Я более чем счастлив использовать Excel-DNA или VSTO, но все, что я пробовал до сих пор, приводит к тому, что пользовательский интерфейс на мгновение зависает. Будет ли это всегда иметь место, если данные считываются из активной электронной таблицы (даже из другого потока)?


person James Savin    schedule 19.04.2015    source источник


Ответы (2)


Чтение листа из другого потока, вероятно, будет иметь худший эффект, чем чтение из основного потока Excel (скажем, в событии или что-то в этом роде). Это связано с переключателем потоков COM, который требуется для вызовов между потоками. В конце концов, все COM-вызовы все равно должны выполнять свою работу в основном потоке.

Вы можете добиться большего успеха, перехватив некоторые события Excel в качестве запуска события Workbook.SheetChange, а затем проверив, влияют ли изменения на ваши наблюдаемые диапазоны, и обновив внутреннюю структуру данных новыми данными.

Затем вы можете периодически обновлять серверную часть (или только при изменении наблюдаемых ячеек) из фонового потока.

person Govert    schedule 19.04.2015
comment
Говерт, данные можно читать в основном потоке, а другие вещи (не связанные с объектной моделью Excel) можно запускать во вторичном потоке. Никто не говорил о прикосновении к Excel из вторичного потока. Это только ваше воображение. - person Eugene Astafiev; 20.04.2015
comment
@Евгений, согласен с тобой. Мой ответ был на исходный вопрос, а не в комментарии к вашему ответу. В последней части вопроса Джеймс спросил: всегда ли так будет, если данные считываются из активной электронной таблицы (даже из другого потока)? - person Govert; 20.04.2015
comment
Спасибо вам обоим за ответ, мое тестирование показало, что основной лист был затронут, но я не был уверен, что неправильно внедрил решение ДНК. Я продолжу с событием SheetChange и посмотрю, есть ли у меня больше радости. Удивлен, как мало информации об использовании Excel в качестве механизма ввода данных, учитывая его широкое использование в секторе финансовых рынков. - person James Savin; 20.04.2015

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

person Eugene Astafiev    schedule 19.04.2015