相关疑难解决方法(0)

列出COMobject中的所有方法

可能吗?

有些东西:

import win32com.client
ProgID = "someProgramID"
com_object = win32com.client.Dispatch(ProgID)

for methods in com_object:
    print methods
Run Code Online (Sandbox Code Playgroud)

我得到了com_object.__dict__,其中列出:

[_oleobj_, _lazydata_, _olerepr_, _unicode_to_string_, _enum_, _username_, _mapCachedItems_, _builtMethods_]
Run Code Online (Sandbox Code Playgroud)

大多数都是空的,除了:

  • _oleobj_ (PyIDispatch)
  • _lazydata_ (PyITypeInfo)
  • _olerepr_ (LazyDispatchItem实例)
  • _username_(<unknown>)

但我不知道如何访问这些类型的任何东西.

python methods win32com

11
推荐指数
2
解决办法
8820
查看次数

使用win32com从xls转换为xlsx时出错.如果我使用其他Excel工作表,该程序将抛出错误

import pandas as pd
import os
import win32com.client
import win32com.client.gencache
fname = "C:\\Users\\prashanth\\Desktop\\student.xls"
excel = win32com.client.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname+"x", FileFormat = 51)    
wb.Close()                               
excel.Application.Quit()
Run Code Online (Sandbox Code Playgroud)

回溯(最近一次调用最后一次):文件"c:\ users\prashanth\appdata\local\programs\python\python36-32\lib\site-packages\win32com\client\gencache.py",第536行,在EnsureDispatch中= disp.oleobj .GetTypeInfo()pywintypes.com_error:( - 2147418111,'呼叫被被叫方拒绝',无,无)

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用最后一次):文件"dailyreports2.py",第6行,在excel = win32com.client.gencache.EnsureDispatch('Excel.Application')文件"c:\ users\prashanth\appdata\local\programs \在SecureDispatch中,python\python36-32\lib\site-packages\win32com\client\gencache.py",第547行引发TypeError("此COM对象无法自动执行makepy进程 - 请为此对象手动运行makepy")TypeError :此COM对象无法自动执行makepy过程 - 请为此对象手动运行makepy

xlsx win32com python-3.x

7
推荐指数
1
解决办法
1845
查看次数

Python:使用Win32 COM Api打开Excel工作簿

我正在使用以下代码在Excel中打开并显示工作簿:

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open('my_sheet.xlsm')
ws = wb.Worksheets('blaaaa') 
excel.Visible = True
Run Code Online (Sandbox Code Playgroud)

当文件'my_sheet.xlsm'已经打开时,Excel会询问我是否要在不保存的情况下重新打开它.

我如何提前检查工作簿是否已经打开,如果是,请将其带到前面?

编辑:现在发现:

if excel.Workbooks.Count > 0:
    for i in range(1, excel.Workbooks.Count+1):
        if excel.Workbooks.Item(i).Name is 'my_sheet.xlsm':
            wb = excel.Workbooks.Item(i)
            break
Run Code Online (Sandbox Code Playgroud)

还有一个问题:我的工作表包含一些标题,我启用了一些过滤.因此,当设置过滤器时,以及当我从Python打开工作簿时,它有时会要求我输入一个唯一的名称来保存过滤器.这是为什么?这是对话:

在此输入图像描述

编辑好了这里它说(用德语)后一个问题是2007年和2010年文件中的已知错误:https://social.msdn.microsoft.com/Forums/de-DE/3dce9f06-2262-4e22-a8ff- 5c0d83166e73/excel-api-interne-namen,如果以编程方式打开Excel-Files,它似乎存在.不知道是否有解决方法.

python excel winapi com-interface

6
推荐指数
1
解决办法
2万
查看次数

win32com.client.Dispatch 有效,但 win32com.client.gencache.EnsureDispatch 无效

我正在学习 python 的 win32com ,我遇到了一个奇怪的问题。

我正在尝试导出字典列表中的 Outlook 联系人。我的代码与 win32com.client.Dispatch("Outlook.Application) 完美配合。但它使用 win32com.client.gencache.EnsureDispatch("Outlook.Application) 返回 0 个联系人,这应该更快、更“安全”。这是我的代码:

class MapiImport():
    def __init__(self):
        self.olApp = win32com.client.Dispatch("Outlook.Application")
        self.namespace = self.olApp.GetNamespace(u"MAPI")
        # olFolderContacts = 10 :
        self.mapiContacts = self.namespace.GetDefaultFolder(10).Items

    def getContacts(self, *fields):
        contacts = []
        # Class == 40 is ContactItem
        # Class == 69 is DistListItem
        # Exclude ditribution list and others objects != ContactItem
        for contact in filter(lambda x: x.Class == 40,self.mapiContacts) :
            if not fields :
                ctact = dict((x.Name,x.Value) for x in contact.ItemProperties)
            else …
Run Code Online (Sandbox Code Playgroud)

python outlook pywin32 dispatch win32com

5
推荐指数
1
解决办法
1万
查看次数