加载中…
个人资料
daisycolour
daisycolour
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,369
  • 关注人气:48
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

python处理word文件:win32com用法详解

(2011-12-01 21:08:17)
标签:

python

word

win32com

分类: Python

目标:用python处理doc文件

方法:引入win32com模块


**************************************************************************

一、安装

**************************************************************************


首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了。。。)

下载地址:http://sourceforge.net/projects/pywin32/files/

http://s11/mw690/002xKR1Agy6F5UxANGGca&690

python处理word文件:win32com用法详解python处理word文件:win32com用法详解python处理word文件:win32com用法详解


下载之后,安装即可:

http://s7/mw690/002xKR1Agy6F5UGiS7c66&690


**************************************************************************

二、应用1 拷贝doc文件内容

**************************************************************************


现在,就可以用起来了。

以下是一个实例,D:\a.doc中的内容复制到新的doc中去,新文件命名为D:\b.doc

mt.py

#-*- encoding: utf8 -*-

'''

Created on 2011-12-01

处理doc文件

@author: 

'''

from win32com import client    #将模块加载进来

python处理word文件:win32com用法详解word client.Dispatch('Word.Application')    

 

python处理word文件:win32com用法详解#word.Visible    

 

打开一个已存在的文件

python处理word文件:win32com用法详解doc word.Documents.Open( r'D:\a.doc')   

 

# newdoc为新word文件

newdoc word.Documents.Add()

python处理word文件:win32com用法详解docC word.Documents.Count    

 

#打印doc(第一个word文件)内容,中文不能打,报错

print doc.Content    

python处理word文件:win32com用法详解#range newdoc.Range(0,0)

 

range newdoc.Range()#尾部

python处理word文件:win32com用法详解#range newdoc.Range(doc.Content.Strat,doc.Content.end)

 

#range.InsertBefore('daisy')#在范围前写入字符串

python处理word文件:win32com用法详解range.InsertAfter(doc.Content)   

 

newdoc.SaveAs(r'D:\b.docx')  #另存为b.docxoffice2010

 

关闭

doc.Close()

newdoc.Close()

word.Quit()

部分参考于:http://hi.baidu.com/��ɽ��/blog/item/70e7f388a7ea97ba0f244494.html

 

 

#链接word应用进程

 

#可视化1(可以看见该word进程),不可视0(后台运行word进程).

 

#后面打开的文件前面加r,不加的话后面的\就变成了转义字符。得是中文名

 

获取打开word进程个数,此时为2

 

 

取得Range物件,文件的最端。

 

取得Range物件,范围整份文件

 

#doc的内容添加到newdoc的最后

 

 

 

 

 

 


http://s16/mw690/002xKR1Agy6F5UUVRb9ff&690


**************************************************************************

二、应用2 实际应用

**************************************************************************


下面来实现最初的目的:将教育学文件夹下的02-09(教育学09.doc)年的试题合并到out.docx中去。

edutest.py

#-*- encoding: utf8 -*-

'''

Created on 2011-12-01

处理word文件

@author: xiaodi

'''

import os, string, shutil

from win32com import client

#原本叫做教师资格证,教育学

 

python处理word文件:win32com用法详解dirname "D:\\Learning\\other\\Teacher\\Edu"

 

word client.Dispatch('Word.Application')

newdoc word.Documents.Add()    #*0*.doc

python处理word文件:win32com用法详解for filen in os.listdir(dirname):

python处理word文件:win32com用法详解    if '0' not in filen:

        continue

python处理word文件:win32com用法详解    fileinname os.path.join(dirname,filen)

    doc word.Documents.Open( fileinname)

   #fileoutname os.path.join(dirname,'out2.docx')

    print fileoutname

    # shutil.copy(fileinname,fileoutname)

    range newdoc.Range()

    range.InsertAfter(fileinname '\n')

    

python处理word文件:win32com用法详解range.InsertAfter(doc.Content)

    range.InsertAfter('\n')

    doc.Close()

python处理word文件:win32com用法详解newdoc.SaveAs(r"D:\Learning\other\Teacher\Edu\out.docx")

newdoc.Close()

word.Quit()

print 'ok'



http://s5/mw690/002xKR1Agy6F5V4PEXy54&690





**************************************************************************

三、总结

**************************************************************************

几年前搞的东西了,现在直接从原本存的word文档拷贝过来。(20131218)

看样子还是失败的例子。。.


 

 

因为下面的os.listdir不能正确识别中文文件夹名,所以改成了英文名

注意有两竖杠

 

 

获取教育学文件夹下的文件

只要带0:因为只有02-09年的文件名带0,其他都不带

生成绝对路径,原本文件名叫做教育学02.doc全部改成02.doc,不改也对

上一个例子却必须是中文名。。。

 

#尝试将源文件复制到目的文件,以便保持源文件的完整。失败T_T

02-09年的文件名字绝对路径写到out.doc中(能写中文名)

#不能包含中文内容,不识别T_T

 

 

另存为,还是得是 英文名。。。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有