Python 将excel中的选择题 导入到word文档中

0x00 昨天,我的老师给我们一个包含600道关于比赛的选择题和判断题的excel文档,要我们整理成指定格式的word文档以后交给他。我看着这六百道题有点发懵,心里突然传来了声音

“Copy!!” " Paste!!!" “Copy!!” " Paste!!!" “Copy!!” " Paste!!!"

身为新时代的CS学生 我甘心于CTRL+c +v吗?
当然不能,所以我决定用python帮我复制粘贴 qwq

部分题如下:

python代码粘贴到word有颜色 python复制到word_python代码粘贴到word有颜色


python代码粘贴到word有颜色 python复制到word_字符串_02

格式如下:

python代码粘贴到word有颜色 python复制到word_分割字符串_03

0x01
xlwings库 (对excel进行读写操作)
re库(对word进行读写操作)

Load_data()函数:
将excel第二列的所有数据导入到 groupList 这个列表中

Choose()函数 :
将列表的每一个元素看作一个题(虽然本来就是一道题),然后进行判断 是选择题还是判断题。
如果是选择题,继续进行判断 选择题的括号的位置在哪?因为括号在末尾的选择题,需要将括号移到头部去,括号在题干中间,或者本来就在头部的 就不移动。所以这里就有三个函数 choose_1 2 3 分别代表了三种情况 写入word文档的操作。

import xlwings as xw
import re

def Load_data():
    #创建app(一个app可以包含多个excel实例)
    app=xw.App()
    #创建excel实例
    wb = app.books.open(r'D:\nx\tk.xlsx')
    #打开指定工作簿
    sheet = wb.sheets[0]
    
    for i in range(1,600):
        groupList.append(sheet.range(i,2).value)
    print("已将excel的数据写入列表!!!")
        
    #验证列表的值        
    #for i in range(0,9):
        #print(str(i+1)+groupList[i])

def Choose_1(Str):
    #删除末尾的括号
    x=Str.replace('(  )', '', 1)
    #分割字符串
    res=re.split(r"([ABCD])",x)
    #前置括号
    temp=res[0]
    temp="(  )"+temp
    #将指定分割的字符 合并到其他字符串中
    res = ["".join(a) for a in zip(res[1::2],res[2::2])]
    #插入题干
    res.insert(0,temp)
    for b in range(0,len(res)):
        word.write(res[b]+"\n")
        #print(res[b])
    word.write("\n")
    
def Choose_2(Str_1):
    #分割字符串
    res=re.split(r"([ABCD])",Str_1)
    temp=res[0]
    #将指定分割的字符 合并到其他字符串中
    res = ["".join(a) for a in zip(res[1::2],res[2::2])]
    #插入题干
    res.insert(0,temp)
    for b in range(0,len(res)):
        word.write(res[b]+"\n")
        #print(res[b])
    word.write("\n")    

def Choose_3(Str_2):
    #分割字符串
    res=re.split(r"([ABCD])",Str_2)
    temp=res[0]
    #将指定分割的字符 合并到其他字符串中
    res = ["".join(a) for a in zip(res[1::2],res[2::2])]
    #插入题干
    res.insert(0,temp)
    for b in range(0,len(res)):
        word.write(res[b]+"\n")
        #print(res[b])
    word.write("\n")

def Think(Str_3):
    word.write(Str_3+"\n"+"\n")
    
def Choose():
    n=0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
    for i in range(0,599):
        flag=groupList[i]
        flag_1=flag.find('(')
        flag_2=flag.find(')')
        flag_3=flag.find('A')
        flag_4=flag.find('B')
        flag_5=flag.find('C')
        flag_6=flag.find('D')
        #判断出是选择题
        if(flag[flag_3+1]=='、'):
            #print(str(i+1)+"是选择题啊!!")

            #判断出 括号在选择题 题干末尾
            if(flag[flag_2+1]=='A' or flag[flag_2+2]=='A' or flag[flag_2+3]=='A'):
                Choose_1(flag)
                #print(str(i+1)+":括号在题干末尾")
            elif(flag[0]=='('):
                Choose_2(flag)
                #print(str(i+1)+":括号在题干头")
            else:
                Choose_3(flag)
                #print(str(i+1)+":括号在题干中间")
            n += 1
            print(n)
        else:
            Think(flag)
            #print(str(i+1)+":判断题")
        flag=''
    print("已完成数据的筛选和写入word文档!!!")
                
if __name__ == '__main__':
    word = open("D:\\nx\\ab.docx", 'w')
    groupList = []
    #将excel表格的数据写入到列表 groupList 中
    Load_data()
    #用一个函数来判断是选择题还是判断题,如果是选择题再用一个嵌入If 判断括号位置
    Choose()
    word.close()