private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { ReportConfiguration ReportConfigurationGrade3 = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + _SchoolYear + ".G" + 3); #region 第一次列印時複製前學期的樣板 if (ReportConfigurationGrade3.Template == null) { int prevSy = _SchoolYear - 1; ReportConfiguration prevConfigurationGrade = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + prevSy + ".G" + 3); if (prevConfigurationGrade.Template != null) { ReportConfigurationGrade3.Template = prevConfigurationGrade.Template; } } #endregion Campus.Report.TemplateSettingForm TemplateForm; TemplateForm = new Campus.Report.TemplateSettingForm(ReportConfigurationGrade3.Template == null ? new ReportTemplate(Properties.Resources.Doc1, TemplateType.Word) : ReportConfigurationGrade3.Template, new ReportTemplate(Properties.Resources.Doc1, TemplateType.Word)); //預設名稱 TemplateForm.DefaultFileName = "StudentReportCardTemplateForGrade3"; if (TemplateForm.ShowDialog() == DialogResult.OK) { ReportConfigurationGrade3.Template = TemplateForm.Template; ReportConfigurationGrade3.Save(); } }
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { ReportConfiguration ReportConfigurationGrade1 = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + _SchoolYear + "S" + _Semester + ".G" + 5); #region 第一次列印時複製前學期的樣板 if (ReportConfigurationGrade1.Template == null) { int prevSy, prevSm; if (_Semester == 2) { prevSy = _SchoolYear; prevSm = 1; } else { prevSy = _SchoolYear - 1; prevSm = 2; } ReportConfiguration reportConfigurationGrade5 = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + prevSy + "S" + prevSm + ".G" + 5); if (reportConfigurationGrade5.Template != null) { ReportConfigurationGrade1.Template = reportConfigurationGrade5.Template; } } #endregion Campus.Report.TemplateSettingForm TemplateForm; TemplateForm = new Campus.Report.TemplateSettingForm(ReportConfigurationGrade1.Template == null ? new ReportTemplate(Properties.Resources.Doc1, TemplateType.Word) : ReportConfigurationGrade1.Template, new ReportTemplate(Properties.Resources.Doc1, TemplateType.Word)); //預設名稱 TemplateForm.DefaultFileName = "StudentReportCardTemplateForGrade56"; if (TemplateForm.ShowDialog() == DialogResult.OK) { foreach (var target in new int[] { 5, 6 }) { ReportConfiguration config = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + _SchoolYear + "S" + _Semester + ".G" + target); config.Template = TemplateForm.Template; config.Save(); } } }
private void btnSave_Click(object sender, EventArgs e) { #region 第一次列印時複製前學期的樣板 int prevSy, prevSm; if (_Semester == 2) { prevSy = _SchoolYear; prevSm = 1; } else { prevSy = _SchoolYear - 1; prevSm = 2; } ReportConfiguration reportConfigurationGrade5 = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + prevSy + "S" + prevSm + ".G" + 5); foreach (var target in new int[] { 5, 6 }) { ReportConfiguration reportConfigurationGrade = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + _SchoolYear + "S" + _Semester + ".G" + target); if (reportConfigurationGrade.Template == null) { if (reportConfigurationGrade5.Template != null) { reportConfigurationGrade.Template = reportConfigurationGrade5.Template; reportConfigurationGrade.Save(); } } } ReportConfiguration reportConfigurationGrade7 = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + prevSy + "S" + prevSm + ".G" + 7); foreach (var target in new int[] { 7, 8, 9, 10, 11, 12 }) { ReportConfiguration reportConfigurationGrade = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + _SchoolYear + "S" + _Semester + ".G" + target); if (reportConfigurationGrade.Template == null) { if (reportConfigurationGrade7.Template != null) { reportConfigurationGrade.Template = reportConfigurationGrade7.Template; reportConfigurationGrade.Save(); } } } #endregion #region 列印成績單 int _schoolYear = _SchoolYear; AccessHelper _A = new AccessHelper(); QueryHelper _Q = new QueryHelper(); List <string> _ids = new List <string>(K12.Presentation.NLDPanels.Student.SelectedSource); bool fieldMode = label1.Text != ""; Dictionary <Document, string> documents = new Dictionary <Document, string>(); BackgroundWorker bkw = new BackgroundWorker(); bkw.RunWorkerCompleted += delegate { FISCA.Presentation.MotherForm.SetStatusBarMessage("質性評量成績單產生完成。"); List <string> files = new List <string>(); foreach (var doc in documents.Keys) { SaveFileDialog save = new SaveFileDialog(); save.Title = "另存新檔"; save.FileName = documents[doc]; save.Filter = "Word檔案 (*.docx)|*.docx|Word檔案 (*.doc)|*.doc|所有檔案 (*.*)|*.*"; if (save.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { doc.Save(save.FileName); files.Add(save.FileName); } catch { MessageBox.Show("檔案儲存失敗"); } } } foreach (var file in files) { System.Diagnostics.Process.Start(file); } }; bkw.DoWork += delegate { Dictionary <string, DataRow> dicStudentRow = new Dictionary <string, DataRow>(); DataTable mergeDT = new DataTable(); mergeDT.Columns.Add("系統編號"); mergeDT.Columns.Add("學年"); mergeDT.Columns.Add("學期"); //每個學生增加一個ROW foreach (var id in _ids) { var studentRow = mergeDT.Rows.Add(); studentRow[mergeDT.Columns.IndexOf("系統編號")] = id; studentRow[mergeDT.Columns.IndexOf("學年")] = (_schoolYear + 1911) + "-" + (_schoolYear + 1912); studentRow[mergeDT.Columns.IndexOf("學期")] = _Semester == 1 ? "1st" : "2nd"; dicStudentRow.Add(id, studentRow); } #region 取得學生基本資料(目前) { mergeDT.Columns.Add("姓名"); mergeDT.Columns.Add("EnglishName"); mergeDT.Columns.Add("AKA"); mergeDT.Columns.Add("GivenName"); mergeDT.Columns.Add("MiddleName"); mergeDT.Columns.Add("FamilyName"); mergeDT.Columns.Add("學號"); mergeDT.Columns.Add("年級"); mergeDT.Columns.Add("班級"); mergeDT.Columns.Add("座號"); DataTable dt = _Q.Select(string.Format(@" select student.id, student.name, student.english_name, sx.nick_name, sx.given_name, sx.middle_name, sx.family_name, student.student_number, class.class_name as classname, class.grade_year, student.seat_no from student left outer join class on student.ref_class_id = class.id left outer join $jhcore_bilingual.studentrecordext as sx on sx.ref_student_id::int = student.id where student.id in ({0}); ", string.Join(",", _ids))); foreach (DataRow row in dt.Rows) { var studentRow = dicStudentRow["" + row["id"]]; studentRow[mergeDT.Columns.IndexOf("姓名")] = "" + row["name"]; studentRow[mergeDT.Columns.IndexOf("EnglishName")] = "" + row["english_name"]; studentRow[mergeDT.Columns.IndexOf("AKA")] = "" + row["nick_name"]; studentRow[mergeDT.Columns.IndexOf("GivenName")] = "" + row["given_name"]; studentRow[mergeDT.Columns.IndexOf("MiddleName")] = "" + row["middle_name"]; studentRow[mergeDT.Columns.IndexOf("FamilyName")] = "" + row["family_name"]; studentRow[mergeDT.Columns.IndexOf("學號")] = "" + row["student_number"]; studentRow[mergeDT.Columns.IndexOf("年級")] = "" + row["grade_year"]; studentRow[mergeDT.Columns.IndexOf("班級")] = "" + row["classname"]; studentRow[mergeDT.Columns.IndexOf("座號")] = "" + row["seat_no"]; } } #endregion { #region 班導師資料 mergeDT.Columns.Add("Homeroom/teacherName"); mergeDT.Columns.Add("Homeroom/teacherEngName"); if ("" + _schoolYear == K12.Data.School.DefaultSchoolYear && "" + _Semester == K12.Data.School.DefaultSemester) { //當學期帶導師姓名 foreach (var stuRec in K12.Data.Student.SelectByIDs(_ids)) { var studentRow = dicStudentRow[stuRec.ID]; if (stuRec.Class != null && stuRec.Class.Teacher != null) { studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherName")] = "" + stuRec.Class.Teacher.Name; studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherEngName")] = "" + stuRec.Class.Teacher.Nickname; } } } #endregion #region 取得學生學期歷程資料 if (!mergeDT.Columns.Contains("" + "SchoolDays")) { mergeDT.Columns.Add("" + "SchoolDays");//X學期上課天數 } foreach (SemesterHistoryRecord r in K12.Data.SemesterHistory.SelectByStudentIDs(_ids)) { foreach (SemesterHistoryItem item in r.SemesterHistoryItems) { if (item.SchoolYear == _schoolYear && item.Semester == _Semester) { var studentRow = dicStudentRow[item.RefStudentID]; studentRow[mergeDT.Columns.IndexOf("年級")] = "" + item.GradeYear; studentRow[mergeDT.Columns.IndexOf("班級")] = item.ClassName; studentRow[mergeDT.Columns.IndexOf("座號")] = "" + item.SeatNo; studentRow[mergeDT.Columns.IndexOf("" + "SchoolDays")] = "" + item.SchoolDayCount; if (item.Teacher.IndexOf(' ') > 0) { studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherName")] = item.Teacher.Substring(0, item.Teacher.IndexOf(' ')); studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherEngName")] = item.Teacher.Substring(item.Teacher.IndexOf(' ') + 1); } else { studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherName")] = item.Teacher; studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherEngName")] = ""; } } } } #endregion #region 取得缺課天數 { if (!mergeDT.Columns.Contains("" + "AbsenceCount")) { mergeDT.Columns.Add("" + "AbsenceCount");//X學期缺曠天數 } if (!mergeDT.Columns.Contains("" + "AttendanceCount")) { mergeDT.Columns.Add("" + "AttendanceCount");//X學期到校天數 } //缺曠天數預設值給0 foreach (DataRow studentRow in dicStudentRow.Values) { studentRow[mergeDT.Columns.IndexOf("" + "AbsenceCount")] = "0"; } /* 缺曠改抓學務系統 * DataTable absence_dt = _Q.Select("select id from _udt_table where name='ischool.elementaryabsence'"); * if (absence_dt.Rows.Count > 0) * { * string str = string.Format("select ref_student_id,personal_days + sick_days as absenceCount from $ischool.elementaryabsence where ref_student_id in ({0}) and school_year={1} and semester={2}", string.Join(",", _ids), _schoolYear, _Semester); * absence_dt = _Q.Select(str); * * foreach (DataRow row in absence_dt.Rows) * { * var studentRow = dicStudentRow["" + row["ref_student_id"]]; * string absenceCount = "" + row["absenceCount"]; * studentRow[mergeDT.Columns.IndexOf("" + "AbsenceCount")] = absenceCount; * int sdc, absc; * if (int.TryParse("" + studentRow[mergeDT.Columns.IndexOf("" + "AbsenceCount")], out absc) && * int.TryParse("" + studentRow[mergeDT.Columns.IndexOf("" + "SchoolDays")], out sdc)) * { * studentRow[mergeDT.Columns.IndexOf("" + "AttendanceCount")] = "" + (sdc - absc); * } * } * } */ #region 取得缺曠紀錄 #region 取得 Period List Dictionary <string, string> dicPeriodType = new Dictionary <string, string>(); foreach (K12.Data.PeriodMappingInfo each in K12.Data.PeriodMapping.SelectAll()) { if (!dicPeriodType.ContainsKey(each.Name)) //節次<-->類別 { dicPeriodType.Add(each.Name, each.Type); } } #endregion foreach (var item in K12.BusinessLogic.AutoSummary.Select( _ids , new SchoolYearSemester[] { new SchoolYearSemester() { SchoolYear = _SchoolYear, Semester = _Semester } } , SummaryType.Attendance , true ) ) { //item.AbsenceCounts int count = 0; foreach (var absenceCount in item.AbsenceCounts) { if (absenceCount.PeriodType == "Study Hour") { count += absenceCount.Count; } var studentRow = dicStudentRow["" + item.RefStudentID]; studentRow[mergeDT.Columns.IndexOf("" + "AbsenceCount")] = "" + (count / 7); } } #endregion } #endregion #region 取得修課及授課教師資訊 { DataTable dt = _Q.Select(string.Format(@" select sc_attend.id, sc_attend.ref_student_id, sc_attend.ref_course_id, teacher.teacher_name, teacher.nickname, course.subject from sc_attend left join tc_instruct on tc_instruct.ref_course_id=sc_attend.ref_course_id left join teacher on teacher.id=tc_instruct.ref_teacher_id left join course on course.id=sc_attend.ref_course_id where ref_student_id in ({0}) and course.school_year={1} and course.semester={2} and tc_instruct.sequence = 1 order by sc_attend.ref_course_id ", string.Join(",", _ids), _schoolYear, _Semester)); foreach (DataRow row in dt.Rows) { var studentRow = dicStudentRow["" + row["ref_student_id"]]; string subject_name = ("" + row["subject"]).Trim().Replace(' ', '_').Replace('"', '_'); //科目教師姓名欄位 string insertStrTeacherName = subject_name + "/teacherName"; if (!mergeDT.Columns.Contains(insertStrTeacherName)) { mergeDT.Columns.Add(insertStrTeacherName); } string insertStrTeacherEngName = subject_name + "/teacherEngName"; if (!mergeDT.Columns.Contains(insertStrTeacherEngName)) { mergeDT.Columns.Add(insertStrTeacherEngName); } studentRow[mergeDT.Columns.IndexOf(insertStrTeacherName)] = "" + row["teacher_name"]; studentRow[mergeDT.Columns.IndexOf(insertStrTeacherEngName)] = "" + row["nickname"]; } } #endregion #region 取得定期評量成績 { // string sql = @"select // student.id, // student.english_name, // student.name, // student.student_number, // student.seat_no, // class.class_name, // teacher.teacher_name, // class.grade_year, // course.id as course_id, // course.period as period, // course.credit as credit, // course.subject as subject, // $ischool.subject.list.group as group, // $ischool.subject.list.type as type, // $ischool.subject.list.english_name as subject_english_name, // sc_attend.ref_student_id as student_id, // sce_take.ref_sc_attend_id as sc_attend_id, // sce_take.ref_exam_id as exam_id, // xpath_string(sce_take.extension,'//Score') as score // from sc_attend // join sce_take on sce_take.ref_sc_attend_id=sc_attend.id // join course on course.id=sc_attend.ref_course_id // join $ischool.course.extend on $ischool.course.extend.ref_course_id=course.id // left join student on student.id=sc_attend.ref_student_id // left join class on student.ref_class_id=class.id // left join $ischool.subject.list on course.subject=$ischool.subject.list.name // left join teacher on teacher.id=class.ref_teacher_id // where sc_attend.ref_student_id in ({0}) and course.school_year={1} and course.semester={2}"; // //sce_take.ref_exam_id 1 or 2 // DataTable dt = _Q.Select(string.Format(sql, string.Join(",", _ids), _schoolYear, _Semester)); // foreach (DataRow row in dt.Rows) // { // var studentRow = dicStudentRow["" + row["id"]]; // var subject = ("" + row["subject"]).Trim().Replace(' ', '_').Replace('"', '_'); // string insertStrExamScoreMark = (("" + row["exam_id"]) == "1" ? "MiddleTerm" : "FinalTrem") + "/" + subject + "/ExamScoreMark"; // if (!mergeDT.Columns.Contains(insertStrExamScoreMark)) // mergeDT.Columns.Add(insertStrExamScoreMark); // decimal score = decimal.Parse("0" + row["score"]); // studentRow[mergeDT.Columns.IndexOf(insertStrExamScoreMark)] = CourseGradeB.Tool.GPA.Eval(score).Letter; // } } #endregion #region 取得學期成績 { //foreach (var semesterScoreRecord in K12.Data.SemesterScore.SelectBySchoolYearAndSemester(_ids, _schoolYear, _Semester)) //{ // var studentRow = dicStudentRow[semesterScoreRecord.RefStudentID]; // foreach (var subject in semesterScoreRecord.Subjects.Keys) // { // string insertStrSemsScore = "" + subject.Trim().Replace(' ', '_').Replace('"', '_') + "/SemsScore"; // if (!mergeDT.Columns.Contains(insertStrSemsScore)) // mergeDT.Columns.Add(insertStrSemsScore); // studentRow[mergeDT.Columns.IndexOf(insertStrSemsScore)] = "" + semesterScoreRecord.Subjects[subject].Score; // } // string insertStrSemsScoreAvgMark = "" + "/SemsScoreAvgMark"; // if (!mergeDT.Columns.Contains(insertStrSemsScoreAvgMark)) // mergeDT.Columns.Add(insertStrSemsScoreAvgMark); // if (semesterScoreRecord.AvgScore.HasValue) // studentRow[mergeDT.Columns.IndexOf(insertStrSemsScoreAvgMark)] = CourseGradeB.Tool.GPA.Eval(semesterScoreRecord.AvgScore.Value).Letter; //} } #endregion #region 取得Conduct資料 if (!mergeDT.Columns.Contains("MiddleTermComment")) { mergeDT.Columns.Add("MiddleTermComment");//Q1評語 } if (!mergeDT.Columns.Contains("FinalTremComment")) { mergeDT.Columns.Add("FinalTremComment");//Q2評語 } if (!mergeDT.Columns.Contains("Comment")) { mergeDT.Columns.Add("Comment");//S2評語 } List <ConductRecord> records = _A.Select <ConductRecord>("ref_student_id in (" + string.Join(",", _ids) + ") and school_year=" + _schoolYear + " and semester=" + _Semester); //and not term is null //Dictionary<string, ConductObj> student_conduct = new Dictionary<string, ConductObj>(); foreach (ConductRecord record in records) { var studentRow = dicStudentRow["" + record.RefStudentId]; string subj = record.Subject; if (string.IsNullOrWhiteSpace(subj)) { subj = "Homeroom"; } string term = record.Term; //Comment if (subj == "Homeroom") { if (term == "1") { studentRow[mergeDT.Columns.IndexOf("MiddleTermComment")] = record.Comment; } else if (term == "2") { studentRow[mergeDT.Columns.IndexOf("FinalTremComment")] = record.Comment; } else { studentRow[mergeDT.Columns.IndexOf("Comment")] = record.Comment; } } var _xdoc = new XmlDocument(); if (!string.IsNullOrWhiteSpace(record.Conduct)) { _xdoc.LoadXml(record.Conduct); } foreach (XmlElement elem in _xdoc.SelectNodes("//Conduct")) { string group = elem.GetAttribute("Group"); foreach (XmlElement item in elem.SelectNodes("Item")) { string title = item.GetAttribute("Title"); string grade = item.GetAttribute("Grade"); string insertStrC = "???????"; if (term == "1") { insertStrC = "MiddleTerm/" + subj.Trim().Replace(' ', '_').Replace('"', '_') + "/" + group.Trim().Replace(' ', '_').Replace('"', '_') + "/" + title.Trim().Replace(' ', '_').Replace('"', '_'); } else if (term == "2") { insertStrC = "FinalTrem/" + subj.Trim().Replace(' ', '_').Replace('"', '_') + "/" + group.Trim().Replace(' ', '_').Replace('"', '_') + "/" + title.Trim().Replace(' ', '_').Replace('"', '_'); } else { insertStrC = "" + subj.Trim().Replace(' ', '_').Replace('"', '_') + "/" + group.Trim().Replace(' ', '_').Replace('"', '_') + "/" + title.Trim().Replace(' ', '_').Replace('"', '_'); } if (!mergeDT.Columns.Contains(insertStrC)) { mergeDT.Columns.Add(insertStrC); } studentRow[mergeDT.Columns.IndexOf(insertStrC)] = grade; } } } #endregion } if (fieldMode) { Document doc = new Document(); DocumentBuilder bu = new DocumentBuilder(doc); bu.MoveToDocumentStart(); bu.CellFormat.Borders.LineStyle = LineStyle.Single; bu.CellFormat.VerticalAlignment = CellVerticalAlignment.Center; Table table = bu.StartTable(); foreach (DataColumn col in mergeDT.Columns) { bu.InsertCell(); bu.CellFormat.Width = 15; bu.InsertField("MERGEFIELD " + col.Caption + @" \* MERGEFORMAT", "«.»"); bu.ParagraphFormat.Alignment = ParagraphAlignment.Center; bu.InsertCell(); bu.CellFormat.Width = 125; bu.Write(col.Caption); bu.ParagraphFormat.Alignment = ParagraphAlignment.Left; bu.EndRow(); } table.AllowAutoFit = false; bu.EndTable(); documents.Add(doc, "質性評量成績單合併欄位表.doc"); } else { Dictionary <string, DataTable> gradeDT = new Dictionary <string, DataTable>(); foreach (DataRow row in mergeDT.Rows) { var grade = "" + row["年級"]; if (!gradeDT.ContainsKey(grade)) { var gDT = mergeDT.Clone(); gradeDT.Add(grade, gDT); } gradeDT[grade].ImportRow(row); } foreach (var grade in gradeDT.Keys) { ReportConfiguration reportConfiguration = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + _SchoolYear + "S" + _Semester + ".G" + grade); if (reportConfiguration.Template != null) { var doc = new Document(new MemoryStream(reportConfiguration.Template.ToBinary())); //合併,儲存 doc.MailMerge.Execute(gradeDT[grade]); doc.MailMerge.DeleteFields(); documents.Add(doc, "質性評量成績單(" + grade + "年級) .doc"); } } } }; bkw.RunWorkerAsync(); FISCA.Presentation.MotherForm.SetStatusBarMessage("質性評量成績單產生中..."); this.Close(); #endregion }
private void comboBoxEx1_SelectedIndexChanged(object sender, EventArgs e) { var value = (string)comboBoxEx1.SelectedItem; switch (value) { case "新增": //第一次使用時加入 if (custConfigs.Count == 0) { addCustConfig("畢業證書_普通高中"); ReportConfiguration custConf; custConf = new Campus.Report.ReportConfiguration(configNameRule("畢業證書_普通高中")); custConf.Template = new Campus.Report.ReportTemplate(Properties.Resources.畢業證書_普通高中, Campus.Report.TemplateType.Word); custConf.Save(); custConfigs.Add("畢業證書_普通高中", custConf); comboBoxEx1.Items.Insert(0, "畢業證書_普通高中"); addCustConfig("畢業證書_高職"); custConf = new Campus.Report.ReportConfiguration(configNameRule("畢業證書_高職")); custConf.Template = new Campus.Report.ReportTemplate(Properties.Resources.畢業證書_高職, Campus.Report.TemplateType.Word); custConf.Save(); custConfigs.Add("畢業證書_高職", custConf); comboBoxEx1.Items.Insert(0, "畢業證書_高職"); addCustConfig("補發證明書_普通高中"); custConf = new Campus.Report.ReportConfiguration(configNameRule("補發證明書_普通高中")); custConf.Template = new Campus.Report.ReportTemplate(Properties.Resources.補發證明書_普通高中, Campus.Report.TemplateType.Word); custConf.Save(); custConfigs.Add("補發證明書_普通高中", custConf); comboBoxEx1.Items.Insert(0, "補發證明書_普通高中"); addCustConfig("補發證明書_高職"); custConf = new Campus.Report.ReportConfiguration(configNameRule("補發證明書_高職")); custConf.Template = new Campus.Report.ReportTemplate(Properties.Resources.補發證明書_高職, Campus.Report.TemplateType.Word); custConf.Save(); custConfigs.Add("補發證明書_高職", custConf); comboBoxEx1.Items.Insert(0, "補發證明書_高職"); conf.Save(); comboBoxEx1.SelectedIndex = 0; } else { AddNew input = new AddNew(); if (input.ShowDialog() == DialogResult.OK) { input.name = System.Text.RegularExpressions.Regex.Replace(input.name, @"[\W]+", ""); if (string.IsNullOrWhiteSpace(input.name)) { FISCA.Presentation.Controls.MsgBox.Show("請輸入樣板名稱(中文或英文字母)"); } else if (custConfigs.ContainsKey(input.name)) { FISCA.Presentation.Controls.MsgBox.Show("樣板名稱已存在"); } else { ReportConfiguration tmp_conf = new ReportConfiguration(configNameRule(input.name)); if (input.Template != null) { tmp_conf.Template = new ReportTemplate(input.Template, TemplateType.Word); } tmp_conf.Save(); custConfigs.Add(input.name, tmp_conf); addCustConfig(input.name); comboBoxEx1.Items.Insert(0, input.name); comboBoxEx1.SelectedIndex = 0; } } } break; default: current = value; break; } }
private void btnSave_Click(object sender, EventArgs e) { #region 第一次列印時複製前學期的樣板 for (int i = 1; i <= 4; i++) { ReportConfiguration reportConfigurationGrade = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + _SchoolYear + ".G" + i); if (reportConfigurationGrade.Template == null) { int prevSy = _SchoolYear - 1; ReportConfiguration prevConfigurationGrade = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + prevSy + ".G" + i); if (prevConfigurationGrade.Template != null) { reportConfigurationGrade.Template = prevConfigurationGrade.Template; reportConfigurationGrade.Save(); } } } #endregion #region 列印成績單 int _schoolYear = _SchoolYear; AccessHelper _A = new AccessHelper(); QueryHelper _Q = new QueryHelper(); List <string> _ids = new List <string>(K12.Presentation.NLDPanels.Student.SelectedSource); bool fieldMode = label1.Text != ""; Dictionary <Document, string> documents = new Dictionary <Document, string>(); BackgroundWorker bkw = new BackgroundWorker(); bkw.RunWorkerCompleted += delegate { FISCA.Presentation.MotherForm.SetStatusBarMessage("質性評量成績單產生完成。"); List <string> files = new List <string>(); foreach (var doc in documents.Keys) { SaveFileDialog save = new SaveFileDialog(); save.Title = "另存新檔"; save.FileName = documents[doc]; save.Filter = "Word檔案 (*.docx)|*.docx|Word檔案 (*.doc)|*.doc|所有檔案 (*.*)|*.*"; if (save.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { doc.Save(save.FileName); files.Add(save.FileName); } catch { MessageBox.Show("檔案儲存失敗"); } } } foreach (var file in files) { System.Diagnostics.Process.Start(file); } }; bkw.DoWork += delegate { Dictionary <string, DataRow> dicStudentRow = new Dictionary <string, DataRow>(); DataTable mergeDT = new DataTable(); mergeDT.Columns.Add("系統編號"); mergeDT.Columns.Add("學年"); //每個學生增加一個ROW foreach (var id in _ids) { var studentRow = mergeDT.Rows.Add(); studentRow[mergeDT.Columns.IndexOf("系統編號")] = id; studentRow[mergeDT.Columns.IndexOf("學年")] = (_schoolYear + 1911) + "-" + (_schoolYear + 1912); dicStudentRow.Add(id, studentRow); } #region 取得學生基本資料(目前) { mergeDT.Columns.Add("姓名"); mergeDT.Columns.Add("EnglishName"); mergeDT.Columns.Add("AKA"); mergeDT.Columns.Add("GivenName"); mergeDT.Columns.Add("MiddleName"); mergeDT.Columns.Add("FamilyName"); mergeDT.Columns.Add("學號"); mergeDT.Columns.Add("年級"); mergeDT.Columns.Add("班級"); mergeDT.Columns.Add("座號"); DataTable dt = _Q.Select(string.Format(@" select student.id, student.name, student.english_name, sx.nick_name, sx.given_name, sx.middle_name, sx.family_name, student.student_number, class.class_name as classname, class.grade_year, student.seat_no from student left outer join class on student.ref_class_id = class.id left outer join $jhcore_bilingual.studentrecordext as sx on sx.ref_student_id::int = student.id where student.id in ({0}); ", string.Join(",", _ids))); foreach (DataRow row in dt.Rows) { var studentRow = dicStudentRow["" + row["id"]]; studentRow[mergeDT.Columns.IndexOf("姓名")] = "" + row["name"]; studentRow[mergeDT.Columns.IndexOf("EnglishName")] = "" + row["english_name"]; studentRow[mergeDT.Columns.IndexOf("AKA")] = "" + row["nick_name"]; studentRow[mergeDT.Columns.IndexOf("GivenName")] = "" + row["given_name"]; studentRow[mergeDT.Columns.IndexOf("MiddleName")] = "" + row["middle_name"]; studentRow[mergeDT.Columns.IndexOf("FamilyName")] = "" + row["family_name"]; studentRow[mergeDT.Columns.IndexOf("學號")] = "" + row["student_number"]; studentRow[mergeDT.Columns.IndexOf("年級")] = "" + row["grade_year"]; studentRow[mergeDT.Columns.IndexOf("班級")] = "" + row["classname"]; studentRow[mergeDT.Columns.IndexOf("座號")] = "" + row["seat_no"]; } } #endregion foreach (var semester in new int[] { 1, 2 }) { #region 班導師資料 if (!mergeDT.Columns.Contains("Homeroom/teacherName")) { mergeDT.Columns.Add("Homeroom/teacherName"); } if (!mergeDT.Columns.Contains("Homeroom/teacherEngName")) { mergeDT.Columns.Add("Homeroom/teacherEngName"); } if ("" + _schoolYear == K12.Data.School.DefaultSchoolYear && "" + semester == K12.Data.School.DefaultSemester) { //當學期帶導師姓名 foreach (var stuRec in K12.Data.Student.SelectByIDs(_ids)) { var studentRow = dicStudentRow[stuRec.ID]; if (stuRec.Class != null && stuRec.Class.Teacher != null) { studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherName")] = "" + stuRec.Class.Teacher.Name; studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherEngName")] = "" + stuRec.Class.Teacher.Nickname; } } } #endregion #region 取得學生學期歷程資料 if (!mergeDT.Columns.Contains("S" + semester + "SchoolDays")) { mergeDT.Columns.Add("S" + semester + "SchoolDays");//X學期上課天數 } foreach (SemesterHistoryRecord r in K12.Data.SemesterHistory.SelectByStudentIDs(_ids)) { foreach (SemesterHistoryItem item in r.SemesterHistoryItems) { if (item.SchoolYear == _schoolYear && item.Semester == semester) { var studentRow = dicStudentRow[item.RefStudentID]; studentRow[mergeDT.Columns.IndexOf("年級")] = "" + item.GradeYear; studentRow[mergeDT.Columns.IndexOf("班級")] = item.ClassName; studentRow[mergeDT.Columns.IndexOf("座號")] = "" + item.SeatNo; studentRow[mergeDT.Columns.IndexOf("S" + semester + "SchoolDays")] = "" + item.SchoolDayCount; if (item.Teacher.IndexOf(' ') > 0) { studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherName")] = item.Teacher.Substring(0, item.Teacher.IndexOf(' ')); studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherEngName")] = item.Teacher.Substring(item.Teacher.IndexOf(' ') + 1); } else { studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherName")] = item.Teacher; studentRow[mergeDT.Columns.IndexOf("Homeroom/teacherEngName")] = ""; } } } } #endregion #region 取得缺課天數 { if (!mergeDT.Columns.Contains("S" + semester + "AbsenceCount")) { mergeDT.Columns.Add("S" + semester + "AbsenceCount");//X學期缺曠天數 } if (!mergeDT.Columns.Contains("S" + semester + "AttendanceCount")) { mergeDT.Columns.Add("S" + semester + "AttendanceCount");//X學期到校天數 } //缺曠天數預設值給0 foreach (DataRow studentRow in dicStudentRow.Values) { studentRow[mergeDT.Columns.IndexOf("S" + semester + "AbsenceCount")] = "0"; } DataTable absence_dt = _Q.Select("select id from _udt_table where name='ischool.elementaryabsence'"); if (absence_dt.Rows.Count > 0) { string str = string.Format("select ref_student_id,personal_days + sick_days as absenceCount from $ischool.elementaryabsence where ref_student_id in ({0}) and school_year={1} and semester={2}", string.Join(",", _ids), _schoolYear, semester); absence_dt = _Q.Select(str); foreach (DataRow row in absence_dt.Rows) { var studentRow = dicStudentRow["" + row["ref_student_id"]]; string absenceCount = "" + row["absenceCount"]; studentRow[mergeDT.Columns.IndexOf("S" + semester + "AbsenceCount")] = absenceCount; int sdc, absc; if (int.TryParse("" + studentRow[mergeDT.Columns.IndexOf("S" + semester + "AbsenceCount")], out absc) && int.TryParse("" + studentRow[mergeDT.Columns.IndexOf("S" + semester + "SchoolDays")], out sdc)) { studentRow[mergeDT.Columns.IndexOf("S" + semester + "AttendanceCount")] = "" + (sdc - absc); } } } } #endregion #region 取得修課及授課教師資訊 { DataTable dt = _Q.Select(string.Format(@" select sc_attend.id, sc_attend.ref_student_id, sc_attend.ref_course_id, teacher.teacher_name, teacher.nickname, course.subject from sc_attend left join tc_instruct on tc_instruct.ref_course_id=sc_attend.ref_course_id left join teacher on teacher.id=tc_instruct.ref_teacher_id left join course on course.id=sc_attend.ref_course_id where ref_student_id in ({0}) and course.school_year={1} and course.semester={2} and tc_instruct.sequence = 1 order by sc_attend.ref_course_id ", string.Join(",", _ids), _schoolYear, semester)); foreach (DataRow row in dt.Rows) { var studentRow = dicStudentRow["" + row["ref_student_id"]]; string subject_name = ("" + row["subject"]).FixFieldName(); //科目教師姓名欄位 string insertStrTeacherName = subject_name + "/teacherName"; if (!mergeDT.Columns.Contains(insertStrTeacherName)) { mergeDT.Columns.Add(insertStrTeacherName); } string insertStrTeacherEngName = subject_name + "/teacherEngName"; if (!mergeDT.Columns.Contains(insertStrTeacherEngName)) { mergeDT.Columns.Add(insertStrTeacherEngName); } studentRow[mergeDT.Columns.IndexOf(insertStrTeacherName)] = "" + row["teacher_name"]; studentRow[mergeDT.Columns.IndexOf(insertStrTeacherEngName)] = "" + row["nickname"]; } } #endregion #region 取得定期評量成績 { string sql = @"select student.id, student.english_name, student.name, student.student_number, student.seat_no, class.class_name, teacher.teacher_name, class.grade_year, course.id as course_id, course.period as period, course.credit as credit, course.subject as subject, $ischool.subject.list.group as group, $ischool.subject.list.type as type, $ischool.subject.list.english_name as subject_english_name, sc_attend.ref_student_id as student_id, sce_take.ref_sc_attend_id as sc_attend_id, sce_take.ref_exam_id as exam_id, xpath_string(sce_take.extension,'//Score') as score from sc_attend join sce_take on sce_take.ref_sc_attend_id=sc_attend.id join course on course.id=sc_attend.ref_course_id join $ischool.course.extend on $ischool.course.extend.ref_course_id=course.id left join student on student.id=sc_attend.ref_student_id left join class on student.ref_class_id=class.id left join $ischool.subject.list on course.subject=$ischool.subject.list.name left join teacher on teacher.id=class.ref_teacher_id where sc_attend.ref_student_id in ({0}) and course.school_year={1} and course.semester={2}"; //sce_take.ref_exam_id 1 or 2 DataTable dt = _Q.Select(string.Format(sql, string.Join(",", _ids), _schoolYear, semester)); foreach (DataRow row in dt.Rows) { var studentRow = dicStudentRow["" + row["id"]]; var subject = ("" + row["subject"]).FixFieldName(); string insertStrExamScoreMark = "Q" + ((semester - 1) * 2 + int.Parse("0" + row["exam_id"])) + "/" + subject + "/ExamScoreMark"; if (!mergeDT.Columns.Contains(insertStrExamScoreMark)) { mergeDT.Columns.Add(insertStrExamScoreMark); } decimal score = decimal.Parse("0" + row["score"]); studentRow[mergeDT.Columns.IndexOf(insertStrExamScoreMark)] = CourseGradeB.Tool.GPA.Eval(score).Letter; } } #endregion #region 取得學期成績 { foreach (var semesterScoreRecord in K12.Data.SemesterScore.SelectBySchoolYearAndSemester(_ids, _schoolYear, semester)) { var studentRow = dicStudentRow[semesterScoreRecord.RefStudentID]; foreach (var subject in semesterScoreRecord.Subjects.Keys) { string insertStrSemsScore = "S" + semester + "/" + subject.FixFieldName() + "/SemsScore"; if (!mergeDT.Columns.Contains(insertStrSemsScore)) { mergeDT.Columns.Add(insertStrSemsScore); } studentRow[mergeDT.Columns.IndexOf(insertStrSemsScore)] = "" + semesterScoreRecord.Subjects[subject].Score; } string insertStrSemsScoreAvgMark = "S" + semester + "/SemsScoreAvgMark"; if (!mergeDT.Columns.Contains(insertStrSemsScoreAvgMark)) { mergeDT.Columns.Add(insertStrSemsScoreAvgMark); } if (semesterScoreRecord.AvgScore.HasValue) { studentRow[mergeDT.Columns.IndexOf(insertStrSemsScoreAvgMark)] = CourseGradeB.Tool.GPA.Eval(semesterScoreRecord.AvgScore.Value).Letter; } } } #endregion #region 取得Conduct資料 if (!mergeDT.Columns.Contains("Q1Comment")) { mergeDT.Columns.Add("Q1Comment");//Q1評語 } if (!mergeDT.Columns.Contains("Q2Comment")) { mergeDT.Columns.Add("Q2Comment");//Q2評語 } if (!mergeDT.Columns.Contains("Q3Comment")) { mergeDT.Columns.Add("Q3Comment");//Q3評語 } if (!mergeDT.Columns.Contains("Q4Comment")) { mergeDT.Columns.Add("Q4Comment");//Q4評語 } if (!mergeDT.Columns.Contains("S1Comment")) { mergeDT.Columns.Add("S1Comment");//S1評語 } if (!mergeDT.Columns.Contains("S2Comment")) { mergeDT.Columns.Add("S2Comment");//S2評語 } List <ConductRecord> records = _A.Select <ConductRecord>("ref_student_id in (" + string.Join(",", _ids) + ") and school_year=" + _schoolYear + " and semester=" + semester); //and not term is null //Dictionary<string, ConductObj> student_conduct = new Dictionary<string, ConductObj>(); foreach (ConductRecord record in records) { var studentRow = dicStudentRow["" + record.RefStudentId]; string subj = record.Subject; if (string.IsNullOrWhiteSpace(subj)) { subj = "Homeroom"; } string term = record.Term; //Comment if (subj == "Homeroom") { if (term == "1") { studentRow[mergeDT.Columns.IndexOf(semester == 1 ? "Q1Comment" : "Q3Comment")] = record.Comment; } else if (term == "2") { studentRow[mergeDT.Columns.IndexOf(semester == 1 ? "Q2Comment" : "Q4Comment")] = record.Comment; } else { studentRow[mergeDT.Columns.IndexOf(semester == 1 ? "S1Comment" : "S2Comment")] = record.Comment; } } var _xdoc = new XmlDocument(); if (!string.IsNullOrWhiteSpace(record.Conduct)) { _xdoc.LoadXml(record.Conduct); } #region 變動式合併欄位 {//檢查科目存在 string insertStrGroup = "DynamicCheck/Subject" + "/" + subj.FixFieldName(); if (!mergeDT.Columns.Contains(insertStrGroup)) { mergeDT.Columns.Add(insertStrGroup, typeof(string)); } studentRow[mergeDT.Columns.IndexOf(insertStrGroup)] = "Y"; } #endregion int groupIndex = 0; foreach (XmlElement elem in _xdoc.SelectNodes("//Conduct")) { string group = elem.GetAttribute("Group"); #region 變動式合併欄位 if (elem.GetAttribute("Group") != "Conduct") {//group文字 groupIndex++; string insertStrGroup = "DynamicField" + "/" + subj.FixFieldName() + "/Group/" + groupIndex; if (!mergeDT.Columns.Contains(insertStrGroup)) { mergeDT.Columns.Add(insertStrGroup, typeof(string)); } studentRow[mergeDT.Columns.IndexOf(insertStrGroup)] = group; } #endregion int itemIndex = 0; foreach (XmlElement item in elem.SelectNodes("Item")) { string title = item.GetAttribute("Title"); string grade = item.GetAttribute("Grade"); #region 全固定式合併欄位 { string insertStrC = "???????"; if (term == "1") { insertStrC = "Q" + (semester * 2 - 1) + "/" + subj.FixFieldName() + "/" + group.FixFieldName() + "/" + title.FixFieldName(); } else if (term == "2") { insertStrC = "Q" + (semester * 2) + "/" + subj.FixFieldName() + "/" + group.FixFieldName() + "/" + title.FixFieldName(); } else { insertStrC = "S" + semester + "/" + subj.FixFieldName() + "/" + group.FixFieldName() + "/" + title.FixFieldName(); } if (!mergeDT.Columns.Contains(insertStrC)) { mergeDT.Columns.Add(insertStrC); } studentRow[mergeDT.Columns.IndexOf(insertStrC)] = grade; } #endregion #region 變動式合併欄位 if (elem.GetAttribute("Group") != "Conduct") { {//title文字 itemIndex++; string insertStrGroupItem = "DynamicField" + "/" + subj.FixFieldName() + "/Group/" + groupIndex + "/Item/" + itemIndex; if (!mergeDT.Columns.Contains(insertStrGroupItem)) { mergeDT.Columns.Add(insertStrGroupItem, typeof(string)); } studentRow[mergeDT.Columns.IndexOf(insertStrGroupItem)] = title; } string insertStrC = "???????"; if (term == "1") { insertStrC = "Dynamic" + "/" + "Q" + (semester * 2 - 1) + "/" + subj.FixFieldName() + "/Group/" + groupIndex + "/Item/" + itemIndex; } else if (term == "2") { insertStrC = "Dynamic" + "/" + "Q" + (semester * 2) + "/" + subj.FixFieldName() + "/Group/" + groupIndex + "/Item/" + itemIndex; } else { insertStrC = "Dynamic" + "/" + "S" + semester + "/" + subj.FixFieldName() + "/Group/" + groupIndex + "/Item/" + itemIndex; } if (!mergeDT.Columns.Contains(insertStrC)) { mergeDT.Columns.Add(insertStrC); } studentRow[mergeDT.Columns.IndexOf(insertStrC)] = grade; } #endregion } } } #endregion } if (fieldMode) { List <string> q1List = new List <string>(); List <string> s1List = new List <string>(); List <string> dynamicCheck = new List <string>(); List <string> dynamicField = new List <string>(); List <string> dynamicAnsQ1 = new List <string>(); List <string> dynamicAnsS1 = new List <string>(); foreach (DataColumn col in mergeDT.Columns) { if (col.Caption.StartsWith("Q1")) { q1List.Add(col.Caption); } if (col.Caption.StartsWith("S1")) { s1List.Add(col.Caption); } if (col.Caption.StartsWith("DynamicCheck/")) { dynamicCheck.Add(col.Caption); } if (col.Caption.StartsWith("DynamicField/")) { dynamicField.Add(col.Caption); } if (col.Caption.StartsWith("Dynamic/Q1")) { dynamicAnsQ1.Add(col.Caption); } if (col.Caption.StartsWith("Dynamic/S1")) { dynamicAnsS1.Add(col.Caption); } } foreach (var q1 in q1List) { mergeDT.Columns.Remove(q1); mergeDT.Columns.Add(q1); } foreach (var q1 in q1List) { var key = "Q2" + q1.Substring(2); if (mergeDT.Columns.Contains(key)) { mergeDT.Columns.Remove(key); } mergeDT.Columns.Add(key); } foreach (var q1 in q1List) { var key = "Q3" + q1.Substring(2); if (mergeDT.Columns.Contains(key)) { mergeDT.Columns.Remove(key); } mergeDT.Columns.Add(key); } foreach (var q1 in q1List) { var key = "Q4" + q1.Substring(2); if (mergeDT.Columns.Contains(key)) { mergeDT.Columns.Remove(key); } mergeDT.Columns.Add(key); } foreach (var s1 in s1List) { mergeDT.Columns.Remove(s1); mergeDT.Columns.Add(s1); } foreach (var s1 in s1List) { var key = "S2" + s1.Substring(2); if (mergeDT.Columns.Contains(key)) { mergeDT.Columns.Remove(key); } mergeDT.Columns.Add(key); } dynamicCheck.Sort(); foreach (var df in dynamicCheck) { mergeDT.Columns.Remove(df); mergeDT.Columns.Add(df); } dynamicField.Sort(); foreach (var df in dynamicField) { mergeDT.Columns.Remove(df); mergeDT.Columns.Add(df); } dynamicAnsQ1.Sort(); for (int i = 1; i <= 4; i++) { foreach (var q1 in dynamicAnsQ1) { var key = "Dynamic/Q" + i + q1.Substring(10); if (mergeDT.Columns.Contains(key)) { mergeDT.Columns.Remove(key); } mergeDT.Columns.Add(key); } } dynamicAnsS1.Sort(); for (int i = 1; i <= 2; i++) { foreach (var s1 in dynamicAnsS1) { var key = "Dynamic/S" + i + s1.Substring(10); if (mergeDT.Columns.Contains(key)) { mergeDT.Columns.Remove(key); } mergeDT.Columns.Add(key); } } Document doc = new Document(); DocumentBuilder bu = new DocumentBuilder(doc); bu.MoveToDocumentStart(); bu.CellFormat.Borders.LineStyle = LineStyle.Single; bu.CellFormat.VerticalAlignment = CellVerticalAlignment.Center; Table table = bu.StartTable(); foreach (DataColumn col in mergeDT.Columns) { bu.InsertCell(); bu.CellFormat.Width = 15; bu.InsertField("MERGEFIELD " + col.Caption + @" \* MERGEFORMAT", "«.»"); bu.ParagraphFormat.Alignment = ParagraphAlignment.Center; bu.InsertCell(); bu.CellFormat.Width = 125; bu.Write(col.Caption); bu.ParagraphFormat.Alignment = ParagraphAlignment.Left; bu.EndRow(); } table.AllowAutoFit = false; bu.EndTable(); documents.Add(doc, "質性評量成績單合併欄位表.doc"); } else { Dictionary <string, DataTable> gradeDT = new Dictionary <string, DataTable>(); foreach (DataRow row in mergeDT.Rows) { var grade = "" + row["年級"]; if (!gradeDT.ContainsKey(grade)) { var gDT = mergeDT.Clone(); gradeDT.Add(grade, gDT); } gradeDT[grade].ImportRow(row); } foreach (var grade in gradeDT.Keys) { ReportConfiguration reportConfiguration = new Campus.Report.ReportConfiguration("ibshGradeYearReport.GradeYearReportCard.SY" + _SchoolYear + ".G" + grade); if (reportConfiguration.Template != null) { var doc = new Document(new MemoryStream(reportConfiguration.Template.ToBinary())); foreach (var field in doc.MailMerge.GetFieldNames()) { if ((field.StartsWith("DynamicCheck/") || field.StartsWith("DynamicField/")) && !mergeDT.Columns.Contains(field)) { mergeDT.Columns.Add(field); } } doc.MailMerge.FieldMergingCallback = new MailMerge_MergeField(); //合併,儲存 doc.MailMerge.Execute(gradeDT[grade]); doc.MailMerge.DeleteFields(); documents.Add(doc, "質性評量成績單(" + grade + "年級) .doc"); } } } }; bkw.RunWorkerAsync(); FISCA.Presentation.MotherForm.SetStatusBarMessage("質性評量成績單產生中..."); this.Close(); #endregion }