标签: win32com

在python中使用多个excel工作簿

使用 win32com,我打开了两个工作簿。

  1. 你怎么知道哪个是活跃的?
  2. 你如何改变哪个是活跃的?
  3. 你怎么能关闭一个而不是另一个?(不是 Application.Quit())

python com excel win32com

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

Python win32com 可以在不弹出 GUI 的情况下使用 Visio(或任何程序)吗?

我有一个使用 win32com 的 Python 脚本来打开 Visio 文件并将每个选项卡转储为.png文件。执行此操作时,它会在屏幕上短暂地闪烁 Visio gui。有没有办法在不加载 Visio 窗口的情况下在后台执行此操作?

import win32com.client
visio = win32com.client.Dispatch("Visio.Application")
visio.Documents.Open(filepath)
...
visio.Quit()
Run Code Online (Sandbox Code Playgroud)

python com visio win32com

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

Psexec 和 UAC 问题

我正在使用 psexec 在 Windows 7 的远程机器上运行 exe。我需要 exe 以管理员权限运行,因为它需要更新远程系统中 HKLM 下的一些注册表。

在运行 psexec 时,我提供了远程系统上管理员帐户的凭据。当远程系统上的 UAC 关闭时,一切正常。

但是当 UAC 开启时,远程 exe 无法启动。

在已配置 exe 以使用“RequireAdministrator”的清单设置中。我期望的是在远程计算机上启动 exe 时看到 UAC 提示提升警告。虽然如果有某种方法可以绕过提示会很棒。

但不幸的是,exe 无法自行启动。有任何想法吗?

windows winapi psexec win32com

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

如何在 Python 中的单独线程中启动 win32 应用程序

所以,我有以下代码片段,它试图通过 win32api 启动 Microsoft Powerpoint:

import threading
import win32com.client
import sys

class myDemo(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        try:
            myObject = win32com.client.Dispatch("Powerpoint.Application")
            print "OK"
        except:
            print "Failed to start Powerpoint!"
            sys.exit(1)            
        print "Now attempting to shutdown..."
        try:
            myObject.quit()
        except:
            print "Error"


if __name__ == "__main__":
    test = myDemo()
    test.start()
Run Code Online (Sandbox Code Playgroud)

问题是它失败了,我不知道为什么。但是,如果我将最后一行更改为test.run()它将成功启动。那么,为什么这会失败test.start()

为什么会发生这种情况,考虑到我需要 Powerpoint 在单独的线程上异步运行,我应该如何解决它?

提前致谢。

编辑:显然我的问题与此有关:http : //python.6.x6.nabble.com/Dispatch-error-CoInitialize-has-not-been- called-td1951088.html

然而,除了提出的正确解决方案之外,似乎没有人回答为什么 COM 会以这种方式行事。

python winapi pywin32 win32com python-multithreading

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

如何使用 Python 从 Windows 操作系统中的窗口标题中获取 PID?

我需要从我知道标题的窗口提供 PID。

这是一个安装程序,当在我的代码中以编程方式按下第一个“下一步”按钮时,它似乎会更改重要凭据。

我认为这样做是因为窗口逐渐消失然后再次消失,但是当我单击后退按钮并再次单击下一步时,它不会再次执行此操作。

第一个“下一步”按钮,我第一次点击它时,上面有一个盾牌,所以我认为它可能与 UAC 有关。

我正在使用以下代码向窗口发送 ENTER 键盘按键:

import win32com.client


shell = win32com.client.Dispatch("WScript.Shell")


def setwindowfocus(windowname):  # can be the window title or the windows PID

    shell.AppActivate(windowname)


def sendkeypresstowindow(windowname, key):

    setwindowfocus(windowname)
    shell.SendKeys(key)
    time.sleep(0.1)


sendkeypresstowindow(u'Some Known Window Title', '{ENTER}')
time.sleep(5)  # Wait for next window
sendkeypresstowindow(u'Some Known Window Title', '{ENTER}')
time.sleep(5)  # Wait for next window
Run Code Online (Sandbox Code Playgroud)

shell.AppActivate()可采取的pid也所以我想知道我怎么会得到,如果我拥有的唯一信息是窗口标题。

我尝试使用 pywinauto 并遇到了同样的问题,除了许多不应该在 pywinauto 中访问的成员之外,它对于我需要做什么来使用它非常不直观,所以我宁愿避开它,直到代码被清理了。。

我还注意到窗口的句柄发生了变化,所以如果我能以某种方式从窗口标题中获取句柄,然后从句柄中获取 PID 也可以使用。

python windows pid win32com

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

Python - 使用 win32com.client 将 Excell 单元格范围格式化为表格

我正在尝试编写一个函数来选择工作表中的所有非空单元格,将列宽调整为内容,并将它们格式化为表格。

我被困在最后一点,这是我当前的代码:

import win32com.client
from win32com.client import constants


f = r"D:\Project\test_copy.xlsx"

exc = win32com.client.gencache.EnsureDispatch("Excel.Application")
exc.Visible = 1
exc.Workbooks.Open(Filename=f)
exc.ActiveSheet.UsedRange.Select()
exc.Selection.Columns.AutoFit()
exc.ActiveSheet.ListObjects("Table1").TableStyle ="TableStyleLight8"
Run Code Online (Sandbox Code Playgroud)

问题出在最后一行。我不确定该怎么做,因为错误消息非常神秘。

*snip*
 line 80, in __call__
    ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((12, 1),),Index
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)
Run Code Online (Sandbox Code Playgroud)

python excel win32com

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

python win32com Outlook 2013 SendUsingAccount 返回异常

在使用 python 和 win32com api 处理简单的邮件自动化时,我遇到了 SendUsingAccount 的问题。它被忽略了,或者更糟糕的是,当我从 Windows 7 升级到 Windows 10 时产生错误。

这是我的原始代码

import win32com.client

o = win32com.client.Dispatch("Outlook.Application")
oacctouse = None
for oacc in o.Session.Accounts:
    if oacc.SmtpAddress == "sender@mail.com":
        oacctouse = oacc
        break
Msg = o.CreateItem(0)
if oacctouse:
    Msg.SendUsingAccount = oacctouse
if to:
    Msg.To = ";".join(to)
if cc:
    Msg.CC = ";".join(cc)
if bcc:
    Msg.BCC = ";".join(bcc)

Msg.HTMLBody = ""

Msg.Send()
Run Code Online (Sandbox Code Playgroud)

导致出现以下错误: Traceback (most recent call last): File "C:\Program Files (x86)\JetBrains\PyCharm 5.0.3\helpers\pydev\pydevd_exec.py", line 3, in Exec exec exp in …

python outlook win32com

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

我无法使用python在电子邮件正文中添加图像,我可以添加图片作为附件但我想要一个代码在mailbody中添加图像

Right now I am using below code:

import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'to address'
mail.Subject = 'Message subject'
mail.Body = 'Message body'
mail.HTMLBody = '<h2>HTML Message body</h2>'# this field is optional
**mail.Attachments.Add('C:\Users\MA299445\Downloads\screenshot.png')**
mail.Send()
Run Code Online (Sandbox Code Playgroud)

我可以附上图片,但我想将这张图片粘贴到电子邮件正文中.

提前致谢

python email outlook image win32com

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

win32com.client.Dispatch 类标签

我正在尝试使用 python 连接到 COM 对象。

更具体地说,我使用 ASCOM 标准驱动程序连接到 MaxDome II,不知道如何引用此驱动程序。

在此链接中,作者使用“Celestron.Telescope”作为 win32com.client.Dispatch 实例化的参数。

我的问题是如何找到这个字符串。我知道这与安装在计算机上的已安装驱动程序有关,但我不知道如何找到特定字符串。有没有办法使用 win32com.client 列出 COM 对象?

顺便说一下,在 Windows 7 pro 上运行,64 位。

谢谢

python windows com win32com ascom

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

Python - 使用 win32com.client 接受 Word 文档中的所有更改

我正在使用 pywin32 模块中的 win32com.client 来接受 word 文档中的所有跟踪更改(Windows 10 64 位上的 Python 3.6.4)。

具体来说,我使用的代码如下:

import win32com.client as win32


word = win32.gencache.EnsureDispatch("Word.Application")
word.Visible = False
doc = word.Documents.Open(PATH TO WORD FILE)
doc.Activate()
word.ActiveDocument.TrackRevisions = False  # Maybe not need this

try:
    word.WordBasic.AcceptAllChangesInDoc()
except TypeError:
    pass

word.ActiveDocument.Save()
doc.Close(False)
word.Application.Quit()
Run Code Online (Sandbox Code Playgroud)

我有两个问题。

1.) 有没有比使用 try-except 块更好的方法来接受所有更改?使用此方法会产生 TypeError,因此需要一个 try-except 块来完成程序。

2.) 你知道如何删除用户留下的评论吗?

python ms-word pywin32 win32com

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