Как я могу заставить Python (используя win32com) создать новый экземпляр Excel? - PullRequest
10 голосов
/ 15 марта 2011

Я автоматизирую некоторые задачи, связанные с Excel, которые занимают много времени.

Я создаю экземпляр Excel, используя:

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Add()

однако, после запуска сценария, если я выбираю открытую книгу Excel (не с одним питоном, над которым работает), сценарий Python падает. Тем не менее, если я открою новую книгу Excel и введу в нее материал, сценарий python не изменится.

Есть ли какой-то особый способ, которым я могу вызвать Excel, чтобы предотвратить это? Или любое другое решение?

РЕДАКТИРОВАТЬ: Кажется, это работает.

excel = win32.DispatchEx('Excel.Application')

Ответы [ 2 ]

2 голосов
/ 19 апреля 2016

Вот способ создания нового экземпляра и с использованием статического кэша (который быстрее и дает возможность использовать kwargs):

from win32com.client import gencache
import pythoncom

clsid = "Word.Application"
clsid = pythoncom.CoCreateInstanceEx(clsid, None, pythoncom.CLSCTX_SERVER,
                                     None, (pythoncom.IID_IDispatch,))[0]
if gencache.is_readonly:
    #fix for "freezed" app: py2exe.org/index.cgi/UsingEnsureDispatch
    gencache.is_readonly = False
    gencache.Rebuild()
olApp = gencache.EnsureDispatch(clsid)
0 голосов
/ 03 января 2012

Почему бы тебе не сделать это так?

from win32com import client
excel=client.Dispatch("Excel.Application")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...