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

Word转excl表格

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

转:

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

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

首先确定好转化思路

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 docx
file = 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 += 1
book.save(‘TimuTest.xls‘)                     #保存excl的文件名

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

python3 docxToexcl.py

4、整个脚本代码

#!/usr/bin/python3
#coding:utf-8

import docx
import re
import json
import xlwt

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})
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=1
for k in a:
    data=a[k]
    data.insert(0,k)
    for index in range(len(data)):
        sheet.write(row,index,data[index])
    row += 1
book.save(‘test.xls‘)

总结:

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

原文地址:http://blog.51cto.com/12332766/2334976

时间: 2024-10-15 00:41:20

word文档(选择题)转换为excl表格的相关文章

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

C# 替换Word文本—— 用文档、图片、表格替换文本

编辑文档时,对一些需要修改的字符或段落可以通过查找替换的方式,快速地更改.在C# 在word中查找及替换文本一文中,主要介绍了在Word中以文本替换文本的方法,在本篇文章中,将介绍如何用一篇Word文档.图片或者表格来替换文档中的指定文本字符串.示例要点如下: 1. 用文档替换Word中的文本 2. 用图片替换Word中的文本 3. 用表格替换Word中的文本 工具 Free Spire.Doc for .NET 下载安装后,注意在程序中添加引用Spire.Doc.dll(如下图),dll文件可

黄聪:利用Aspose.Word控件实现Word文档的操作(转)

撰写人:伍华聪  http://www.iqidi.com  Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般使用Aspose.Cell来实现我想要的各种Excel报表输出.虽然一直也知道Aspose.Word是用来生成Word文档的,而且深信其也是一个很强大的控件,但一直没用用到,所以就不是很熟悉. 偶然一次机会,一个项目的报表功能指定需要导出

利用Aspose.Word控件实现Word文档的操作

Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般使用Aspose.Cell来实现我想要的各种Excel报表输出.虽然一直也知道Aspose.Word是用来生成Word文档的,而且深信其也是一个很强大的控件,但一直没用用到,所以就不是很熟悉. 偶然一次机会,一个项目的报表功能指定需要导出为Word文档,因此寻找了很多篇文章,不过多数介绍的比较简单一

转载wuhuacong(伍华聪)的专栏 利用Aspose.Word控件实现Word文档的操作 (留作笔记)

Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般使用Aspose.Cell来实现我想要的各种Excel报表输出.虽然一直也知道Aspose.Word是用来生成Word文档的,而且深信其也是一个很强大的控件,但一直没用用到,所以就不是很熟悉. 偶然一次机会,一个项目的报表功能指定需要导出为Word文档,因此寻找了很多篇文章,不过多数介绍的比较简单一

word文档最上面有一条不是页眉的线

word2013文档最上面有一条不是页眉的线 在编辑Word文档时发现文档上面出现了一条实线,而且并非页眉,这里我采取了一个方式: 找到[设计]---[页面边框] 找到[边框和底纹]----[页面边框],选择[设置]中的无,确定就可以了 原因:可能是Word文档中有编辑过表格之类的内容,设置边线宽度时出现. 原文地址:https://www.cnblogs.com/s1-myblog/p/10686198.html

将html转换为word文档的几种方式

1 基于wps直接将页面信息下载成word文档 1 public void test() 2 { 3 4 WPS.Application wps = null; 5 try 6 { 7 wps = new WPS.Application(); 8 } 9 catch (Exception ex) 10 { 11 return; 12 } 13 var httpurl = "http://www.baidu.com"; 14 WPS.Document doc = wps.Document

NPOI读写Excel表格、Word文档

NPOI是从POI移植过来的.NET版本,专门对Word.Excel进行读写操作的一个开源项目 下面就试着怎么用我们的C#来进行读写操作,我现在用的Office版本是2016 我们首先通过Nuget把NPOI引入到我们的项目中 1.读取Excel表格 using(FileStream fs=new FileStream(@"C:\Users\BIDIANQING\Desktop\1.xlsx", FileMode.Open,FileAccess.Read)) { XSSFWorkboo

java 处理word文档 (含图片,表格内容)

由于本人长期从事Oa相关项目的开发,所以处理word文档,Pdf,Excel等是在所难免的. 1.需求      处理Excel 可以用jxl        或者poi 2需求     用户在系统上填写信息,保存后导出标准的word文档,用户在系统上填写的信息我们用富文本编辑工具kindEditor,这个插件可以将用户从word文档拷贝的表格标签保存,但是图片信息需要另行上传. 现在问题出来了,我们要将这些包含图片,表格,特殊符号的东东生成word文档. 如果是单纯的没有特殊格字符,图片等信息,