У нас есть приложение на основе Excel 2002 / XP, которое взаимодействует с SQL 2000/5 для обработки довольно сложных актуарных расчетов. Приложение выполняет свою функцию хорошо, но управлять им сложно.
Мы пытаемся создать приложение или службу «контроллер», которые могут управлять этими различными экземплярами Excel (запускать / останавливать / обрабатывать команды и т. д.) И контролировать их, но, к сожалению, это своего рода кошмар InterOp.
Есть ли у кого-нибудь хороший (т.е. рабочий) пример того, как сделать что-то подобное в VB.Net или C#?
Проповедуем хору! Усилия по преобразованию просто слишком велики, и руководство не будет оплачивать счета за «перекодирование» установленного приложения.





Возможно, вы захотите взглянуть на этот продукт: http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx
Это все управляемый код и прямые библиотеки .NET. Никакой головной боли от InterOp. Сам я им не пользовался, но слышал очень хорошие отзывы от людей из финансового мира.
Мы оценили этот продукт. К сожалению, он не может полностью удовлетворить наши потребности, и усилия по преобразованию будут огромными.
Не делай этого!
Мы неделями пытались заставить что-то подобное работать, но оно просто не работает так, как рекламируется. Даже не начинай - немедленно сдавайся!
Единственные варианты, которые у вас действительно есть, - это тяжелая серверная реализация на основе MOSS - службы Excel (Web) (они называют это примерно так). Взаимодействие COM Excel на базе Windows практически не работает и будет заменено MOSS.
Другой вариант - использовать SpreadsheetGear. Это на самом деле фантастический продукт
Все зависит от формул, которые вам нужны в вашей электронной таблице. Взгляните на список формул для Spreadsheet Gear, и если есть совпадение, сделайте это.
"Даже не думай об этом!" кажется обычным ответом. Я думаю, мы собираемся попробовать написать простую службу типа «запуск / остановка / уничтожение», но, похоже, консенсус состоит в том, что на самом деле взаимодействие с несколькими экземплярами - это опасный путь.
Мы написали службу, которая управляет одним экземпляром Excel 2003. Нам никогда не удавалось обеспечить точное закрытие экземпляров Excel, поэтому мы запускаем один экземпляр при первом обращении к службе и используем только его, сериализуя клиентские запросы.
Взаимодействие работает нормально, за исключением того, что вы всегда получаете ссылки на объекты Excel, которые не были выпущены, поэтому экземпляры Excel не закрываются. В следующей статье базы знаний объясняется, почему:
http://support.microsoft.com/default.aspx/kb/317109/EN-US/
Вы можете избежать проблемы, если очень тщательно написали код для ограниченного набора сценариев взаимодействия. Но в общем случае добиться надежной работы очень сложно.
Вам вообще нужен Excel? Почему бы не провести расчеты самостоятельно в своем .NET-приложении?