zoukankan      html  css  js  c++  java
  • 9.COM编程

    COM编程也就是去调用WINDOWs自己所携带的应用,例如office(excel,word,ppt)等等。而python中使用就需要调用win32模块。

    这个模块名是pypiwin32,直接用pip安装即可。

     1 from tkinter import Tk
     2 from time import sleep
     3 from tkinter.messagebox import showwarning
     4 import win32com.client as win32
     5 
     6 warn = lambda app: showwarning(app, 'Exit?')
     7 RANGE = list(range(3, 8))
     8 
     9 def excel():
    10     app = 'Excel'
    11     xl = win32.gencache.EnsureDispatch('%s.Application' % app)
    12     ss = xl.Workbooks.Add() #添加了一个工作簿
    13     sh = ss.ActiveSheet  #获取活动的那个工作簿,因为excl可能有很多的sheet
    14     xl.Visible = True #设为true是为了在桌面上演示,否则就直接写完存好,无法看到过程。
    15     sleep(1)
    16 
    17     sh.Cells(1,1).Value = 'Python-to-%s Demo' % app
    18     sleep(1)
    19     for i in RANGE:
    20         sh.Cells(i,1).Value = 'Line %d' % i
    21         sleep(1)
    22     sh.Cells(i+2,1).Value = "Th-th-th-that's all folks!"
    23 
    24     warn(app)
    25     ss.Close(False)
    26     xl.Application.Quit()
    27 
    28 if __name__=='__main__':
    29     Tk().withdraw()
    30     excel()

    11行就是调用COM的代码,调用了excel应用,之后回去句柄,然后对其进行写入操作。之所以用sleep是为了看清数据挨个写进去的过程,TK是为了创建一个弹出框最后点击一下再关闭。

    此处使用的是静态调度,静态和动态的区别大致就是静态是在运行之前构建好对象并且缓存,而动态则是在运行时候构建。

    动态的代码是xl = win32com.client.Dispatch('%s.Application' % app)

    另外一点值得一提的是python文件的后缀一般是py,但是如果后缀改为pyw,则不会弹出dos窗口,这是为了在制作界面程序时候,不让用户看到dos窗口。

    word和ppt的代码就不赘述了,我在贴一个outlook的代码来对比一下使用。

     1 from tkinter import Tk
     2 from tkinter.messagebox import showwarning
     3 import win32com.client as win32
     4 
     5 warn = lambda app: showwarning(app, 'Exit?')
     6 RANGE = list(range(3, 8))
     7 
     8 def outlook():
     9     app = 'Outlook'
    10     olook = win32.gencache.EnsureDispatch('%s.Application' % app)
    11 
    12     mail = olook.CreateItem(win32.constants.olMailItem)
    13     recip = mail.Recipients.Add('you@127.0.0.1')
    14     subj = mail.Subject = 'Python-to-%s Demo' % app
    15     body = ["Line %d" % i for i in RANGE]
    16     body.insert(0, '%s
    ' % subj)
    17     body.append("
    Th-th-th-that's all folks!")
    18     mail.Body = '
    '.join(body)
    19     mail.Send()
    20 
    21     ns = olook.GetNamespace("MAPI")
    22     obox = ns.GetDefaultFolder(win32.constants.olFolderOutbox)
    23     obox.Display()
    24     obox.Items.Item(1).Display()
    25 
    26     warn(app)
    27     olook.Quit()
    28 
    29 if __name__=='__main__':
    30     Tk().withdraw()
    31     outlook()
  • 相关阅读:
    WAMPP安装后mysql无法启动
    转:xampp-php5.6下安装memcached.exe
    apache配置多域名多站点记录
    抽象类
    this关键字
    static关键字
    super关键字
    Set
    Map
    List
  • 原文地址:https://www.cnblogs.com/lixiaofou/p/7786672.html
Copyright © 2011-2022 走看看