Files
JITToolBox/module/worker.py
2025-05-20 18:30:00 +08:00

93 lines
3.1 KiB
Python

import os
import traceback
from PySide6.QtCore import QObject, Signal
from win32com import client
from module.achievement_doc import DocxWriter
from module.achievement_excel import ExcelReader
from module.doc import DocPaper
from module.schema import Course, Student, Question
from utils.function import resource_path
class DTGWorker(QObject):
progress = Signal(int)
finished = Signal()
error = Signal(str, str)
def __init__(
self,
input_student_filepath: str,
input_question_filepath: str,
output_filepath: str,
output_filename: str
):
super().__init__()
self.input_filepath = input_student_filepath
self.input_question_filepath = input_question_filepath
self.output_filepath = output_filepath
self.output_filename = output_filename
def run(self):
try:
course = Course.load_from_xls(self.input_filepath)
students = Student.load_from_xls(self.input_filepath)
questions = Question.load_from_xls(self.input_question_filepath)
d = DocPaper(self.output_filename, template_path=resource_path("template/template.docx"))
for index, student in enumerate(students):
if (p := int((index + 1) / len(students) * 100)) != 100:
self.progress.emit(p)
else:
self.progress.emit(99)
student.pick_question(questions)
d.add_paper(course, student)
d.save(self.output_filepath)
self.progress.emit(100)
word_file = self.output_filepath + "/" + self.output_filename + ".docx"
pdf_file = self.output_filepath + "/" + self.output_filename + ".pdf"
if os.path.exists(pdf_file):
os.remove(pdf_file)
word = client.Dispatch("Word.Application")
doc = word.Documents.Open(word_file)
doc.SaveAs(pdf_file, 17)
doc.Close()
word.Quit()
os.remove(word_file)
os.startfile(pdf_file)
except Exception as _:
error_msg = traceback.format_exc()
self.error.emit("😢 不好出错了", error_msg)
self.progress.emit(-1)
finally:
self.finished.emit()
class ARGWorker(QObject):
finished = Signal()
error = Signal(str, str)
def __init__(self, input_filepath: str, output_filepath: str, output_filename: str, disable_cc: bool = False):
super().__init__()
self.input_filepath = input_filepath
self.output_filepath = output_filepath
self.output_filename = output_filename
self.disable_compatibility_check = disable_cc
def run(self):
try:
excel = ExcelReader(self.input_filepath, self.disable_compatibility_check)
excel.run()
doc = DocxWriter(self.output_filepath, self.output_filename, excel)
doc.write()
except Exception as e:
self.error.emit("😢 不好出错了", str(e))
finally:
self.finished.emit()