博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
word文档(选择题)转换为excl表格
阅读量:6095 次
发布时间:2019-06-20

本文共 3261 字,大约阅读时间需要 10 分钟。

Word转excl表格

同事在做一个批量性的工作,就是将word文档中的题目和选项,转移到xml文档中。

实例:
word文档(选择题)转换为excl表格
转:
word文档(选择题)转换为excl表格

再网上有很多将各种文档转化的工具和例子,但是很少有将固定格式进行转化的。

因为在这之前也是不明所以,老大直接让写个脚本,本能的感觉这个脚本不是很好写,有危险。但是哪有害怕就不做的道理,不会也要干。

首先确定好转化思路

1、查了很多资料,转excl的都是用的json文件转字典再转excl或者将字典、元组、列表转为json再转excl。归根结底就是将字典转excl。比较欣喜的是正好可以将题目当做key,选项和答案当做values。这样非常符合转换过程。

2、那么接下来的问题变成了如何将word文档内容转换为字典的形式。其实也一样很简单,接下来一点一点的分析就OK了。

环境问题:

python3:在编写过程中,因为出现中文,会遇到编码问题,而python3又将编码优化的很好,所以选择python3。(如果你出现乱码,或编码不正确,请考虑编码转化对错问题)
操作系统:linux(deepin)

困难又简单的编写历程

1、将word文档转换为字典形式

(1)读取word文档内容,python中给出了模块,python-docx

下载模块:

sudo pip3 install python-docx

我们需要用到的这个模块方法很简单,只需要读取和输出就可以了

import docxfile = docx.Document("./密码学竞赛习题.docx")

Document() 用来打开一个文档

(2)循环输出文档内容,将内容添加到字典当中

从word文档中我发现从第六行开始,没六行为一个题目加上答案。所以我想出先将每个题目循环输出出来,然后在将每个题目的内容循环加入的字典当中。又因为每个键对用多个值,所以,我将选项创建一个列表。

a={}file = docx.Document("./密码学竞赛习题.docx")for l in range(1,61):    b=[]    for idx,para in enumerate(file.paragraphs[6*l:6+6*l]):        if idx==0:            key=para.text        elif idx==1:            v1=para.text            b.append(v1)        elif idx==2:            v2=para.text            b.append(v2)        elif idx==3:            v3=para.text            b.append(v3)        elif idx==4:            v4=para.text            b.append(v4)        elif idx==5:            v5=para.text            b.append(v5)    a.update({key:b})

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。(百度得到,说白了就是给每行起个行号)

2、将字典转化为excl文件

(1)首先创建excl文件

python也给出了处理表格的模块xlwt,可以直接去下载

sudo pip3 install xlwt

创建一个表格

book = xlwt.Workbook()        #创建excl文件sheet = book.add_sheet('sheet1')       #创建一个表title = ['题目','A','B','C','D','答案']           #每一列标题for col in range(len(title)):                    #将标题逐个添加到表格当中    sheet.write(0,col,title[col])row=1                                     #设置行号

(2)正儿八经转excl

一切准备就绪,接下来就是将字典中的内容逐个加入到创建的excl中就OK

for k in a:    data=a[k]    data.insert(0,k)               #第一列加入序号    for index in range(len(data)):             #依次写入每一行        sheet.write(row,index,data[index])    row += 1book.save('TimuTest.xls')                     #保存excl的文件名

3、执行命令得到想要的excl表格

python3 docxToexcl.py

4、整个脚本代码

#!/usr/bin/python3#coding:utf-8import docximport reimport jsonimport xlwta={}file = docx.Document("./密码学竞赛习题.docx")for l in range(1,61):    b=[]    for idx,para in enumerate(file.paragraphs[6*l:6+6*l]):        if idx==0:            key=para.text        elif idx==1:            v1=para.text            b.append(v1)        elif idx==2:            v2=para.text            b.append(v2)        elif idx==3:            v3=para.text            b.append(v3)        elif idx==4:            v4=para.text            b.append(v4)        elif idx==5:            v5=para.text            b.append(v5)    a.update({key:b})book = xlwt.Workbook()sheet = book.add_sheet('sheet1')title = ['题目','A','B','C','D','答案']for col in range(len(title)):    sheet.write(0,col,title[col])row=1for k in a:    data=a[k]    data.insert(0,k)    for index in range(len(data)):        sheet.write(row,index,data[index])    row += 1book.save('test.xls')

总结:

其实这个脚本写出来并不满意,因为我在写的时候,只考虑到了正在测试的word文档格式,既然是批量的,文档的格式也不一定都是一样的。所以很难做到将别的格式的文档转化为想要的excl表格。最大的问题就是如果文档中出现来一个空行,脚本依然会计算进去,同时每六行循环依次的话,结果就会出来差别。脚本需要改进,如今感觉好一点的办法是利用正则匹配选项。等有机会写出来的话再贴上来吧!!!

转载于:https://blog.51cto.com/12332766/2334976

你可能感兴趣的文章
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
Check failed: error == cudaSuccess (7 vs. 0) too many resources requested for launch
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
http://www.blogjava.net/pdw2009/archive/2007/10/08/151180.html
查看>>
hadoop(6)---mapred-site.xml 详解以及常用配置。
查看>>
修改GRUB2背景图片
查看>>