<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Townes &#187; win32com</title>
	<atom:link href="https://thetownes.coolpage.biz/?feed=rss2&#038;tag=win32com" rel="self" type="application/rss+xml" />
	<link>https://thetownes.coolpage.biz</link>
	<description>本站已转移至：http://www.thetownes.info</description>
	<lastBuildDate>Thu, 01 Aug 2013 11:49:56 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>python模块:win32com用法详解</title>
		<link>https://thetownes.coolpage.biz/?p=469</link>
		<comments>https://thetownes.coolpage.biz/?p=469#comments</comments>
		<pubDate>Thu, 01 Aug 2013 03:40:51 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[win32com]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=469</guid>
		<description><![CDATA[1）安装 （2）处理word 使用技巧 import win32com from &#8230; <a href="https://thetownes.coolpage.biz/?p=469">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>1）安装</p>
<p>（2）处理word</p>
<p>使用技巧</p>
<p>import win32com<br />
from win32com.client import Dispatch, constants</p>
<p>w = win32com.client.Dispatch(&#8216;Word.Application&#8217;)<br />
# 或者使用下面的方法，使用启动独立的进程：<br />
# w = win32com.client.DispatchEx(&#8216;Word.Application&#8217;)</p>
<p># 后台运行，不显示，不警告<br />
w.Visible = 0<br />
w.DisplayAlerts = 0</p>
<p># 打开新的文件<br />
doc = w.Documents.Open( FileName = filenamein )<br />
# worddoc = w.Documents.Add() # 创建新的文档</p>
<p># 插入文字<br />
myRange = doc.Range(0,0)<br />
myRange.InsertBefore(&#8216;Hello from Python!&#8217;)</p>
<p># 使用样式<br />
wordSel = myRange.Select()<br />
wordSel.Style = constants.wdStyleHeading1</p>
<p># 正文文字替换<br />
w.Selection.Find.ClearFormatting()<br />
w.Selection.Find.Replacement.ClearFormatting()<br />
w.Selection.Find.Execute(OldStr, False, False, False, False, False, True, 1, True, NewStr, 2)</p>
<p># 页眉文字替换<br />
w.ActiveDocument.Sections[0].Headers[0].Range.Find.ClearFormatting()<br />
w.ActiveDocument.Sections[0].Headers[0].Range.Find.Replacement.ClearFormatting()<br />
w.ActiveDocument.Sections[0].Headers[0].Range.Find.Execute(OldStr, False, False, False, False, False, True, 1, False, NewStr, 2)</p>
<p># 表格操作<br />
doc.Tables[0].Rows[0].Cells[0].Range.Text =&#8217;123123&#8242;<br />
worddoc.Tables[0].Rows.Add() # 增加一行</p>
<p># 转换为html<br />
wc = win32com.client.constants<br />
w.ActiveDocument.WebOptions.RelyOnCSS = 1<br />
w.ActiveDocument.WebOptions.OptimizeForBrowser = 1<br />
w.ActiveDocument.WebOptions.BrowserLevel = 0 # constants.wdBrowserLevelV4<br />
w.ActiveDocument.WebOptions.OrganizeInFolder = 0<br />
w.ActiveDocument.WebOptions.UseLongFileNames = 1<br />
w.ActiveDocument.WebOptions.RelyOnVML = 0<br />
w.ActiveDocument.WebOptions.AllowPNG = 1<br />
w.ActiveDocument.SaveAs( FileName = filenameout, FileFormat = wc.wdFormatHTML )</p>
<p># 打印<br />
doc.PrintOut()</p>
<p># 关闭<br />
# doc.Close()<br />
w.Documents.Close(wc.wdDoNotSaveChanges)<br />
w.Quit()</p>
<p>（3）处理excel</p>
<p>［1］使用PyExcelerator读写EXCEL文件(Platform: Win,Unix-like)<br />
优点：简单易用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺点：不可改变已存在的EXCEL文件。<br />
PyExcelerator是一个开源的MS Excel文件处理python包。它主要是用来写 Excel 文件.URL:&nbsp;<a href="http://sourceforge.net/projects/pyexcelerator/">http://sourceforge.net/projects/pyexcelerator/</a><br />
我没有找到关于PyExcelerator的文档。只是看到了limodou的一篇介绍：<a href="http://www.2cto.com/kf/201206/137853.html">http://www.2cto.com/kf/201206/137853.html</a></p>
<p>这个包使用起来还是比较简单的：）。带了很多小例子，可以参照。<br />
例mini.py.<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
#!/usr/bin/env python<br />
# -*- coding: windows-1251 -*-<br />
# Copyright (C) 2005 Kiseliov Roman<br />
__rev_id__ = &#8220;&#8221;"$Id: mini.py,v 1.3 2005/03/27 12:47:06 rvk Exp $&#8221;"&#8221;<br />
&#8220;导入模块<br />
from pyExcelerator import *<br />
&#8220;生成一个工作薄<br />
w = Workbook()<br />
&#8220;加入一个Sheet<br />
ws = w.add_sheet(&#8216;Hey, Dude&#8217;)<br />
&#8220;保存<br />
w.save(&#8216;mini.xls&#8217;)<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
[2]使用COM接口，直接操作EXCEL(只能在Win上)<br />
优点：可以满足绝大数要求。缺点：有些麻烦。:-)<br />
这方面的例子很多，GOOGLE 看吧:-). 文档也可以参看OFFICE自带的VBA EXCEL 帮助文件(VBAXL.CHM)。这里面讲述了EXCEL VBA的<a href="http://www.2cto.com/kf" target="_blank">编程</a>概念，<br />
不错的教程！另外，《<a href="http://www.2cto.com/kf/web/Python/" target="_blank">Python</a>&nbsp;Programming on Win32》书中也有很详细的介绍。这本书中给出了一个类来操作EXCEL 文件，可以很容易的加以扩展。<br />
#!/usr/bin/env python<br />
# -*- coding: utf-8 -*-<br />
from win32com.client import Dispatch<br />
import win32com.client<br />
class easyExcel:<br />
&nbsp;&nbsp;&nbsp; &#8220;&#8221;"A utility to make it easier to get at Excel.&nbsp; Remembering<br />
&nbsp;&nbsp;&nbsp; to save the data is your problem, as is&nbsp; error handling.<br />
&nbsp;&nbsp;&nbsp; Operates on one workbook at a time.&#8221;"&#8221;<br />
&nbsp;&nbsp;&nbsp; def __init__(self, filename=None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlApp = win32com.client.Dispatch(&#8216;Excel.Application&#8217;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if filename:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.filename = filename<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook = self.xlApp.Workbooks.Open(filename)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook = self.xlApp.Workbooks.Add()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.filename = &#8221;&nbsp;<br />
&nbsp;&nbsp;&nbsp; def save(self, newfilename=None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if newfilename:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.filename = newfilename<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook.SaveAs(newfilename)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook.Save()&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; def close(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook.Close(SaveChanges=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; del self.xlApp<br />
&nbsp;&nbsp;&nbsp; def getCell(self, sheet, row, col):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;Get value of one cell&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht = self.xlBook.Worksheets(sheet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sht.Cells(row, col).Value<br />
&nbsp;&nbsp;&nbsp; def setCell(self, sheet, row, col, value):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;set value of one cell&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht = self.xlBook.Worksheets(sheet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht.Cells(row, col).Value = value<br />
&nbsp;&nbsp;&nbsp; def getRange(self, sheet, row1, col1, row2, col2):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;return a 2d array (i.e. tuple of tuples)&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht = self.xlBook.Worksheets(sheet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sht.Range(sht.Cells(row1, col1), sht.Cells(row2, col2)).Value<br />
&nbsp;&nbsp;&nbsp; def addPicture(self, sheet, pictureName, Left, Top, Width, Height):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;Insert a picture in sheet&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht = self.xlBook.Worksheets(sheet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht.Shapes.AddPicture(pictureName, 1, 1, Left, Top, Width, Height)<br />
&nbsp;&nbsp;&nbsp; def cpSheet(self, before):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;copy sheet&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shts = self.xlBook.Worksheets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shts(1).Copy(None,shts(1))<br />
&#8220;下面是一些测试代码。<br />
if __name__ == &#8220;__main__&#8221;:<br />
&nbsp;&nbsp;&nbsp; PNFILE = r&#8217;c:\screenshot.bmp&#8217;<br />
&nbsp;&nbsp;&nbsp; xls = easyExcel(r&#8217;D:\test.xls&#8217;)<br />
&nbsp;&nbsp;&nbsp; xls.addPicture(&#8216;Sheet1&#8242;, PNFILE, 20,20,1000,1000)<br />
&nbsp;&nbsp;&nbsp; xls.cpSheet(&#8216;Sheet1&#8242;)<br />
&nbsp;&nbsp;&nbsp; xls.save()<br />
&nbsp;&nbsp;&nbsp; xls.close()</p>
<p>（4）python调用短信猫控件，发短信</p>
<p>#! /usr/bin/env python</p>
<p>#coding=gbk<br />
import sys<br />
import win32com.client<br />
ocxname=&#8217;ShouYan_SmsGate61.Smsgate&#8217;<br />
axocx=win32com.client.Dispatch(ocxname)<br />
axocx.CommPort=8#设置COM端口号<br />
axocx.SmsService=&#8217;+8613800100500&#8242;#设置短信服务号码<br />
axocx.Settings=&#8217;9600,n,8,1&#8242;#设置com端口速度<br />
axocx.sn=&#8217;loyin&#8217;<br />
c=axocx.Connect(1)#连接短信猫或手机<br />
&nbsp;<br />
print &#8216;连接情况&#8217;,axocx.Link()<br />
&nbsp;<br />
axocx.SendSms(&#8216;python确实是很好的&#8217;,&#8217;15101021000&#8242;,0)#发送短信</p>
<p>&nbsp;作者：木雨山</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=469</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
