Проблема с помощью Python comtypes библиотека для добавления querytable к Excel

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

5
задан mavnn 26 March 2009 в 16:17
поделиться

2 ответа

Я упростил Ваш код, и это должно хорошо работать (я объясню изменения ниже):

def create_querytable2():
    constring = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\to\db.mdb;"
    SQL = "Select * from tblName;"
    excel = client.CreateObject("Excel.Application", dynamic=True)
    excel.Visible = True
    ws = excel.Workbooks.Add().Worksheets(1)
    ws.QueryTables.Add(constring, ws.Range["A1"], SQL).Refresh()

QueryTables. Добавьте (), функция может создать объекты Соединения и Recordset для Вас, так, чтобы упростил много вещей... просто необходимо добавить, какое соединение это находится в строке conneciton (часть "OLEDB").

Letting Excel делает большую часть работы, кажется, решает Вашу проблему :)

2
ответ дан 15 December 2019 в 06:35
поделиться

Похоже, что Ваша ошибка находится на этой строке:

qt = ws.QueryTables.Add(rs, ws.Range["A1"])

Я думаю, что Ваша проблема состоит в том, что Вы используете синтаксис Python для поиска значения в Наборе VBA. Попытайтесь изменить свои квадратные скобки на круглые скобки.

т.е.

qt = ws.QueryTables.Add(rs, ws.Range("A1"))

Причем причина - это в VBA при вызове Collection как это, Range("A1"), Вы на самом деле звоните, это - метод по умолчанию, Range.Item("A1"). В основном Наборы VBA не переводят в словари Python.

Я получаю это от этого потока форума и моего опыта с VBA.


Редактирование, должное прокомментировать:

К сожалению, я попробовал обоих: как отмечено в Вашей ссылке, они иногда не делают, то же самое, но мое инстинктивное чувство здесь - то, что' [' более вероятно, будет тем, что я хочу. – mavnn

Вы знаете если comtypes.client.CreateObject работает то же как win32com.client.Dispatch? Вы могли бы попытаться создать свой объект com с win32com пакетом и видеть, имеет ли это значение.

1
ответ дан 15 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: