Excel题库转换成文档的Python程序设计

发表时间:2021/1/6   来源:《中国电业》2020年8月22期   作者:陈晖
[导读] Python是一种跨平台的结合了解释性、编译性、互动性和面向对象的计算机程序设计语言,它拥有庞大的标准库,可以帮助我们处理各种工作。
        陈晖
        国网浙江省电力有限公司天台县供电公司 浙江台州 317200
        摘要:Python是一种跨平台的结合了解释性、编译性、互动性和面向对象的计算机程序设计语言,它拥有庞大的标准库,可以帮助我们处理各种工作。本文就是利用xlrd库来读取Excel题库文件,并将其按照Word文档默认字体的大小来生成相应的文本文档,并利用Word打开后,稍作调整后即可保存成Word文档,方便打印及刷题。
        关键词:Python程序设计、Excel题库、文档
        引言:在日常工作我们经常会遇到到考试或竞赛都会下发相应题库供练习之用,但下发的题库往往都是以Excel的形式,如果我们想把题库的内容打印出来刷题就会很不方便,网上也有很多把Excel另存为文本文件后再进行排版,或者利用Word邮件合并功能来生成题库文档,但这些操作都比较繁琐且后期排版也还需要大量的时间,因为我们萌生了利用Python操作Excel题库文件将其转换成Word文档的想法。
一、问题分析
        首先我们设计导出的文档格式内容如下所示:
● 1. 物理安全                                                    ← 主题与章节
【简单】3. 当火灾发生时,以下哪项手段需要最先被关注。答案:( C )。    ← 问题描述
        A.关闭精密空调并打开紧急出口    B.探测并判断火警类型                ← 选择项
        C.组织人员第一时间撤离        D.开启灭火系统
        再分析需要实现的功能如下:
        1、题库中题目的类型有单选、多选、判断;所以要求我们的程序要对这些类型都提供支持。
        2、题库中有知识点的分类,因些要在生成的文档输出一下知识点描述即主题与章节,表示下面的题目属于某个知识点,同时考虑在题目前加入难易的标识。
        3、对于单选和多选的选择项,要求根据选择项的长度自动判断,到底是显示成1行、还是2行或者是每个选择项单独占据一行。
        4、提供文档是否包含答案的选项,以便可以用来自己作练习使用,另外考虑答案通过正则表达式去匹配左、右括号,将答案填入题目的括号中。
二、框架结构
        根据这些功能,我们去组织Python程序的架构,主要下面5个类组成,并实现各自的功能,最后执行把这几个类的实例组合在一起来共同生成Word文档:
        各个类之间的相互关系如下所示:
ExerciseTopic【主题与章节】    ExerciseQuestion 【问题】    ExerciseAnswer【选择项】
ExerciseExport【主类】
ExcelReader【Excel操作类】
        下面对每个类实现的功能再作一个进行详细的说明:
2.1、ExcelReader - Excel操作类
        Excel操作类是基础类,所有数据的获取均由这个类来实现,同时类的构造函数中传入操作的Excel文件路径,并负责检查文件是否存在。


2.2、ExerciseTopic - 主题和章节类
        主题和章节描述主要是用来更好的区分题库所属的知识点。
2.3、ExerciseQuestion - 问题描述类
        问题描述类主要用来生成问题主体,对于判断题来说显示问题主体就够了,选择题无论是单选还是多选则还需要再添加上相应的选择项,再有判断题可能需要对答案进行下转换,如a,A表示答案正确。
2.4、ExerciseAnswer - 选择项类
        选择项类只对于选择题有用,同时根据选择项长短返回输出样式。
2.5、ExerciseExport - 主类
        负责把上面的类组合在一起,共同生成题库文档。
三、使用实例
        下面我们利用这几个类,编写一段代码来定制EXCEL题库的导出。如下:
1、打开我们测试用的“网络安全题库-1.xls”,在这里我们将文件名标识为①。
2、观察打开的文件,有“单选”、“多选”、“判断”三个工作簿,我们选择生成“单选”工作簿的题库记为⑦。
3、“单选”工作簿中,第1行为表头,2行开始为题库的内容,又因为操作的行索引从0开始,故题库起始行为1,记为⑧;
4、“单选”工作簿中共10列,分别为A列序号、B列知识点、C列为2级知识点、D列为题目、E列为选择项A、F列为选择项B、G列为选择项C、H列为选择项D、I列为答案、J列为难易度。从这些列中可以看出(操作的列索引也是从0开始的):
(1)、主题和章节类对应列索引为B列的知识点,也可以B列的知识点和C列的2级知识点,对应的索引为[1]或[1, 2],记为②。
(2)、题目的内容为D列,索引号为3,记为③;难易度为J列,索引号为9,记为④;答案在I列,索引号为8,记为⑤。
(3)、题目选择项为E列到H列,对应选择项A到D,索引为[4,5,6,7],记为⑥。
        因此我们可以使用下列的代码结合上述符号来产生题库文档,具体代码解释如下:
# 1.创建Excel操作对像
xls_reader = ExcelReader()
# 2.打开Excel文件。
xls_reader.open(os.path.join(os.getcwd(), "网络安全题库-1.xlsx①"))
# 3.如果Excel操作对象中的workbook为空,则表示Excel对象打开失败
if xls_reader.workbook is not None:
# 4.创建主类对象,同时传入主题和章节、问题、选择项等类名称,以便在主类构造函数创建相应类实例
        exercise = ExerciseExport(xls_reader, ExerciseQuestion, ExerciseAnswer, ExerciseTopic)
# 5.选择题库所在的Excel工作簿
    exercise.select_sheet("单选"⑦)
# 6.设置题库问题的起始行
    exercise.set_start_row(1⑧)
# 7.设置主题和章节类所在的列索引
    exercise.topic.re_init([1]②)
# 8.设置问题描述类的问题内容、难易度、答案所在的列索引,如不需要该部分则删除该键值对。
    exercise.question.re_init(QuestionType.DanXuan, {"difficulty": 9④, "question": 3③, "answer": 8⑤})
# 9.设置选择项的列索引列表。
    exercise.answer.re_init([4, 5, 6, 7]⑥)
# 10.调用主类的export函数,把生成的内容输入表工作簿同名的文档中。
    exercise.export(os.path.join(os.getcwd(), exercise.excel.curr_sheet_name + ".1.txt"))
四、总结分析
        正如python的创始人所言“人生苦短、我用Python”,Python可以让我们用极少的代码来实现心中所想的功能,让工作变轻松,只要你有想法,Python总会让你梦想成真,一起来学习、使用Python吧。
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: