我目前正在使用python 2.7并尝试打开Excel工作表.使用以下代码时:
import os
from win32com.client import Dispatch
xlApp = win32com.client.Dispatch("Excel.Application")
xlApp.Visible = True
# Open the file we want in Excel
workbook = xlApp.Workbooks.Open('example.xls')
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
import os
from win32com.client import Dispatch
xlApp = win32com.client.Dispatch("Excel.Application")
xlApp.Visible = True
# Open the file we want in Excel
workbook = xlApp.Workbooks.Open('example.xls')
Run Code Online (Sandbox Code Playgroud)
因为我使用的是64位Windows机器,是否有可能出现错误?请帮我解决一下这个.
我的任务是将大量的.doc文件转换为.pdf.我的主管要我这样做的唯一方法是通过MSWord 2010.我知道我应该能够通过python COM自动化实现自动化.唯一的问题是我不知道如何以及从哪里开始.我试着寻找一些教程,但却找不到(可能是我可能有,但我不知道我在找什么).
现在我正在阅读这个.不知道这会有多大用处.
这是我的代码,我找到了许多VBA,.NET框架的答案,并且非常奇怪.执行此操作时,Excel将关闭.
from win32com.client import DispatchEx
excel = DispatchEx('Excel.Application')
wbs = excel.Workbooks
wbs.Close()
excel.Quit()
wbs = None
excel = None # <-- Excel Closes here
Run Code Online (Sandbox Code Playgroud)
但是,当我执行以下操作时,它不会关闭.
excel = DispatchEx('Excel.Application')
wbs = excel.Workbooks
wb = wbs.Open('D:\\Xaguar\\A1.xlsm')
wb.Close(False)
wbs.Close()
excel.Quit()
wb = None
wbs = None
excel = None # <-- NOT Closing !!!
Run Code Online (Sandbox Code Playgroud)
我在Stack Overflow问题中找到了一些可能的答案.传统方法不起作用.问题是不是Python,我找不到Marshal.ReleaseComObject和GC.我查看了所有演示...site-packages/win32com和其他演示.
如果我能获得PID并杀死它,即使它也不会打扰我.
我在Kill进程中找到了一个基于窗口名称(win32)的解决方法.
可能不是正确的方法,但是工作环境是:
def close_excel_by_force(excel):
import win32process
import win32gui
import win32api
import win32con …Run Code Online (Sandbox Code Playgroud) #-*- coding:utf-8 -*-
import win32com.client, pythoncom
import time
ie = win32com.client.DispatchEx('InternetExplorer.Application.1')
ie.Visible = 1
ie.Navigate('http://ieeexplore.ieee.org/xpl/periodicals.jsp')
time.sleep( 5 )
ie.Document.getElementById("browse_keyword").value ="Computer"
ie.Document.getElementsByTagName("input")[24].click()
Run Code Online (Sandbox Code Playgroud)
import win32com.client, pythoncom
import time
ie = win32com.client.DispatchEx('InternetExplorer.Application')
ie.Visible = 1
ie.Navigate('www.baidu.com')
time.sleep(5)
print 'browse_keword'
ie.Document.getElementById("kw").value ="Computer"
ie.Document.getElementById("su").click()
print 'Done!'
Run Code Online (Sandbox Code Playgroud)
当运行第一部分代码时,它将弹出:
ie.Document.getElementById("browse_keyword").value ="Computer"
TypeError: getElementById() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)
并且第二部分代码运行正常.使结果不同有什么区别?
Outlook有一些需要的东西 - 比如显示多个月的视图
所以我决定尝试通过python拉出事件数据(然后找到一种方法来很好地显示它).谷歌正在给我毛孔结果,但stackoverflow以前在使用win32com和outlook方面非常有帮助.
我的目标如下
我没有走远,但这就是我聚在一起的(来自这个网站的灵感)
import win32com.client, datetime
from dateutil.relativedelta import relativedelta
Outlook = win32com.client.Dispatch("Outlook.Application")
ns = Outlook.GetNamespace("MAPI")
appointments = namespace.GetDefaultFolder(9).Items
# TODO: Need to figure out howto get the shared calendar instead Default [9]
# (I have placed the shared folder into a separate folder - don't know if it matters)
# I would just like the user to select which calendar to execute on
appointments.Sort("[Start]")
appointments.IncludeRecurrences = "True"
begin = date.today().strftime("%m%d%Y")
end = …Run Code Online (Sandbox Code Playgroud) 每个人!
我一直在 Python 中使用 win32com.client 模块来访问包含 VBA 宏的 Excel 文件的单元格。
代码中的一条语句 xl = win32com.client.gencache.EnsureDispatch("Excel.Application") 一直在抛出错误:
AttributeError: module 'win32com.gen_py.00020813-0000-0000-C000-000000000046x0x1x6' has no attribute 'MinorVersion'
是否有人遇到过类似的情况,如果是,对此有什么可能的补救措施?(我已经在 GitHub 上查看了 win32com 的源代码,但无法从中获得多大意义。)
我正在使用CherryPy开发一个需要通过COM访问一些应用程序的Web应用程序.
现在我用每个请求创建一个新的应用程序实例,这意味着每个请求等待3秒钟启动应用程序,0.01等待实际作业.
我想启动每个COM应用程序一次并使其保持活动状态并在以下请求中重复使用它几秒钟,因为大多数时候它被5-10个ajax请求的突发使用,然后几个小时都没有.
是否可以在CherryPy应用程序的所有线程之间共享COM abject?
以下是一些实验的摘要,这些实验显示了它现在如何处理每个请求以及它如何在线程之间不起作用.
以下代码成功启动和停止Excel:
>>> import pythoncom, win32com.client
>>> def start():
global xl
xl = win32com.client.Dispatch('Excel.Application')
>>> def stop():
global xl
xl.quit()
xl = None
>>> start()
>>> stop()
Run Code Online (Sandbox Code Playgroud)
但是下面的代码启动Excel并在3秒后关闭它.
>>> import pythoncom, win32com.client, threading, time
>>> def start():
global xl
pythoncom.CoInitialize()
xl = win32com.client.Dispatch('Excel.Application')
time.sleep(3)
>>> threading.Thread(target=start).start()
Run Code Online (Sandbox Code Playgroud)
我添加了调用,CoInitialize()否则xl对象将无法工作(请参阅此文章).
我添加了3秒的暂停,所以我可以在任务管理器上看到EXCEL.EXE进程启动并且活着3秒钟.
为什么它在启动它的线程结束后死亡?
我检查了文档CoInitialize(),但我无法理解是否有可能让它在多线程环境中工作.
我已经看到了很多在python中在WinXP +上检索已安装程序的方法.什么是正确的和最强大的这样的方式?
目前我正在访问HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall并从那里读取每个键以获取列表.(我被告知这不是正确的做事方式)我已经看过使用WMI/Win32com这样做的例子,但是看到了一些注释以及那些可能在某些机器上关闭WMI的实现.这不是一个非常可靠的解决方案.
有没有一种方法可以正确,可靠地获得已安装程序的列表?我见过的所有WMI示例都没有在这台机器上运行(因此我不愿意使用它,我只运行WinFLP;这是一个剥离的XP版本.)
我似乎也发现了我的搜索已经发现的TechNet文章,该文章提供给我的问题上的类似答案:http://gallery.technet.microsoft.com/ScriptCenter/en-us/154dcae0-57a1-4c6e- 8f9f-b215904485b7 请注意,在平台下列出的Vista/7非常明确地说"不"......将无效.所以WMI的交易看起来像是不行......
能够检索已安装的路径也是一个好处,因为现在我的当前代码不会考虑在另一个驱动器或非默认目录中安装的人.
我已经使用pywin32在python中编写了一个脚本,将pdf文件保存到文本中,直到最近才能正常工作.我在Excel中使用类似的方法.代码如下:
def __pdf2Txt(self, pdf, fileformat="com.adobe.acrobat.accesstext"):
outputLoc = os.path.dirname(pdf)
outputLoc = os.path.join(outputLoc, os.path.splitext(os.path.basename(pdf))[0] + '.txt')
try:
win32com.client.gencache.EnsureModule('{E64169B3-3592-47d2-816E-602C5C13F328}', 0, 1, 1)
adobe = win32com.client.DispatchEx('AcroExch.App')
pdDoc = win32com.client.DispatchEx('AcroExch.PDDoc')
pdDoc.Open(pdf)
jObject = pdDoc.GetJSObject()
jObject.SaveAs(outputLoc, "com.adobe.acrobat.accesstext")
except:
traceback.print_exc()
return False
finally:
del jObject
pdDoc.Close()
del pdDoc
adobe.Exit()
del adobe
Run Code Online (Sandbox Code Playgroud)
但是这段代码突然停止工作,我得到以下输出:
Traceback (most recent call last):
File "C:\Documents and Settings\ablishen\workspace\HooverKeyCreator\src\HooverKeyCreator.py", line 38, in __pdf2Txt
jObject.SaveAs(outputLoc, "com.adobe.acrobat.accesstext")
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 505, in __getattr__
ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
com_error: (-2147467263, 'Not implemented', None, None)
False
Run Code Online (Sandbox Code Playgroud)
我有类似的用VB编写的代码可以正常工作,所以我猜它与COM接口没有正确绑定到适当的函数有关吗?(我的COM知识不完整).
可能吗?
有些东西:
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 ×10
win32com ×10
com ×3
excel ×3
pywin32 ×2
acrobat ×1
automation ×1
methods ×1
ms-word ×1
outlook-2010 ×1
pdf ×1
python-2.7 ×1
python-3.x ×1
registry ×1
windows ×1
wmi ×1