123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import os
- import re
- import sys
- import traceback
- import openpyxl
- import pandas as pd
- from openpyxl.utils import get_column_letter
- from openpyxl.worksheet.pagebreak import Break
- import config
- number = 1
- def resource_path(relative_path):
- if getattr(sys, 'frozen', False): # 是否Bundle Resource
- base_path = sys._MEIPASS
- else:
- base_path = os.path.abspath(".")
- return os.path.join(base_path, relative_path)
- def main():
- marker_template_file = openpyxl.load_workbook(resource_path(os.path.join("template", "评卷员数据导入模板.xlsx")))
- marker_print_file = openpyxl.load_workbook(resource_path(os.path.join("template", "评卷员打印模板.xlsx")))
- marker_sheet = marker_template_file.active
- marker_sheet_active = marker_print_file.active
- marker_sheet_active.column_dimensions[get_column_letter(4)].width = 25
- # start_row = 3
- start_print_row = 2
- if config.inputfilepath.endswith(".xlsx"):
- if not os.path.exists(os.getcwd() + os.sep + config.inputfilepath):
- raise Exception("在同级目录下未找到%s名称的文件" % (config.inputfilepath))
- dataframe = pd.read_excel(os.getcwd() + os.sep + config.inputfilepath, header=1)
- dataframe_groupby = dataframe.groupby(by=["科目代码", "评卷分组(只能用小写数字)"])
- courseCode = None
- for index, data in dataframe_groupby:
- marker_number = config.makernumber
- if not courseCode:
- courseCode = index[0]
- else:
- if courseCode != index[0]:
- page_break = Break(id=marker_sheet_active.max_row)
- marker_sheet_active.page_breaks[0].append(page_break)
- courseCode = index[0]
- for i in range(0, int(marker_number) + 1):
- questionnameLst = data["大题名称"].map(str) + "-" + data["小题号(只能用小写数字)"].map(str)
- markerdata = {"courseCode": str(index[0]), "markergroup": str(index[1])}
- markername = createMarkerName(markerdata)
- markername = createpostfix(markername, i + 1)
- marker_sheet_active.append(
- [str(index[0]), data["科目名称"].values[0], str(index[1]), ",".join(questionnameLst.values),
- markername])
- marker_sheet.append(
- [str(index[0]), "", str(index[1]), markername])
- start_print_row = start_print_row + 1
- if not os.path.exists(os.getcwd() + os.sep + "result"):
- os.makedirs(os.getcwd() + os.sep + "result")
- marker_template_file.save(os.getcwd() + os.sep + "result" + os.sep + "评卷员数据导入模板.xlsx")
- marker_print_file.save(os.getcwd() + os.sep + "result" + os.sep + "评卷员打印模板.xlsx")
- else:
- raise Exception("只支持xlsx文件")
- def createMarkerName(data):
- # 根据rule生成markername
- # mainnumber,coursecode,subnumber,markergroup
- # {add:"",subnumber:"",courseCode:"",markergroup:""}
- rule = config.rule
- taglist = rule.split("-")
- markertag = []
- for tag in taglist:
- pattern = r"\$\{(mainnumber|subnumber|courseCode|markergroup)\}"
- result = re.search(pattern, tag)
- if result:
- tagname = result[1]
- markertag.append(data[tagname])
- else:
- markertag.append(tag)
- return "-".join(markertag)
- def createpostfix(markername, groupnumber):
- global number
- if config.postfix == "add":
- markername = markername + "-" + str(number)
- number = number + 1
- else:
- markername = markername + "-" + str(groupnumber)
- return markername
- if __name__ == "__main__":
- try:
- if os.path.exists(os.getcwd() + os.sep + "error.log"):
- os.remove(os.getcwd() + os.sep + "error.log") # 首先删除错误文件
- main()
- except:
- errordata = traceback.format_exc()
- with open(os.getcwd() + os.sep + "error.log", "w") as file:
- file.write(errordata)
|