合并达成度功能
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
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
|
||||
@@ -11,6 +14,7 @@ from utils.function import resource_path
|
||||
class DTGWorker(QObject):
|
||||
progress = Signal(int)
|
||||
finished = Signal()
|
||||
error = Signal(str, str)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
@@ -26,19 +30,63 @@ class DTGWorker(QObject):
|
||||
self.output_filename = output_filename
|
||||
|
||||
def run(self):
|
||||
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)
|
||||
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)
|
||||
os.startfile(Path(self.output_filepath) / f"{self.output_filename}.docx")
|
||||
self.finished.emit()
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user