python操作word的一些方法,前面写了一些感悟,有点跑题,改了下题目,方便能搜索到。心急的可以直接拉到最后看代码,我都加了比较详细的注释。
从8.3号早上9点,到8.8号下午5点半下班,终于把这个python代码写出来了,这五天简直是废寝忘食(扯淡),每天查资料到半夜2点(其实是天太热,洗完澡又晾干就要一个多小时了,在这里吐槽下今年的夏天,2016年北京的7月份简直了,平生第一次长痱子,连去年都没用过的凉席都翻出来了)。
好吧,扯得有点远了。因为工作需要,要批量修改一批rtf文件里的文字格式,rtf其实跟word是一样的。因为是处理文字,所以想用python解决,之前写过一个遍历文件夹的脚本,正好能用上。
但是这次要处理word文件,python本身貌似只能处理text文本,网上搜索之后,发现大家都用了一个pywin32模块,导入这个模块之后,就可以像vba一样操作word了!哈哈!
其实还是扯淡!我到写完这个脚本都没找到一个像样的API接口文档,可以说,我这五天只是在废寝忘食的查接口文档。
我曾天真的以为,我能找到一个PyWin32.chm文件,打开以后里面是pywin32模块里每个函数的详细用法,包括如何打开word,如何增删改查,如何修改字体,字号,如何设置段落格式等等,最重要的是,还是中文版!哇!奈斯!
然而查了几天后,我发现我真是脑子进屎了。安装完pywin32模块后,在“C:\Python34\Lib\site-packages”目录下,会送你一个PyWin32.chm,俗话说便宜没好货,何况是送的,全英文版我也忍了,毕竟26个英文字母还是读写熟练的,但是当我随便打开一个对象文档的时候,还是吓尿了!
右边的下拉条这么短是要闹哪样!我只是想简单打开个word啊!
好吧,新手没见过大场面,好在chm文档都很贴心的有个搜索框,兴奋的输入了“open”:
哇哦!真不少,挨个点开看看!
谁能告诉我这是些什么瘠薄玩意。。那一堆参数我要怎么输入。。说好的open(url)打开word文件呢?!
到此,我已经对这个文档放弃治疗了(当然也可能是我太水用不明白这个文档,但我目前也不想去弄明白他了。。)。
然后我又查查查查查查查查查查。。。。当然也有不少人(其实很少)在网上发了一些入门教学文档,包括怎么打开文件,关闭文件等等,但是也仅仅是入门,还不能完全满足我的需求,当然这些文章都被我未经允许,全部转载过来了。。能复制的就复制粘贴,不能复制的就截图复制粘贴!不过我应该都放上原文链接了。。。吧。。。
基本的功能在测试几次之后都能实现了,但是还有几个功能简直要吐血了,比如让一段文字格式化,成为没有任何格式的文本,这样一个函数折腾了整整一天!后来在vba操作里发现了一个ClearFormatting函数,才得到了解决。在这里必须要夸一夸微软爹:
这是一份VbaWord.chm文档,里面详细介绍了vba中的每个函数的用法,并且都有示例!最最重要的是,他居然是中文版!要不怎么说微软爹厚道呢^o^
既然说到微软了,顺便提一下python的IDE,我第一门正式学习的语言是Perl(工作需要),我对这门语言的评价是“呵呵”,我现在连一句Perl代码都记不起来,只记得一个美元符$和一个@。当然不是说Perl这门语言不好,只是对于初学编程的新手来说,代码实在是晦涩难懂,一堆符号往上一堆,感觉像是在梦游,而且Perl的学习资料很少,Perl在国外很火,但是在国内,呵呵。我当时写Perl代码的时候,用的是记事本。。因为那时候别说IDE了,文本编辑器也就知道记事本,写字板和word这三个。后来无意中知道了还有sublime这种东西,下载下来安装一试,哇,果然比记事本好用,而且也像网上说的皮肤很酷炫,黑色的,银色的,其他色什么的,听说还能装什么插件,简直就是神器!我当时感觉这就是我一辈子的伴侣了。然而几个月后我就换成了notepad++,原因是界面简单,启动速度快,汉化好,而且字好像也比较大。。
后来我从那个公司离职后,放弃了Perl,开始学习同是3P之一的python,当时从网上搜索教学视频,还买了小甲鱼的“VIP至尊会员”!在这里打个广告,想学python的可以去看看小甲鱼的视频,视频是免费的,优酷上就有,只是他的鱼c论坛里有些资料需要鱼币,如果是会员的话是免费的,当然你每天签到和回复都可以赚鱼币的,如果条件允许的话,可以买个会员,200块终身的。小甲鱼还是很辛苦的,看照片也就20多岁,现在还在每天更新视频,他不光讲python,还有c语言和其他的一些,不过我觉得还是python比较值得一看,毕竟国内的python教学视频很少,质量更是呵呵。
学习python的时候,我用的IDE一直是python自带的IDLE,其实我到现在用的也是IDLE。。IDLE其实真的很不错,有代码提示,也有颜色区别,F5运行,还有错误提示。前几天在查资料的时候,也看到很多人争论哪个python IDE最好用,评价最高的是pycharm,网上有人说,使用pycharm写python就好比使用vs写c#,听完这句我马上下载了这个200M的软件,然后花了俩小时去破解、汉化,然后试用了一分钟,最后花了5分钟卸载。一个汉化有bug,设置字体还要找教程,启动比vs还慢,占内存比vs还大,IDLE不能自动提示的他也没有的软件,我要来何用,你是如何有勇气跟vs比的?当然也可能是我水平不够没写过什么大项目,但是在我心中,vs依然是最好的IDE。既然vs这么好,那么有没有vs的python插件呢?毕竟eclipse都有个pydev啊!答案是有,就是PTVS,装上这个插件后,vs就能新建python项目了,而且vs的很多快捷键都可以用,比如注释,自动排版等,自动提示做的也还可以,毕竟是脚本语言,不能要求太高,引入模块里的函数一样不能点出来。当时第一次安装这个插件的时候其实感觉还是很别扭的,因为并不像写c#那样无可挑剔,当时心灰意冷,最终还是用回了IDLE。但是今天在把网上的一段代码复制到IDLE里后,缩进一直报错简直要炸了,一怒之下扔进vs里,看着熟悉的红色波浪线,心里涌过一丝温暖,就是你了。。
当然新手还是建议用IDLE,因为你要用PTVS这个插件要先装一个vs,而一个vs大约是4、5个G左右。。啥?你说装vs就为跑个python?
微软的东西就是好啊,虽然vs是收费软件,但是在国内,你跟谁收费呢?况且现在的vs2015有了免费的社区版,当然你也可以用其他方式获得专业版(我说的当然是花钱购买正版啊,你们不要误会)。
另外,c#是个好东西,想想我这一年,前前后后学习了不少东西,究其原因,是我一直想做个自己的网站,当时我已经买了域名和空间,但是还啥也不会。做网站就要学习HTML,但是光有HTML页面不好看,又学了CSS,但是网页不能动,不能点击什么的,又学了JavaScript,期间为了美化差点又学习Photoshop,后来发现是个大坑,赶紧跳了出来,东西太多,还是以后再学吧!然后网页要注册什么的吧,又要学习ASP.NET,但是上来没有基础又不能直接学,又从c#基础开始学起,期间还学习了C语言和SqlServer数据库,到三层的时候感觉有点跟不上了,于是我一鼓作气,跳了过去直接学ASP了(好无耻)。。因为正好当时老板一直催着我做一个注册网页,最后终于是做出来一个乞丐版的注册界面,能够跟我的数据库相连了,做出来的时候还是很高兴的!虽然其实代码量并不多,但好歹也是我自己做的。
说到这里,已经跑题跑的不要不要的了,顺便说一下,想要学习编程的同学,往往会在网上搜索“什么编程语言适合入门”,虽然我这篇文章的题目与这完全不相关。。但我把那句话写上了,万一搜到了呢,也能帮帮人是吧(希望不要毁人)。我当时也天天搜,网上众说纷纭,苦恼啊。但是作为一个过来人(其实还在开始的路上),首先要说的是,如果你有稳定的工作,或者不是计算机相关专业的,建议不要学。。或者说不要想着把编程当做一份事业,而抛弃原有的事业和专业。可能刚开始学习的时候,编出一个小程序,能够计算一个一元二次方程,觉得哇好有趣,编程原来这么简单啊!但是随着学习的深入,你会发现后面的知识会非常难理解,并且很枯燥,有的知识你学了也做不出什么有用的程序来,但却是非常重要的,这个时候你就觉得很没劲,然后在网上闲逛的时候,很可能会看到别人说,啊,你还在用xxx语言啊,早就不行了,现在是xxx的天下了!你一动摇,可能就会对转投另外一种语言,然后开头的学习也是很顺利,也很有趣,但是学到后面,会发现这门语言也很难,学一堆东西也是做不出什么像样的程序。这样就陷入了循环,不断学习新的语言,但是每种都只会个定义变量,写个for循环,甚至连函数都不清楚是什么,更不用说面向对象了,这样下去,原有的一点兴趣也被磨光了,你才会领悟到,原来编程这么难啊!
所以说,如果你现在过得不错,收入稳定,对编程有点兴趣,那就继续当做兴趣就可以了,千万不要以身试险,因为不是每个人都有极大的毅力和自制力的。别说你有。。说出来你自己都不信。。不然你把lol戒了试试。。或者减20斤膘。。
再有一种,对自己专业不满意,工作不满意,想要通过学习一门技术来改变命运的这类人。确实软件行业一直是高薪行业,一提程序员,都是高薪代名词。但是啊,高薪不是这么好拿的,还是上面说的,编程不是这么好学的,不然大家都能当程序员了。而且学编程,怎么也得高中毕业吧,如果连里面的单词都看不懂,我觉得还是挺难得,虽然说关键词就那几个,但是没有一定的数学逻辑思维的话,你懂得。。当然世事无绝对,初中生编程高手也是有的,至于小学啊,我就不敢说了。。
总而言之,如果你想从事软件这门行业,一定要慎重,如果决定了的话,就准备好吃几年苦吧!没错,是几年,不是几个月。
拿我自己来说,我原来的专业是生物技术,毕业后的第一个项目是采用基因克隆来检测细菌,听上去高大上吧,我用了4种技术来做,PCR,NASBA,LAMP,微阵列芯片,听上去更是吊炸天吧!然后一年半后我离职了,我跟boss说,我想做点靠谱的事情,我觉得编程挺靠谱的。boss表示很惋惜,但还是挽留我让我拿了年终奖再走,当时我一心想走,豪气万丈都有点看不上年终奖了,后来我很感激boss,因为那年的年终奖涨了2K。。
之后我去了一个小公司,就是我现在的公司,十几个人,做教育软件的。因为我那会啥编程语言也不会,只会点半吊子Perl(这是之前的boss让我学的,用来做生物信息分析),所以我应聘的只是数据录入,这种只要识字,会点电脑就能干的活,一个月3K,此外啥也没有,保险也没有,跟不用说饭补、交通住宿补贴了。而我居然能干下去,估计也是当时手里有点存款了。。
公司里有两个技术人员,是两口子,然后男技术又是老板的亲戚,有点乱。。这不重要!由于我表现出色(无耻。。),并且表示想要学习一些编程技术,男技术经常给我讲一些编程方面的知识,从此,给我打开了C#的大门!
男技术叫CZ,人真的很好,他说他也是大学毕业跨专业考的计算机研究生,本科专业是包装专业(什么鬼!- -!),然后考上研之后也是经常被忽略,后来依靠自己的努力,慢慢的在软件行业有了一席之地。啊,太励志了!
然而放到我身上完全不是这剧本了。。因为在上个公司天天操劳做实验,做汇报,被掏空了身子,身材一直很瘦削,183的个头,只有130斤(其实也不算很瘦。。)。然后来这公司以后,天天好吃懒做,每天那点破活随便就做完了,下班就走爱谁谁,从来不加班。就这样,半年胖了20斤,到150了,十月一回家的时候把我妈高兴坏了。
这半年里,算是初步开始正式接触编程了,开始在网上学习python,写一些小脚本用在工作上,然后有一些CZ写的c#工具,改改里面的数据和小的逻辑,改对的时候,CZ会表扬我一番,那时觉得好高兴啊!
还记得当时第一次看c#代码,当CZ打开VS的时候(那时候也没见过VS),我一看代码,卧槽,麻痹天书啊!上面那一列using是什么鬼?public后面那一堆大中小括号什么鬼?里面的一堆点点点是什么鬼?那个几个单词连在一起的巨长的是变量名?我当时强装镇定,但对我这种纸见过脚本语言的菜鸟,内心的震撼是巨大的。不过后来改数据的时候看多了倒也习惯了,直到有一天我看到了公司软件的源码。。
但是这个时期我仍然没有系统的学习C#,我觉得那个太难了,等我先学会python再说吧。然而到现在我要没有完全学会python,因为当时也是学到一个地方,再往后面就学不明白了,而且感觉也做不出什么有用的东西。
这个时候,大约是2015年7月份吧,不知道受了什么刺激,我就想做个网站,很快,我就摸索着从万网购买了域名,从淘宝购买了空间,还申请了帆布拍了照片做备案。这时候还啥都不会呢,就上网查,需要学HTML,好吧,就从网上搜索视频教程,因为我学编程习惯找视频学习,看书实在是太枯燥了,然后,下面,我要开始打广告了。我从网上找到一个教程“张鹏xx天带你玩转HTML”,基本是叫这个名字,我觉得讲的很好啊,比其他的要好,因为我决定看某个系列的视频是会对比一下,找一个讲的我能接受的。视频名字好像是7天玩转,我当然玩不转啦!估计得看了好几个月,还没看完。。但是基本的东西都会了,并且里面也讲了css,算是入门了。然后我就鼓捣我的网站,终于有了个主页面了,按照我想象的做了个排版,然而到今天每个版块都还是空的 T_T,因为实在是不知道写点啥,这个网站现在被我用来做测试了。。 咦?到现在还没出现广告?马上就要出现了!
在我学习这套HTML视频的时候,我注意到一个名字,确切的说是一个培训机构,从此,我又打开了“传智播客”的大门!
不吹不黑,传智播客的确是个良心培训机构,不仅是指教学质量,更重要的是,看它的视频到现在,我一分钱没花,因为网上都有,而且是它的官方网站提供免费下载的。。我觉得这点很难得,固然放出一部分视频也是为了吸引学员报名,但就是这些免费的视频也足够你学习一年半载了。
然后我疯狂的收集传智播客的.net系列视频,并开始系统学习,苏坤的c#基础、winform,赵建宇的基础加强,蒋坤的JavaScript,杨洪波的数据库、三层,王承伟的ASP.NET。每个老师讲的都各有特色,虽然只是看他们的视频,有的甚至连他们的相貌都不知道,但依然能感觉到他们的风采。苏坤的幽默,赵建宇的孩子气,蒋坤的博学认真,杨洪波的东北式幽默简直能当相声听,还有耿直boy王承伟,哈哈,感觉学习起来都不枯燥了。其实传智播客的金燕办公楼离我住的地方很近,都在昌平区,坐车半小时就到了。我想如果我以后在这一行业混好了,我一定去一趟传智播客,见一见那些老师,对他们说,虽然我没上过你们的课,但是我听了你们的每一堂课!
另外,在这期间,我还学习了郝斌老师的C语言,这个系列的视频我从大学的时候就看过,但当时只看过几节,会了个int a基本就没再学了,这次硬是看完了指针,虽然还是迷迷糊糊,但好歹是有了个印象。这里有个小细节,我曾经看过传智播客杨中科的一个介绍“WPF”的视频,在他找文件的时候,发现他的电脑里居然有郝斌的C语言视频!后来我知道杨中科也出过一套C语言视频“C语言也能干大事”,想来他也是觉得郝斌的C语言视频有可取之处吧!虽然有很多人不喜欢郝斌的这套视频,觉得他普通话不标准,英语更是不忍直视,与课程无关的废话太多,而且讲解中有一些错误。但是,对于一个初学者来说,他能把枯燥的理论化为生动的语言,让你理解,这就已经够了。
郝斌还有一套“数据库”,一套“数据结构”,一套“java”视频,有兴趣的同学可以搜索看一下,“数据结构”的视频网上应该讲的也不多,因为培训机构不会讲这个,推荐看一下。
说了这么多,我现在也只是一只小菜鸟,正在努力的学习当中,这些都是我学习的一些总结,至于推荐新手入门学习的语言,明眼人应该早就看出来了,就是C#,有了VS这个强大的IDE,写代码简直手到擒来,反正我现在的智商已经跟VS绑定了。而且学习C#入门很容易,学习过程很平缓,教学视频资料众多,而且还有博客园这种攻略网站,所以墙裂推荐!当然你非要学习Java我也只能说,小伙子,眼光不错!
总之,程序的这条道路必然是付出一定会有回报的,也只有付出了才能得到回报。
最后,写一句我一直认为正确的话:选择什么并不重要,重要的是坚持下去。
下面是代码,其实只有几十行,里面的几个方法都是常用的,如果没有,可以看下我转载的其他几篇文章,应该会对你有所帮助。
当然,前提是你能看到这篇文章。
1 import os #导入文件操作模块
2 import re #导入正则模块
3 import win32com #导入word操作模块
4
5 #准备打开word
6 from win32com.client import Dispatch,constants
7 w = win32com.client.Dispatch('Word.Application')
8 w.Visible = 0
9 w.DisplayAlerts = 0
10
11 #获取课文全路径
12 #..\1_一单元\1_《忆读书》\1_预习\1_音画课文
13 for root, dirnames, filenames in os.walk(r'C:\Users\jjw\Desktop\test\111_语文晋教版七年级上册'):
14 #字符串前面加r之后,正则里的\d等都不用变,'\'变成'\\'即可,开头末尾是'^$',匹配全部是'.*'
15 # if re.match(r'.*\\\d+_\w+\\\d+_.+\\1_预习\\1_音画课文$',dirpath):
16 # print(dirpath)
17 # else:
18 # print('未找到')
19 for filename in filenames:
20 if re.match(r'课文.rtf',filename):
21 classRTF = os.path.join(root,filename)
22 doc = w.Documents.Open(FileName = classRTF)
23 #文档最开始插入文字
24 #myRange = doc.Range(0,0)
25 #myRange.InsertBefore('哈哈哈哈哈哈')
26 #选中并修改全文字体
27 #par = doc.Range(doc.Content.Start,doc.Content.End)
28 #par.Font.Size = "14"
29
30 #1.修改全文字体、字号
31 w.ActiveDocument.Select()
32 w.Selection.Font.Name = "微软雅黑"
33 w.Selection.Font.Size = "14"#四号
34
35 #2.删除空格,替换字符串
36 w.Selection.Find.ClearFormatting()
37 w.Selection.Find.Replacement.ClearFormatting()
38 w.Selection.Find.Execute(" ",False,False,False,False,False,True,1,True,"",2)#普通空格
39 w.Selection.Find.Execute(" ",False,False,False,False,False,True,1,True,"",2)#这里面是个“口”的符号,全角空格
40
41 #3.删除空行,这里数量是1,因为回车占一个字符
42 for each in w.ActiveDocument.Paragraphs:
43 if each.Range.Words.Count == 1:
44 each.Range.Delete()
45
46 #作者后面插入空行
47 doc.Paragraphs(2).Range.InsertAfter('\n')
48
49 #前两行清除格式,主要是首行缩进
50 doc.Paragraphs(1).Range.Select()
51 w.Selection.ClearFormatting()
52 doc.Paragraphs(2).Range.Select()
53 w.Selection.ClearFormatting()
54
55 #前两行改字体、字号、居中
56 par1 = doc.Paragraphs(1).Range
57 #par1.ParagraphFormat.Reset()#取消首行缩进
58 par1.Font.Name = "微软雅黑"
59 par1.Font.Size = "28"#一号
60 par1.ParagraphFormat.Alignment = 1
61 par2 = doc.Paragraphs(2).Range
62 par2.Font.Name = "微软雅黑"
63 par2.Font.Size = "12"#小四
64 par2.ParagraphFormat.Alignment = 1
65 print("已处理:" + classRTF)
66 doc.Close()
67 w.Quit
68 print("处理完毕!")