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

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

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

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

Вам вообще нужен Excel? Почему бы не провести расчеты самостоятельно в своем .NET-приложении?

matt b 18.09.2008 01:03

Проповедуем хору! Усилия по преобразованию просто слишком велики, и руководство не будет оплачивать счета за «перекодирование» установленного приложения.

Sean Gough 18.09.2008 17:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
2 515
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

Мы оценили этот продукт. К сожалению, он не может полностью удовлетворить наши потребности, и усилия по преобразованию будут огромными.

Sean Gough 18.09.2008 17:35
Ответ принят как подходящий

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

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

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

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

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

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

"Даже не думай об этом!" кажется обычным ответом. Я думаю, мы собираемся попробовать написать простую службу типа «запуск / остановка / уничтожение», но, похоже, консенсус состоит в том, что на самом деле взаимодействие с несколькими экземплярами - это опасный путь.

Sean Gough 18.09.2008 17:34

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

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

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

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

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