Что самое раздражающее / странное, что случилось с вами при использовании Excel Interop - PullRequest
10 голосов
/ 04 февраля 2010

После того, как я некоторое время разрабатывал с помощью Excel Interop с .Net, меня все больше раздражало, как много «странностей» происходит - например, этот вопрос, который я опубликовал ранее - Моя проблема .
Я ценю, что это не прямой вопрос, а скорее совместный опыт, но я думаю, что было бы полезно, однако, выяснить самые большие неприятности / странные вещи людей и их преодоление.
Таким образом, я могу узнать, с какими проблемами я могу столкнуться в будущем :)

Спасибо

Ответы [ 7 ]

6 голосов
/ 04 февраля 2010

Самая досадная особенность взаимодействия Excel для меня заключается в том, что каждый раз, когда вы делаете что-нибудь , он создает COM-объекты за сценой, но все они должны быть удалены, иначе Excel не закроется при вызове Close () , И если вы пропустите один, часто трудно понять, где.

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

2 голосов
/ 05 февраля 2010

Странный MOST является необязательным параметром во всех методах Office.Для меня, как для программиста на c #, Missing.Value - это, конечно, курс.

например, метод SaveAs принимает 12 аргументов, и требуется только один из них, и в итоге вы получили такой код

result.SaveAs('file',Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value)

Также подписьзависит от версии взаимодействия с офисом, каждая основная версия Excel добавляет некоторые параметры к подписи и полностью уничтожает ваш код.

ref и исключает также непригодные конструкции.
Одна рекомендация - использовать VB.NET для взаимодействия с офисом - этоподходящий инструмент для такой вещи, или жди c # 4.0

2 голосов
/ 04 февраля 2010

Исчерпание памяти из-за множества открытых экземпляров приложений Office.

Тщательное программирование может решить эту проблему, но внутренние ошибки в приложениях могут разрушить ваши предположения.

2 голосов
/ 04 февраля 2010

Вы получите другой Interop, скомпилированный на машине с другой версией MS Office.

В основном это означает, что для разработки дополнительной версии требуется дополнительная машина (физическая или виртуальная) и дополнительные лицензии Visual Studio, Windows и MS Office.

При развертывании версии на клиенте мне пришлось архивировать образ виртуальной машины, чтобы скомпилировать эту версию, поскольку я не мог гарантировать, что буду использовать ту же версию MS Office на моей машине для разработки.

0 голосов
/ 28 мая 2015

1 - тот факт, что для записи на лист из другого потока необходимо реализовать IMessageFilter , и даже при этом вам все равно придется ударить его молотком

2 - Как уже упоминал Марк Байерс, "правило одной точки" ... вздох ...

3 - И, конечно же, ни в одном месте нет ЛЮБОГОэто помечено, поэтому вместо этого мы должны тралить самые темные уголки сети в надежде натолкнуться на какое-то обоснование ...

(Эндрю Уайтчепел любезно написал много чрезвычайно полезныхстатьи - спасибо, Эндрю, просто жаль, что тебе пришлось ...)

0 голосов
/ 04 февраля 2010

Отсутствие поддержки автоматизации ...

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

Для получения дополнительной информации см. здесь . Я недавно провел исследование некоторых альтернатив, которые вы можете найти здесь: Чтение файлов Excel как процесс сервера

Это привело к бесчисленным проблемам для меня и других, и я прочитал много постов в Stackoverflow о проблемах, связанных с использованием Excel на сервере. Просто не стоит тратить время на этот путь, тем более что Vista и выше просто не работают с Office 2k7 через автоматизацию.

0 голосов
/ 04 февраля 2010

Самое неприятное для меня то, что вы получаете, казалось бы, случайные ошибки / исключения / сбои.

Например, мне иногда нужно конвертировать большой набор из тысяч рабочих книг в форматы (xls / xlsx) из консольного приложения C #. Excel редко обрабатывает все эти книги за один проход без ошибок. Многократный запуск вызывает проблемы на разных файлах. Таким образом, если в моем наборе файлов есть файлы a.xls и b.xls, Excel может завершиться ошибкой при работе с a.xls на первом проходе и b.xls на втором проходе.

У машины гораздо больше памяти / дискового пространства, чем требуется приложению. Приложение является однопоточным, поэтому нет проблем с несколькими экземплярами Excel, создающими хаос.

Я наблюдал такое поведение в Excel 2003 и Excel 2007.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...