当前位置:   article > 正文

python 自动化办公 随机生成题库文档_pythonword题库 excel 界面

pythonword题库 excel 界面

HI,大家好,我是最渣的黑客,很久没有更新文章了,今天更新一篇,利用python 做一个随机生成的题库文档。对一些老师考试检测等等,可能会是一个很好的帮助。

首先要准备的是很多题库在一个EXCEL 表中,题目为第一列,答案在第二列。

如下:

 接下来是代码阶段。我这里是开发的窗口化程序。简单易懂。复制即可使用。

开发环境:

解释器:python 3.6.8

编辑器:pycharm 2019.1.3

编码格式:utf-8

需要安装的库:python-docx,pandas,xlrd 【1.2.0版本】,xlwt,

温馨提示:如果你运行出来各种报错,唯一要检查的是你的一些格式问题,库安装,环境问题。 

  1. #encoding:utf-8
  2. import pandas as pd
  3. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
  4. from docx import Document
  5. from docx.shared import Pt
  6. from docx.oxml.ns import qn
  7. import random
  8. import os
  9. from docx.shared import Pt,RGBColor
  10. import tkinter as tk
  11. from tkinter import filedialog
  12. import threading
  13. window = tk.Tk()
  14. window.title('随机生成题库器')
  15. window.geometry("400x540") # 窗口大小(长*宽)
  16. label = tk.Label(window,text='题库数量', #text为显示的文本内容
  17. bg='black',fg='white',justify='left') #bg为背景色,fg为前景色
  18. label.pack(padx=50,pady=2)
  19. textExample = tk.Text(window, width=20, height=2) # 文本输入框
  20. textExample.pack(padx=50,pady=10) # 把Text放在window上面,显示Text这个控件
  21. # textExample.insert("insert","请输入需要多少题为一个文件库")
  22. label = tk.Label(window,text="题库文档数量", #text为显示的文本内容
  23. bg='black',fg='white',justify='left') #bg为背景色,fg为前景色
  24. label.pack(padx=50,pady=2)
  25. textExample2 = tk.Text(window, width=20, height=2) # 文本输入框
  26. textExample2.pack(padx=50,pady=10) # 把Text放在window上面,显示Text这个控件
  27. label = tk.Label(window,text="文档名称", #text为显示的文本内容
  28. bg='black',fg='white',justify='left') #bg为背景色,fg为前景色
  29. label.pack(padx=50,pady=2)
  30. textExample3 = tk.Text(window, width=20, height=2) # 文本输入框
  31. textExample3.pack(padx=50,pady=10) # 把Text放在window上面,显示Text这个控件
  32. def readfile(filepath):
  33. """
  34. 读取EXCEL文件
  35. """
  36. datalist = []
  37. for d in filepath:
  38. data = pd.read_excel(d)
  39. data = data.values.tolist()
  40. for d in data:
  41. title = d[0]
  42. content = d[1]
  43. tc = [title, content]
  44. datalist.append(tc)
  45. return datalist
  46. def wordDoc(readfile,filename,filpaths,generateNumber):
  47. """
  48. 写入word文档
  49. filename: 文件名称
  50. generateNumber:随机生成多少题
  51. """
  52. data = readfile
  53. dataramdom = random.sample(data,int(generateNumber))
  54. doctitle = filename
  55. doc = Document()
  56. doc.styles['Normal'].font.name = u'宋体'
  57. doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
  58. # doc.styles['Normal'].font.color.rgb = RGBColor(0, 0, 0)
  59. #输入文档标题
  60. t = doc.add_paragraph()
  61. t1 = t.add_run(doctitle) # 文档总标题
  62. t1.font.size = Pt(15)
  63. t.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
  64. t1.font.color.rgb = RGBColor(255, 0, 0)
  65. #输入文档内容
  66. for dr in dataramdom:
  67. title = dr[0]
  68. content = dr[1]
  69. content = str(content).replace('\n','',1)
  70. t2 = doc.add_paragraph().add_run(title) #输入标题
  71. t2.font.color.rgb = RGBColor(0, 0, 255)
  72. t2.bold = True
  73. doc.add_paragraph(content) #输入内容
  74. doc.save(f'{filpaths}.docx')
  75. def makefolder(filepath):
  76. """
  77. 创建文件夹
  78. """
  79. while True:
  80. if os.path.isdir(filepath):
  81. break
  82. else:
  83. os.makedirs(filepath)
  84. def upload_file():
  85. """
  86. 获取文件地址
  87. """
  88. selectFile = tk.filedialog.askopenfilenames() # askopenfilename 1次上传1个;askopenfilenames1次上传多个
  89. selectFile = list(selectFile)
  90. upload_entry.insert(0, selectFile)
  91. return selectFile
  92. def getTextInput():
  93. """
  94. 获取输入
  95. """
  96. global textExample3
  97. countdoc1 = textExample.get("1.0", "end") # 获取多少题
  98. countdoc2 = textExample2.get("1.0", "end") # 形成多少题库文档
  99. countdoc3 = textExample3.get("1.0", "end")
  100. countdoc1 = str(countdoc1).replace('\n','')
  101. countdoc2 = str(countdoc2).replace('\n','')
  102. countdoc3 = str(countdoc3).replace('\n','')
  103. filelist = upload_file()
  104. r = readfile(filelist)
  105. folderpath = './生成的题库'
  106. docName = countdoc3
  107. folderpath = os.path.join(folderpath, docName)
  108. makefolder(folderpath) # 创建文件夹
  109. n = int(countdoc2)
  110. m = 0
  111. while True:
  112. m += 1
  113. if m > n:
  114. break
  115. else:
  116. filename = docName + "_" + str(m)
  117. filapathName = os.path.join(folderpath, filename)
  118. print(f"{filename} 生成成功")
  119. wordDoc(r,countdoc3,filapathName,countdoc1)
  120. def thread_it(func):
  121. '''将函数打包进线程'''
  122. # 创建
  123. t = threading.Thread(target=func)
  124. # 守护 !!!
  125. t.setDaemon(True)
  126. # 启动
  127. t.start()
  128. # 阻塞--卡死界面!
  129. #输入文件
  130. upload = tk.Frame(window)
  131. upload.pack(padx=20,pady=20)
  132. upload_entry = tk.Entry(upload, width='40')
  133. upload_entry.pack(padx=50,pady=10)
  134. import time
  135. nowtime = time.time()
  136. nowtime1 = int(time.time())
  137. nowtime2 = int(time.time())+3000
  138. btnRead = tk.Button(window, height=1, width=10, text="开始程序", command=lambda:thread_it(getTextInput))
  139. btnRead.pack(padx=50,pady=10) # 显示按钮
  140. window.mainloop()

软件最终呈现如下:

题库数量表示:一个文档有多少个题

题库文档数量表示:你需要生成多个文档

文档名称:文档的主要内容的主标题,也是文档的文件名称

 

如果这篇文章对你有帮助,记得点个关注!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/1020996
推荐阅读
相关标签
  

闽ICP备14008679号