自动化办公-Python处理Excel生成试卷

部署运行你感兴趣的模型镜像

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路

通过处理excel中不同的sheet,将每个题的顺序还有题内选项的顺序随机处理后,生成不同版本的试题
使用到的库

import random
import xlrd
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH

获取试题列表

wb = xlrd.open_workbook('./file/试题2.xls')

创建试题列表

class Question:
    pass


def createQuestion(sheet):
    # 创建试题列表
    questionList = []
    for i in range(sheet.nrows):
        if i > 1:
            obj = Question()
            # 题目
            obj.subject = sheet.cell_value(i, 1, )
            # 题型
            obj.questionType = sheet.cell_value(i, 2, )
            # 选项A,B,C,D
            obj.option = []
            obj.option.append(sheet.cell_value(i, 3))
            obj.option.append(sheet.cell_value(i, 4))
            obj.option.append(sheet.cell_value(i, 5))
            obj.option.append(sheet.cell_value(i, 6))
            # 分值
            obj.score = sheet.cell_value(i, 7)
            questionList.append(obj)
    # 将序列中所有元素随机排序
    random.shuffle(questionList)
    return questionList

生成Word试卷模板

# 生成word试卷模板
def createPaper(filename,papername,questionlist):
    document = Document()
    # 页眉页脚
    section = document.sections[0]
    header = section.header
    p1=header.paragraphs[0]
    p1.text = papername
    footer = section.footer
    p2=footer.paragraphs[0]
    p2.text = '内部试题,禁止泄露!!!'
    # 试卷基本信息
    title= document.add_heading(papername,level=1)
    title.alignment = WD_ALIGN_PARAGRAPH.CENTER
    p3 = document.add_paragraph()
    p3.add_run('姓名:________')
    p3.add_run('所属部门:________')
    p3.alignment = WD_ALIGN_PARAGRAPH.CENTER
    # 试题信息
    number =0
    for question in questionlist:
        number+=1
        subject = document.add_paragraph()
        run = subject.add_run('%d '%number+question.subject)
        # 题目加粗
        run.blod=True
        subject.add_run('[%s]分'%str(question.score))
        # 打乱选项的顺序
        random.shuffle(question.option)
        for index,option in enumerate(question.option):
            document.add_paragraph(('ABCD')[index]+str(option))
    document.save(filename)

创建试卷

for j in range(len(wb.sheets())):
    sheet = wb.sheet_by_index(j)
    for i in range(5):
        questionList = createQuestion(sheet)
        createPaper('./file/%s'%sheet.name+str(i+1)+'.docx','2022年%s'%sheet.name+'第一次考试',questionList)

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

private void Save2Excel() { //string file = "F:\\11\\ck.xlsx"; //string path = "F:\\11\\excel\\"; string time = DateTime.Now.ToString("yyyyMMdd"); string file = System.Windows.Forms.Application.StartupPath + "\\ck.xlsx"; string path = System.Windows.Forms.Application.StartupPath + "\\excel\\"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string saveName1 = path + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; excel = new CCExcel(file,saveName1); excel.Exceldata(); } private void textBox1_TextChanged(object sender, EventArgs e) { Form1.name = textBox1.Text.ToString(); } private void Form1_Load(object sender, EventArgs e) { comboBox1.Text = 11.ToString(); comboBox2.Text = 100.ToString(); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { Form1.comB1 = comboBox1.Text.ToString(); } private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { Form1.comB2 = comboBox2.Text.ToString(); } } public class CCExcel { public Excel.Application appExcel; public Excel.Workbooks wbs; public Excel.Workbook wb; public Excel.Worksheets wss; public Excel.Worksheet ws; private string fileName; private string saveName; public CCExcel(string fileName,string saveName) { // //TODO: 在此处添加构造函数逻辑 // this.fileName = fileName; this.saveName = saveName; } public void Exceldata() { Create(); //Open(fileName); Data2Excel(); Save(saveName); //Save(wb,saveName); //appExcel.ActiveWorkbook.SaveCopyAs(fileName); //判断当前激活的表,并保存这个表。否则,保存时会弹出“是否保存Sheet1.xlsx”的对话框 wb.Close(Type.Missing, Type.Missing, Type.Missing); wbs.Close(); appExcel.Quit(); wb = null; wbs = null; appExcel = null; GC.Collect(); } private void Create()//创建一个Excel对象 { appExcel = new Excel.Application(); wbs = appExcel.Workbooks; wb = wbs.Add(true); //ws = (Excel.Worksheet)wb.ActiveSheet;//这是一个只读sheets集合 //Excel.Worksheet worksheet = wb.ActiveSheet as Excel.Worksheet;//这也是一个只读sheets集合 //Excel.Worksheet ws = (Worksheet)wb.Worksheets[1];//创建工作页sheet单页 ws = wb.Worksheets[1] as Worksheet; //第一个sheet页 ws.Name = "ck"; //这里修改sheet名称 } public void Open(string fileName) { appExcel = new Excel.Application(); wbs = appExcel.Workbooks; wb = wbs.Add(fileName); wb = wbs.Open(fileName,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing); }
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值