可能吗?
有些东西:
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>)但我不知道如何访问这些类型的任何东西.
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
我正在使用以下代码在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 的 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)