Есть ли у кого-нибудь хороший пример управления несколькими экземплярами Excel из приложения .Net?

StackOverflow https://stackoverflow.com/questions/87576

  •  01-07-2019
  •  | 
  •  

Вопрос

У нас есть приложение на базе Excel 2002/XP, которое взаимодействует с SQL 2000/5 для обработки довольно сложных актуарных расчетов.Приложение хорошо выполняет свою функцию, но им сложно управлять.

Мы пытаемся создать приложение или службу «контроллера», которое сможет управлять и контролировать эти различные экземпляры Excel (команды запуска/остановки/обработки и т. д.), но, к сожалению, это немного кошмар InterOp.

Есть ли у кого-нибудь хороший (т.работает) пример выполнения чего-то подобного в VB.Net или C#?

Это было полезно?

Решение

Не делай этого!

Мы неделями пытались заставить что-то подобное работать, но оно просто не ведёт себя так, как рекламируется.Даже не начинайте – сразу бросайте!

Единственные варианты, которые у вас действительно есть, - это тяжелая серверная реализация на основе MOSS - службы Excel (Web) (они называют это как-то так).Взаимодействие COM Excel с Windows на базе Windows практически мертво и будет заменено MOSS.

Другой вариант — использовать SpreadsheetGear.На самом деле это фантастический продукт

  1. Это легко быстро
  2. Движок отделен от пользовательского интерфейса, поэтому вы можете использовать его для работы с Excel на стороне сервера (без установки офиса).
  3. Довольно дешево
  4. Имеет API, аналогичный существующему COM-API Excel, поэтому перемещение кода относительно легко.

Все зависит от формул, которые вам нужны в вашей электронной таблице.Посмотрите на список формул для Spreadsheet Gear и, если есть совпадение, используйте его.

Другие советы

Взаимодействие работает нормально, за исключением того, что вы всегда получаете ссылки на объекты Excel, которые не выпущены, поэтому экземпляры Excel не закрываются.В следующей статье базы знаний объясняется, почему:

http://support.microsoft.com/default.aspx/kb/317109/EN-US/

Вы можете избежать этой проблемы, если очень тщательно написали код для ограниченного набора сценариев взаимодействия.Но в общем случае заставить его работать надежно очень сложно.

Возможно, вам захочется взглянуть на этот продукт: http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx

Это все управляемый код и прямые библиотеки .NET.Никаких головных болей InterOp.Сам я им не пользовался, но слышал очень хорошие отзывы от людей из финансового мира.

Мы написали службу, которая управляет одним экземпляром Excel 2003.Нам так и не удалось добиться корректного закрытия экземпляров Excel, поэтому мы запускаем один экземпляр при первом обращении к сервису и используем только его, сериализуя клиентские запросы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top