Есть ли лучший способ (кроме COM) для удаленного управления Excel? - PullRequest
1 голос
/ 09 февраля 2009

Я работаю над инструментом регрессионного тестирования, который будет проверять очень большое количество таблиц Excel. На данный момент я управляю ими через COM из скрипта Python, используя последнюю версию продукта pywin32. К сожалению, COM имеет ряд неприятных недостатков:

Например, малейшее расстройство, похоже, может разорвать соединение с COM-сервером, после разрыва, похоже, нет безопасного способа повторно подключиться к приложению Excel. В объекте COM-приложения нет абсолютно никакой безопасности.

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

Также, когда что-то идет не так, я редко получаю какие-либо полезные сообщения об ошибках ... в лучшем случае я могу, кроме числового кода ошибки или едва полезного сообщения, такого как "Возникло исключение". Почти невозможно понять, почему что-то пошло не так.

Наконец, COM не имеет возможности контролировать некоторые из самых фундаментальных аспектов Excel? Например, нет способа сделать гарантированное закрытие только процесса Excel, к которому подключен COM-клиент. Вы даже не можете использовать COM, чтобы найти PID в Excel.

Так что, если бы я полностью отказался от COM? Есть ли альтернативный способ управления Excel?

Все, что я хочу сделать, это запускать макросы, открывать и закрывать книги, читать и записывать диапазоны ячеек? Возможно, некоторые эксперты .NET знают хитрость или два, которые еще не проникли в сообщество Python? Как насчет офисных хакеров? Может ли быть лучший способ добраться до внутренних помещений Excel, чем COM?

Ответы [ 5 ]

7 голосов
/ 09 февраля 2009

Нет способа полностью обойти COM. Вы можете использовать VSTO (Visual Studio Tools for Office), у которого есть красивые .NET-оболочки для объектов COM, но он все еще находится под COM.

2 голосов
/ 13 февраля 2009

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

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

Чтобы ответить на другие ваши вопросы

Если вы проверяете документацию по python, должен быть способ подключения к существующему серверу, если соединение потеряно.

Отсутствие полезных сообщений об ошибках снова может быть связано с Python.

Вы даже не можете использовать COM для поиска PID в Excel.

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

1 голос
/ 09 февраля 2009

Вы можете использовать Jython с JExcelApi (http://jexcelapi.sourceforge.net/)) для управления вашим приложением Excel. Я рассматривал возможность реализации этого решения с одним из моих проектов PyQt, но пока не пытался его попробовать. До этого эффективно использовали JExcelApi в приложениях Java, но не использовали Jython (хотя я знаю, что вы можете импортировать классы Java).

ПРИМЕЧАНИЕ: JExcelApi может быть COM под капотом (я не уверен).

1 голос
/ 09 февраля 2009

Вы смотрели пакеты xlrd и xlwt ? Я больше не нуждаюсь в них, но у меня был хороший успех с xlrd в моем последнем проекте. Последнее, что я знал, они не могли обрабатывать макросы, но могли выполнять базовое чтение и написание электронных таблиц. Кроме того, они не зависят от платформы (я написал программу, предназначенную для работы в Linux)!

1 голос
/ 09 февраля 2009

Также возможно запустить Excel как серверное приложение и использовать его в качестве механизма расчета. Это позволяет не ИТ-пользователям указывать бизнес-правила в Excel и вызывать их через веб-сервисы. Я не работал с этим сам, но я знаю, мой коллега использовал это однажды. Пошаговое руководство. Разработка пользовательского приложения с использованием веб-служб Excel может быть хорошей отправной точкой. Первый взгляд на эту страницу выглядит так, как будто она требует Sharepoint. Это может не подходить для любой среды.

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