需求是这样子的,上边要求实习生将5000多份年报中主营业务标题下的全部内容保存到一份word文档中。虽然说我是来打杂的,但是啊这5000多份,这不得累死我,如果用手一份一份查找复制的话,一份年报可是有几万行数据的呢,这怎么搞,我一个星期都干不完。
那没办法的了,只能想其他办法的了。肯定是上手比较容易的python的拉,首选就是你的了。
具体实现原理请看:http://t.csdn.cn/Blq9b
提取源文件夹中的5000份word年报中主营业务标题下的所有内容到新的文件夹
运行结果:
全部代码:
import win32com.client as win32
from win32com.client import constants
import os
import docx
list_question = []
# 获取内容
def get_content():
file_name = get_filename()
for i in range(len(file_name)):
flag = 0
flag_1 = 1
# 打开word应用程序
word = win32.DispatchEx('Word.Application')
# 是否可视化
word.Visible = 0
# 源文件路径
file_path = r'D:/源文件/{}'.format(file_name[i])
print(file_path)
# 打开
doc = word.Documents.Open(file_path)
# 光标start的查找
# 赋值对象
search_range = doc.Content
# 查找内容
if(search_range.Find.Execute(FindText="报告期内公司从事的主要业务") or search_range.Find.Execute(FindText="报告期内公司从事的业务情况")):
# 选中查找到的内容
search_range.Select()
# 光标左移
word.Selection.MoveLeft()
# 将光标位置赋予start
start = word.Selection.Start.numerator
print(start)
flag = 1
# 光标end的查找 同上
search_range = doc.Content
if(search_range.Find.Execute(FindText="三、核心竞争力分析") or search_range.Find.Execute(FindText="四、 报告期内核心竞争力分析")):
search_range.Select()
word.Selection.MoveLeft()
end = word.Selection.Start.numerator
print(end)
flag_1 = 1
if(flag and flag_1):
if(start < end):
# 选取光标start到光标end的内容
doc.Range(start, end).Select()
# 复制
word.Selection.Copy()
# 粘贴的目标文件
file_name[i] = "业务_" + file_name[i]
file_path = r'D:/目标文件/{}'.format(file_name[i])
doc_new = word.Documents.Open(file_path)
# 粘贴
doc_new.Application.ActiveDocument.Range().Paste()
# 关闭两个文件
doc_new.Close()
print('复制成功')
else:
list_question.append([file_name[i]])
else:
list_question.append([file_name[i]])
doc.Close()
word.Quit()
# 获取word文件名字
def get_filename():
file_dir = "D:/源文件"
for root, dirs, files in os.walk(file_dir, topdown=False):
# print(dirs) # 当前目录下所有子目录
# print(files) # 当前路径下所有非目录子文件
return files
# 创建word文件
def build_wordfile():
file_name = get_filename()
# 创建文件
for i in range(len(file_name)):
file = docx.Document()
file_name[i] = "业务_" + file_name[i]
file.save('D:\\目标文件\\{}'.format(file_name[i]))
print(file_name[i])
get_filename()
build_wordfile()
get_content()
print("提取不了的年报:")
print(list_question)
这个如果是手工的话,搞完应该要好几天吧,虽然是来打杂的,也不至于辣么打杂的吧,竟然这样子我花个10分钟运行完,剩下的几天,勉为其难摸摸鱼,一天交一点上去,嘿嘿又是一天!