private void btnRun_Click(object sender, EventArgs e) { string SelectedSchoolYear = "" + cmbSchoolYear.SelectedItem; List<string> SelectedStudentIDs = K12.Presentation.NLDPanels.Student.SelectedSource; if (K12.Data.Utility.Utility.IsNullOrEmpty(SelectedStudentIDs)) { MessageBox.Show("請選取學生!"); return; } if (!string.IsNullOrEmpty(SelectedSchoolYear)) { this.btnPrint.Enabled = false; Task<Document> task = Task<Document>.Factory.StartNew(() => { MemoryStream template = new MemoryStream(this.template); Document doc = new Document(); doc.Sections.Clear(); List<string> keys = new List<string>(); List<object> values = new List<object>(); Dictionary<string, object> mergeKeyValue = new Dictionary<string,object>(); List<Student> Students = new List<Student>(); if (this.title.Contains("9")) Students = DataAccess.GetGrade(SelectedSchoolYear, SelectedStudentIDs, false); else Students = DataAccess.GetGrade(SelectedSchoolYear, SelectedStudentIDs, true); foreach (Student vStudent in Students) { Document dataDoc = new Document(template, "", LoadFormat.Doc, ""); dataDoc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); dataDoc.MailMerge.RemoveEmptyParagraphs = true; mergeKeyValue = vStudent.OutputValue(); dataDoc.MailMerge.Execute(mergeKeyValue.Keys.ToArray(), mergeKeyValue.Values.ToArray()); doc.Sections.Add(doc.ImportNode(dataDoc.Sections[0], true)); } return doc; }); task.ContinueWith((x) => { this.btnPrint.Enabled = true; if (x.Exception != null) MessageBox.Show(x.Exception.InnerException.Message); else Completed(this.TitleText, x.Result); }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); } }
private void btnPrint_Click(object sender, EventArgs e) { string survey_year = this.nudSchoolYear.Value + ""; this.btnPrint.Enabled = false; this.circularProgress.Visible = true; this.circularProgress.IsRunning = true; Task<Document> task = Task<Document>.Factory.StartNew(() => { MemoryStream template = new MemoryStream(this.template); Document doc = new Document(); Document dataDoc = new Document(template, "", LoadFormat.Doc, ""); dataDoc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); dataDoc.MailMerge.RemoveEmptyParagraphs = true; doc.Sections.Clear(); List<string> keys = new List<string>(); List<object> values = new List<object>(); Dictionary<string, object> mergeKeyValue = ApproachStatisticsCalculator .Calculate(survey_year); foreach (string key in mergeKeyValue.Keys) { keys.Add(key); values.Add(mergeKeyValue[key]); } dataDoc.MailMerge.Execute(keys.ToArray(), values.ToArray()); doc.Sections.Add(doc.ImportNode(dataDoc.Sections[0], true)); return doc; }); task.ContinueWith((x) => { this.btnPrint.Enabled = true; this.circularProgress.Visible = false; this.circularProgress.IsRunning = false; if (x.Exception != null) MessageBox.Show(x.Exception.InnerException.Message); else Completed(this.TitleText, x.Result); }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); }
private void btnPrint_Click(object sender, EventArgs e) { string survey_year = this.nudSchoolYear.Value + ""; this.btnPrint.Enabled = false; this.circularProgress.Visible = true; this.circularProgress.IsRunning = true; Task<Dictionary<string, object>> task = Accessor.ApproachStatistics.Execute(int.Parse(survey_year)); task.ContinueWith((x) => { this.btnPrint.Enabled = true; this.circularProgress.Visible = false; this.circularProgress.IsRunning = false; if (x.Exception != null) MessageBox.Show(x.Exception.InnerException.Message); else { MemoryStream template = Accessor.ApproachReportTemplate.Execute(int.Parse(survey_year)); Document doc = new Document(); Document dataDoc = new Document(template, "", LoadFormat.Doc, ""); dataDoc.MailMerge.RemoveEmptyParagraphs = true; doc.Sections.Clear(); List<string> keys = new List<string>(); List<object> values = new List<object>(); Dictionary<string, object> mergeKeyValue = x.Result; foreach (string key in mergeKeyValue.Keys) { keys.Add(key); values.Add(mergeKeyValue[key]); } dataDoc.MailMerge.Execute(keys.ToArray(), values.ToArray()); dataDoc.MailMerge.DeleteFields(); doc.Sections.Add(doc.ImportNode(dataDoc.Sections[0], true)); Completed(survey_year + "學年度國中畢業學生進路調查填報表格", doc); } }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); }
private void btnSubjectSemesterScoreStatistics_Click(object sender, EventArgs e) { this.circularProgress.Visible = true; this.circularProgress.IsRunning = true; this.btnPrint.Enabled = false; int SchoolYear = int.Parse(this.nudSchoolYear.Value + ""); int Semester = int.Parse((this.cboSemester.SelectedItem as EMBACore.DataItems.SemesterItem).Value); Task<Document> task = Task<Document>.Factory.StartNew(() => { MemoryStream template = new MemoryStream(Properties.Resources.EMBA_研究生成績審核表_樣版); Document doc = new Document(); doc.Sections.Clear(); IEnumerable<StudentRecord> Students = this.dicStudents.Values.OrderBy(x => x.StudentNumber.ToLower()); foreach (StudentRecord Student in Students) { UDT.StudentBrief2 StudentBrief2 = new UDT.StudentBrief2(); if (this.dicStudentBrief2.ContainsKey(Student.ID)) StudentBrief2 = this.dicStudentBrief2[Student.ID]; Dictionary<int, UDT.GraduationSubjectList> dicGraduationSubjectLists = new Dictionary<int, UDT.GraduationSubjectList>(); if (this.dicStudentBrief2.ContainsKey(Student.ID)) { if (this.dicGraduationSubjectLists.ContainsKey(StudentBrief2.GraduationRequirementID)) dicGraduationSubjectLists = this.dicGraduationSubjectLists[StudentBrief2.GraduationRequirementID]; } // 非停修生修課記錄:學年度 學期 課號 課程識別碼 課程名稱 string SQL = string.Format(@"Select subject.uid as subject_id, course.school_year, course.semester, subject.name as subject_name From $ischool.emba.scattend_ext as se join course on course.id=se.ref_course_id join student on student.id=se.ref_student_id join $ischool.emba.course_ext as ce on ce.ref_course_id=course.id join $ischool.emba.subject as subject on subject.uid=ce.ref_subject_id where student.id={0} and course.school_year={1} and course.semester={2} order by ce.serial_no", Student.ID, SchoolYear, Semester); DataTable dataTable = Query.Select(SQL); Dictionary<string, dynamic> dicSCAttends = new Dictionary<string, dynamic>(); foreach (DataRow row in dataTable.Rows) { dynamic o = new ExpandoObject(); o.SchoolYear = SchoolYear; o.Semester = Semester; o.SubjectName = row["subject_name"] + ""; o.SubjectID = row["subject_id"] + ""; dicSCAttends.Add(SchoolYear + "-" + Semester + "-" + row["subject_id"] + "", o); } Document eachStudentDoc = new Document(template, "", LoadFormat.Doc, ""); Dictionary<string, object> mergeKeyValue = new Dictionary<string, object>(); #region 學生基本資料 mergeKeyValue.Add("學號", Student.StudentNumber); mergeKeyValue.Add("姓名", Student.Name); UDT.DepartmentGroup DepartmentGroup = new UDT.DepartmentGroup(); if (this.dicStudentBrief2.ContainsKey(Student.ID)) { if (this.dicDepartmentGroups.ContainsKey(this.dicStudentBrief2[Student.ID].DepartmentGroupID.ToString())) DepartmentGroup = this.dicDepartmentGroups[this.dicStudentBrief2[Student.ID].DepartmentGroupID.ToString()]; } mergeKeyValue.Add("系所組別代碼", DepartmentGroup.Code); mergeKeyValue.Add("組別", DepartmentGroup.Name); #endregion mergeKeyValue.Add("學年度", SchoolYear); mergeKeyValue.Add("學期", Semester); List<UDT.SubjectSemesterScore> SubjectSemesterScores = new List<UDT.SubjectSemesterScore>(); if (this.dicSubjectSemesterScores.ContainsKey(Student.ID)) SubjectSemesterScores = this.dicSubjectSemesterScores[Student.ID]; // 重覆修課 Dictionary<int, List<UDT.SubjectSemesterScore>> dicDuplicateSubjectSemesterScores = new Dictionary<int, List<UDT.SubjectSemesterScore>>(); foreach (UDT.SubjectSemesterScore SubjectSemesterScore in SubjectSemesterScores) { // 是否重覆修課 if (!dicDuplicateSubjectSemesterScores.ContainsKey(SubjectSemesterScore.SubjectID)) dicDuplicateSubjectSemesterScores.Add(SubjectSemesterScore.SubjectID, new List<UDT.SubjectSemesterScore>()); dicDuplicateSubjectSemesterScores[SubjectSemesterScore.SubjectID].Add(SubjectSemesterScore); } //mergeKeyValue.Add("抵免紀錄_上學期", SubjectSemesterScores.Where(x => !string.IsNullOrWhiteSpace(x.OffsetCourse)).Where(x => x.Semester == 1).Sum(x => x.Credit)); //mergeKeyValue.Add("抵免紀錄_下學期", SubjectSemesterScores.Where(x => !string.IsNullOrWhiteSpace(x.OffsetCourse)).Where(x => x.Semester == 2).Sum(x => x.Credit)); mergeKeyValue.Add("抵免紀錄", SubjectSemesterScores.Where(x => !string.IsNullOrWhiteSpace(x.OffsetCourse)).Sum(x => x.Credit)); List<UDT.SubjectSemesterScore> SubjectSemesterScores_Current_Semester = new List<UDT.SubjectSemesterScore>(); if (SubjectSemesterScores.Count > 0) SubjectSemesterScores_Current_Semester = SubjectSemesterScores.Where(x=>string.IsNullOrEmpty(x.OffsetCourse)).Where(x => x.SchoolYear.HasValue).Where(x => x.Semester.HasValue).Where(x => (x.SchoolYear.Value == SchoolYear && x.Semester.Value == Semester)).OrderBy(x => x.SchoolYear.Value).ThenBy(x => x.Semester.Value).ToList(); for (int i = 1; i < 11; i++) { mergeKeyValue.Add("本學期必修科目_" + i, string.Empty); mergeKeyValue.Add("本學期必修學分_" + i, string.Empty); } mergeKeyValue.Add("本學期選修總學分", string.Empty); List<dynamic> present_subject_lists = new List<dynamic>(); foreach (string key in dicSCAttends.Keys) { dynamic o = dicSCAttends[key]; string SubjectName = o.SubjectName + ""; int SubjectID = int.Parse(o.SubjectID + ""); dynamic oo = new ExpandoObject(); oo.IsDeptRequired = false; oo.SubjectName = SubjectName; oo.SubjectID = SubjectID; oo.SubjectGroup = string.Empty; if (dicGraduationSubjectLists.ContainsKey(SubjectID)) { UDT.GraduationSubjectList GraduationSubjectList = dicGraduationSubjectLists[SubjectID]; oo.SubjectGroup = GraduationSubjectList.SubjectGroup; if (string.IsNullOrEmpty(GraduationSubjectList.SubjectGroup)) oo.IsRequired = false; else oo.IsRequired = true; if (GraduationSubjectList.IsDeptRequired) { oo.IsDeptRequired = true; } } else { oo.IsRequired = false; } present_subject_lists.Add(oo); } int credit_is_not_requred_total = 0; int credit_current = 0; int index = 0; foreach (dynamic o in present_subject_lists.Where(x => x.IsRequired == false)) { string SubjectID = o.SubjectID + ""; if (this.dicSubjects.ContainsKey(SubjectID)) { credit_is_not_requred_total += this.dicSubjects[SubjectID].Credit; } } foreach(dynamic o in present_subject_lists.Where(x=>x.IsDeptRequired == true)) { index += 1; if (mergeKeyValue.ContainsKey("本學期必修科目_" + index)) mergeKeyValue["本學期必修科目_" + index] = o.SubjectName + ""; string SubjectID = o.SubjectID + ""; if (this.dicSubjects.ContainsKey(SubjectID)) { if (mergeKeyValue.ContainsKey("本學期必修學分_" + index)) mergeKeyValue["本學期必修學分_" + index] = this.dicSubjects[SubjectID].Credit; credit_current += this.dicSubjects[SubjectID].Credit; } } var group_subjects = present_subject_lists.Where(x => x.IsDeptRequired == false).Where(x => !string.IsNullOrEmpty(x.SubjectGroup + "")).GroupBy(x=>x.SubjectGroup); foreach (var groupOfStudents in group_subjects) { index += 1; if (mergeKeyValue.ContainsKey("本學期必修科目_" + index)) mergeKeyValue["本學期必修科目_" + index] = string.Join("或", groupOfStudents.Select(x=>x.SubjectName + "")); List<int> Credits = new List<int>(); foreach(var g in groupOfStudents) { string SubjectID = g.SubjectID + ""; if (this.dicSubjects.ContainsKey(SubjectID)) { if (!Credits.Contains(this.dicSubjects[SubjectID].Credit)) { Credits.Add(this.dicSubjects[SubjectID].Credit); credit_current += this.dicSubjects[SubjectID].Credit; } } } if (mergeKeyValue.ContainsKey("本學期必修學分_" + index)) mergeKeyValue["本學期必修學分_" + index] = string.Join("或", Credits); } //foreach (UDT.SubjectSemesterScore SubjectSemesterScore in SubjectSemesterScores_Current_Semester) //{ // if (!SubjectSemesterScore.IsRequired) // credit_is_not_requred_total += SubjectSemesterScore.Credit; // else // { // index += 1; // if (mergeKeyValue.ContainsKey("本學期必修科目_" + index)) // mergeKeyValue["本學期必修科目_" + index] = SubjectSemesterScore.SubjectName; // if (mergeKeyValue.ContainsKey("本學期必修學分_" + index)) // mergeKeyValue["本學期必修學分_" + index] = SubjectSemesterScore.Credit; // } //} List<UDT.SubjectSemesterScore> SubjectSemesterScores_Not_Current_Semester = new List<UDT.SubjectSemesterScore>(); if (SubjectSemesterScores.Count > 0) SubjectSemesterScores_Not_Current_Semester = SubjectSemesterScores.Where(x => string.IsNullOrEmpty(x.OffsetCourse)).Where(x => x.SchoolYear.HasValue).Where(x => x.Semester.HasValue).Where(x => !(x.SchoolYear.Value == SchoolYear && x.Semester.Value == Semester)).OrderBy(x => x.SchoolYear.Value).ThenBy(x => x.Semester.Value).ToList(); for (int i = 1; i < 8; i++) { mergeKeyValue.Add("修業歷程之學年_" + i, string.Empty); mergeKeyValue.Add("修業歷程之學期_" + i + "_" + 0, string.Empty); mergeKeyValue.Add("修業歷程之學期_" + i + "_" + 1, string.Empty); mergeKeyValue.Add("修業歷程之學期_" + i + "_" + 2, string.Empty); mergeKeyValue.Add("修業歷程之實得學分_" + i + "_" + 0, 0); mergeKeyValue.Add("修業歷程之實得學分_" + i + "_" + 1, 0); mergeKeyValue.Add("修業歷程之實得學分_" + i + "_" + 2, 0); mergeKeyValue.Add("畢業修業歷程之實得學分_" + i + "_" + 0, 0); mergeKeyValue.Add("畢業修業歷程之實得學分_" + i + "_" + 1, 0); mergeKeyValue.Add("畢業修業歷程之實得學分_" + i + "_" + 2, 0); mergeKeyValue.Add("不計入畢業學分_" + i + "_" + 0, 0); mergeKeyValue.Add("不計入畢業學分_" + i + "_" + 1, 0); mergeKeyValue.Add("不計入畢業學分_" + i + "_" + 2, 0); } int idx = 0; int school_year = 0; int credit_total = 0; Dictionary<int, int> dicSchoolYearMappings = new Dictionary<int, int>(); foreach (UDT.SubjectSemesterScore SubjectSemesterScore in SubjectSemesterScores_Not_Current_Semester) { if (school_year != SubjectSemesterScore.SchoolYear.Value) { idx += 1; school_year = SubjectSemesterScore.SchoolYear.Value; } if (mergeKeyValue.ContainsKey("修業歷程之學年_" + idx)) mergeKeyValue["修業歷程之學年_" + idx] = SubjectSemesterScore.SchoolYear + "學年度"; if (mergeKeyValue.ContainsKey("修業歷程之學期_" + idx + "_" + SubjectSemesterScore.Semester.Value)) mergeKeyValue["修業歷程之學期_" + idx + "_" + SubjectSemesterScore.Semester.Value] = EMBACore.DataItems.SemesterItem.GetSemesterByCode(SubjectSemesterScore.Semester + "").Name; if (string.IsNullOrEmpty(SubjectSemesterScore.OffsetCourse) && !SubjectSemesterScore.IsPass) continue; if (mergeKeyValue.ContainsKey("修業歷程之實得學分_" + idx + "_" + SubjectSemesterScore.Semester)) mergeKeyValue["修業歷程之實得學分_" + idx + "_" + SubjectSemesterScore.Semester] = int.Parse(mergeKeyValue["修業歷程之實得學分_" + idx + "_" + SubjectSemesterScore.Semester] + "") + SubjectSemesterScore.Credit; if (mergeKeyValue.ContainsKey("畢業修業歷程之實得學分_" + idx + "_" + SubjectSemesterScore.Semester)) mergeKeyValue["畢業修業歷程之實得學分_" + idx + "_" + SubjectSemesterScore.Semester] = int.Parse(mergeKeyValue["畢業修業歷程之實得學分_" + idx + "_" + SubjectSemesterScore.Semester] + "") + SubjectSemesterScore.Credit; credit_total += SubjectSemesterScore.Credit; if (!dicSchoolYearMappings.ContainsKey(school_year)) dicSchoolYearMappings.Add(school_year, idx); } mergeKeyValue.Add("實得總學分", credit_total + SubjectSemesterScores.Where(x => !string.IsNullOrWhiteSpace(x.OffsetCourse)).Sum(x => x.Credit)); mergeKeyValue.Add("畢業實得總學分", credit_total + SubjectSemesterScores.Where(x => !string.IsNullOrWhiteSpace(x.OffsetCourse)).Sum(x => x.Credit)); mergeKeyValue.Add("應修最低畢業學分數", string.Empty); if (this.dicStudentBrief2.ContainsKey(Student.ID)) { if (this.dicGraduationRequirements.ContainsKey(this.dicStudentBrief2[Student.ID].GraduationRequirementID + "")) mergeKeyValue["應修最低畢業學分數"] = this.dicGraduationRequirements[this.dicStudentBrief2[Student.ID].GraduationRequirementID + ""].RequiredCredit; } DateTime print_date; if (!DateTime.TryParse(this.dtDueDate.Text, out print_date)) print_date = DateTime.Today; mergeKeyValue.Add("列印日期_年", print_date.Year - 1911); mergeKeyValue.Add("列印日期_月", print_date.Month.ToString("00")); mergeKeyValue.Add("列印日期_日", print_date.Day.ToString("00")); // 重覆修課 int total_credit_reduce = 0; foreach (int SubjectID in dicDuplicateSubjectSemesterScores.Keys) { if (dicDuplicateSubjectSemesterScores[SubjectID].Count < 2) continue; List<UDT.SubjectSemesterScore> DuplicateSubjectSemesterScores = dicDuplicateSubjectSemesterScores[SubjectID]; bool init = false; foreach (UDT.SubjectSemesterScore SubjectSemesterScore in DuplicateSubjectSemesterScores.OrderBy(x=>(x.SchoolYear.HasValue ? x.SchoolYear.Value : 0)).ThenBy(x=>(x.Semester.HasValue ? x.Semester.Value : 0))) { if (init) { if (dicSchoolYearMappings.ContainsKey((SubjectSemesterScore.SchoolYear.HasValue ? SubjectSemesterScore.SchoolYear.Value : 0))) { mergeKeyValue["不計入畢業學分_" + dicSchoolYearMappings[(SubjectSemesterScore.SchoolYear.HasValue ? SubjectSemesterScore.SchoolYear.Value : 0)] + "_" + (SubjectSemesterScore.Semester.HasValue ? SubjectSemesterScore.Semester.Value : 0)] = SubjectSemesterScore.Credit; total_credit_reduce += SubjectSemesterScore.Credit; int oCredit = int.Parse(mergeKeyValue["畢業修業歷程之實得學分_" + dicSchoolYearMappings[(SubjectSemesterScore.SchoolYear.HasValue ? SubjectSemesterScore.SchoolYear.Value : 0)] + "_" + (SubjectSemesterScore.Semester.HasValue ? SubjectSemesterScore.Semester.Value : 0)] + ""); mergeKeyValue["畢業修業歷程之實得學分_" + dicSchoolYearMappings[(SubjectSemesterScore.SchoolYear.HasValue ? SubjectSemesterScore.SchoolYear.Value : 0)] + "_" + (SubjectSemesterScore.Semester.HasValue ? SubjectSemesterScore.Semester.Value : 0)] = oCredit - SubjectSemesterScore.Credit; } } init = true; } } mergeKeyValue.Add("不計入畢業總學分", total_credit_reduce); mergeKeyValue["畢業實得總學分"] = int.Parse(mergeKeyValue["畢業實得總學分"] + "") - total_credit_reduce; int lowest_credit = 0; int.TryParse(mergeKeyValue["應修最低畢業學分數"] + "", out lowest_credit); int credit_differ = lowest_credit - int.Parse(mergeKeyValue["畢業實得總學分"] + ""); if (credit_differ > 0) mergeKeyValue["本學期選修總學分"] = credit_differ - credit_current; // credit_is_not_requred_total; else mergeKeyValue["本學期選修總學分"] = 0; eachStudentDoc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); eachStudentDoc.MailMerge.RemoveEmptyParagraphs = true; List<string> keys = new List<string>(); List<object> values = new List<object>(); foreach (string key in mergeKeyValue.Keys) { keys.Add(key); values.Add(mergeKeyValue[key]); } eachStudentDoc.MailMerge.Execute(keys.ToArray(), values.ToArray()); doc.Sections.Add(doc.ImportNode(eachStudentDoc.Sections[0], true)); } return doc; }); task.ContinueWith((x) => { this.circularProgress.Visible = false; this.circularProgress.IsRunning = false; this.btnPrint.Enabled = true; if (x.Exception != null) MessageBox.Show(x.Exception.InnerException.Message); else Completed("畢業生成績審核表", x.Result); }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); }
void _bgWorker_DoWork(object sender, DoWorkEventArgs e) { UDTTransfer _UDTTransfer = new UDTTransfer(); // 清空暫存 table _dtTable.Clear(); _dtTable.Columns.Clear(); _ErrorList.Clear(); // 新增欄位 AddTableSColumn(); Document docTemplae = new Document(); // 檢查所使用樣板 if(_SelectTemplateType == SelectTemplateType.預設) docTemplae = new Document(new MemoryStream(Properties.Resources.輔導資料紀錄表範本)); if (_SelectTemplateType == SelectTemplateType.自訂) docTemplae = _Config.Template.ToDocument(); _bgWorker.ReportProgress(1); // 加入樣板內合併欄位名稱 _TemplateFieldDict.Clear(); foreach (string name in docTemplae.MailMerge.GetFieldNames()) if (!_TemplateFieldDict.ContainsKey(name)) _TemplateFieldDict.Add(name, 1); // word 資料合併 Document doc = new Document(); doc.Sections.Clear(); // 讀取需要資料並建立索引 _StudRecDict.Clear(); foreach (StudentRecord rec in Student.SelectByIDs(_StudentIDList)) _StudRecDict.Add(rec.ID, rec); // 學習歷程 _SemesterHistoryRecordDict.Clear(); foreach (SemesterHistoryRecord rec in SemesterHistory.SelectByStudentIDs(_StudentIDList)) { if (!_SemesterHistoryRecordDict.ContainsKey(rec.RefStudentID)) // 排序 rec.SemesterHistoryItems = (from data in rec.SemesterHistoryItems orderby data.SchoolYear, data.Semester select data).ToList(); _SemesterHistoryRecordDict.Add(rec.RefStudentID, rec); } // 建立地址 _AddressRecordDict.Clear(); foreach (AddressRecord rec in Address.SelectByStudentIDs(_StudentIDList)) _AddressRecordDict.Add(rec.RefStudentID, rec); // 建立電話 _PhoneRecordDict.Clear(); foreach (PhoneRecord rec in Phone.SelectByStudentIDs(_StudentIDList)) _PhoneRecordDict.Add(rec.RefStudentID, rec); // 建立異動 _UpdateRecordRecordDict.Clear(); foreach (UpdateRecordRecord rec in UpdateRecord.SelectByStudentIDs(_StudentIDList)) { if (!_UpdateRecordRecordDict.ContainsKey(rec.StudentID)) _UpdateRecordRecordDict.Add(rec.StudentID, new List<UpdateRecordRecord>()); _UpdateRecordRecordDict[rec.StudentID].Add(rec); } _UpdateRecordRecordInfoDict.Clear(); _UpdateRecordRecordInfoDict = Utility.GetUpdateRecordInfo(_StudentIDList); // 建立AutoSummary _AutoSummaryRecordDict.Clear(); foreach (K12.BusinessLogic.AutoSummaryRecord rec in K12.BusinessLogic.AutoSummary.Select(_StudentIDList, null)) { if (!_AutoSummaryRecordDict.ContainsKey(rec.RefStudentID)) _AutoSummaryRecordDict.Add(rec.RefStudentID, new List<K12.BusinessLogic.AutoSummaryRecord>()); _AutoSummaryRecordDict[rec.RefStudentID].Add(rec); } // 建立文字評量 _StudentTextScoreDict.Clear(); _StudentTextScoreDict = Utility.GetABCard_StudentTextScoreDict(_StudentIDList); //// 建立缺曠 //_AttendanceRecordDict.Clear(); //foreach (AttendanceRecord rec in Attendance.SelectByStudentIDs(_StudentIDList)) //{ // if (!_AttendanceRecordDict.ContainsKey(rec.RefStudentID)) // _AttendanceRecordDict.Add(rec.RefStudentID, new List<AttendanceRecord>()); // _AttendanceRecordDict[rec.RefStudentID].Add(rec); //} // 學期 _SemesterScoreRecordDict.Clear(); foreach (SemesterScoreRecord data in SemesterScore.SelectByStudentIDs(_StudentIDList)) { if (!_SemesterScoreRecordDict.ContainsKey(data.RefStudentID)) _SemesterScoreRecordDict.Add(data.RefStudentID,new List<SemesterScoreRecord> ()); _SemesterScoreRecordDict[data.RefStudentID].Add(data); } _SemesterDomainScoreDict.Clear(); // 國中 _SemesterDomainScoreDict = Utility.GetSemeterDomainScoreByStudentIDList(_StudentIDList); // 高中 _SemesterEnrtyScoreDict = Utility.GetSemeterEntryScoreByStudentIDList(_StudentIDList); _SemesterEnrtyScoreSchoolYearDict = Utility.GetSemeterSchoolYearScoreByStudentIDList(_StudentIDList); // 國中畢業成績 _GradeScoreDict.Clear(); _GradeScoreDict = Utility.GetStudGraduateDictJH(_StudentIDList); // 高中畢業 _GradeScoreSHDict.Clear(); _GradeScoreSHDict = Utility.GetGradeScoreSHByStudentIDList(_StudentIDList); // 建立獎懲明細 _DisciplineRecordDict.Clear(); foreach (DisciplineRecord rec in Discipline.SelectByStudentIDs(_StudentIDList)) { if(!_DisciplineRecordDict.ContainsKey(rec.RefStudentID)) _DisciplineRecordDict.Add(rec.RefStudentID, new List<DisciplineRecord>()); _DisciplineRecordDict[rec.RefStudentID].Add(rec); } // 入學照片 _FreshmanPhotoDict.Clear(); _FreshmanPhotoDict = K12.Data.Photo.SelectFreshmanPhoto(_StudentIDList); // 畢業照片 _GraduatePhotoDict.Clear(); _GraduatePhotoDict = K12.Data.Photo.SelectGraduatePhoto(_StudentIDList); // 學校名稱 string SchoolName = K12.Data.School.ChineseName; // 輔導資料 // 建立心理測驗 _QuizDefDict.Clear(); foreach(UDT_QuizDef da in _UDTTransfer.GetAllQuizData()) { int id=int.Parse(da.UID); _QuizDefDict.Add(id, da); } _StudQuizDataDict.Clear(); foreach (UDT_StudQuizDataDef data in _UDTTransfer.GetStudQuizDataByStudentIDList(_StudentIDList)) { string sid = data.StudentID.ToString(); if (!_StudQuizDataDict.ContainsKey(sid)) _StudQuizDataDict.Add(sid, new List<UDT_StudQuizDataDef>()); _StudQuizDataDict[sid].Add(data); } // 建立晤談記錄 _CounselStudentInterviewRecordDict.Clear(); foreach (UDT_CounselStudentInterviewRecordDef data in _UDTTransfer.GetCounselStudentInterviewRecordByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_CounselStudentInterviewRecordDict.ContainsKey(key)) _CounselStudentInterviewRecordDict.Add(key, new List<UDT_CounselStudentInterviewRecordDef>()); _CounselStudentInterviewRecordDict[key].Add(data); } // 個案會議 _CounselCaseMeetingRecordDict.Clear(); foreach (UDT_CounselCaseMeetingRecordDef data in _UDTTransfer.GetCaseMeetingRecordListByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_CounselCaseMeetingRecordDict.ContainsKey(key)) _CounselCaseMeetingRecordDict.Add(key, new List<UDT_CounselCaseMeetingRecordDef>()); _CounselCaseMeetingRecordDict[key].Add(data); } // 優先關懷 _CounselCareRecordDict.Clear(); foreach (UDT_CounselCareRecordDef data in _UDTTransfer.GetCareRecordsByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_CounselCareRecordDict.ContainsKey(key)) _CounselCareRecordDict.Add(key, new List<UDT_CounselCareRecordDef>()); _CounselCareRecordDict[key].Add(data); } // 綜合紀錄表-單值 _SingleRecordDict.Clear(); foreach (UDTSingleRecordDef data in UDTTransfer.ABUDTSingleRecordSelectByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_SingleRecordDict.ContainsKey(key)) _SingleRecordDict.Add(key, new List<UDTSingleRecordDef>()); _SingleRecordDict[key].Add(data); } // 綜合紀錄表-多值 _MultipleRecordDict.Clear(); foreach (UDTMultipleRecordDef data in UDTTransfer.ABUDTMultipleRecordSelectByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_MultipleRecordDict.ContainsKey(key)) _MultipleRecordDict.Add(key, new List<UDTMultipleRecordDef>()); _MultipleRecordDict[key].Add(data); } // 綜合紀錄表-學期 _SemesterDataDict.Clear(); foreach (UDTSemesterDataDef data in UDTTransfer.ABUDTSemesterDataSelectByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_SemesterDataDict.ContainsKey(key)) _SemesterDataDict.Add(key, new List<UDTSemesterDataDef>()); _SemesterDataDict[key].Add(data); } // 綜合紀錄表-學年 _YearlyDataDict.Clear(); foreach (UDTYearlyDataDef data in UDTTransfer.ABUDTYearlyDataSelectByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_YearlyDataDict.ContainsKey(key)) _YearlyDataDict.Add(key, new List<UDTYearlyDataDef>()); _YearlyDataDict[key].Add(data); } // 綜合紀錄表-直系血親 _RelativeDict.Clear(); foreach (UDTRelativeDef data in UDTTransfer.ABUDTRelativeSelectByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_RelativeDict.ContainsKey(key)) _RelativeDict.Add(key, new List<UDTRelativeDef>()); _RelativeDict[key].Add(data); } // 綜合紀錄表-兄弟姊妹 _SiblingDict.Clear(); foreach (UDTSiblingDef data in UDTTransfer.ABUDTSiblingSelectByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_SiblingDict.ContainsKey(key)) _SiblingDict.Add(key, new List<UDTSiblingDef>()); _SiblingDict[key].Add(data); } // 綜合紀錄表-優先順序 _PriorityDataDict.Clear(); foreach (UDTPriorityDataDef data in UDTTransfer.ABUDTPriorityDataSelectByStudentIDList(_StudentIDList)) { string key = data.StudentID.ToString(); if (!_PriorityDataDict.ContainsKey(key)) _PriorityDataDict.Add(key, new List<UDTPriorityDataDef>()); _PriorityDataDict[key].Add(data); } _bgWorker.ReportProgress(30); // 儲存獎懲明細使用 StringBuilder sbDisciplineRecord = new StringBuilder(); // 開始填入資料 int idx = 1; foreach (string StudID in _StudentIDList) { _ErrMsg1 = ""; DataRow row = _dtTable.NewRow(); row["學校名稱"] = SchoolName; row["姓名"] = ""; row["性別"] = ""; row["學號"] = ""; row["身分證號"] = ""; row["生日"] = ""; row["生日2"] = ""; row["出生地"] = ""; if (_StudRecDict.ContainsKey(StudID)) { _ErrMsg1=_StudRecDict[StudID].Name+":"; row["姓名"] = _StudRecDict[StudID].Name; row["性別"] = _StudRecDict[StudID].Gender; row["學號"] = _StudRecDict[StudID].StudentNumber; row["身分證號"] = _StudRecDict[StudID].IDNumber; if (_StudRecDict[StudID].Birthday.HasValue) { row["生日"] = _StudRecDict[StudID].Birthday.Value.ToShortDateString(); // 100/1/1 row["生日2"] = (_StudRecDict[StudID].Birthday.Value.Year - 1911) + "/" + _StudRecDict[StudID].Birthday.Value.Month + "/" + _StudRecDict[StudID].Birthday.Value.Day; } row["出生地"] = _StudRecDict[StudID].BirthPlace; } row["入學照片"] = ""; row["入學照片2"] = ""; if (_FreshmanPhotoDict.ContainsKey(StudID)) { row["入學照片"] = _FreshmanPhotoDict[StudID]; row["入學照片2"] = _FreshmanPhotoDict[StudID]; } if(_GraduatePhotoDict.ContainsKey(StudID)) { row["畢業照片"] = _GraduatePhotoDict[StudID]; row["畢業照片2"] = _GraduatePhotoDict[StudID]; } row["戶籍地址"] = ""; row["聯絡地址"] = ""; row["戶籍電話"] = ""; row["聯絡電話"] = ""; if (_AddressRecordDict.ContainsKey(StudID)) { row["戶籍地址"] = _AddressRecordDict[StudID].PermanentAddress; row["聯絡地址"] = _AddressRecordDict[StudID].MailingAddress; } if (_PhoneRecordDict.ContainsKey(StudID)) { row["戶籍電話"] = _PhoneRecordDict[StudID].Permanent; row["聯絡電話"] = _PhoneRecordDict[StudID].Contact; } idx = 1; // 學習歷程 foreach (SemesterHistoryItem item in _SemesterHistoryRecordDict[StudID].SemesterHistoryItems) { // 檢查料是否超過可合併欄位 ChechMapFieldName("學習歷程_學年度", idx); ChechMapFieldName("學習歷程_學期", idx); ChechMapFieldName("學習歷程_班級", idx); ChechMapFieldName("學習歷程_班導師", idx); row["學習歷程_學年度" + idx] = item.SchoolYear; row["學習歷程_學期" + idx] = item.Semester; row["學習歷程_班級" + idx] = item.ClassName; row["學習歷程_班導師" + idx] = item.Teacher; idx++; } row["入學年月"] = ""; row["入學學校"] = ""; row["畢業年月"] = ""; row["學籍核准文號"] = ""; row["畢業證書字號"] = ""; idx = 1; // 異動高中 if (_UpdateRecordRecordDict.ContainsKey(StudID) && _UpdateRecordRecordDict[StudID].Count>0) { DateTime dtLast = DateTime.MinValue; int lastUID = 0; foreach (UpdateRecordRecord rec in _UpdateRecordRecordDict[StudID]) { if (rec.UpdateCode.Length < 3) continue; int code = int.Parse(rec.UpdateCode); DateTime dt = DateTime.Parse(rec.UpdateDate); // 新生 if (code < 100) { row["入學年月"] = dt.Year + string.Format("{0:00}", dt.Month); if (_UpdateRecordRecordInfoDict[rec.ID].Element("GraduateSchool") != null) row["入學學校"] = _UpdateRecordRecordInfoDict[rec.ID].Element("GraduateSchool").Value; // 畢 if(row["學籍核准文號"].ToString()=="") row["學籍核准文號"] = rec.ADNumber; //row["入學學校"] = rec.; // 畢業國中 } else if (code == 501) { // 畢業 row["畢業年月"] = dt.Year + string.Format("{0:00}", dt.Month); //row["畢業證書字號"] = rec.GraduateCertificateNumber; } else { // 找最後一筆 DateTime dtL; if (DateTime.TryParse(rec.LastADDate, out dtL)) { if (dtLast == null) dtLast = dtL; int uid = int.Parse(rec.ID); if (dtL >=dtLast) { if (uid > lastUID) { row["學籍核准文號"] = rec.LastADNumber; dtLast = dtL; lastUID = uid; } } } // 檢查料是否超過可合併欄位 ChechMapFieldName("異動日期", idx); ChechMapFieldName("異動原因", idx); row["異動日期" + idx] = dt.ToShortDateString(); row["異動原因" + idx] = rec.UpdateDescription; idx++; } } } // 異動國中 if (_UpdateRecordRecordDict.ContainsKey(StudID) && _UpdateRecordRecordDict[StudID].Count > 0) { DateTime dtLast1 = DateTime.MinValue; int lastUID1=0; foreach (UpdateRecordRecord rec in _UpdateRecordRecordDict[StudID]) { if (rec.UpdateCode.Length > 1) continue; int code = int.Parse(rec.UpdateCode); DateTime dt = DateTime.Parse(rec.UpdateDate); // 新生 if (code == 1) { if (_UpdateRecordRecordInfoDict.ContainsKey(rec.ID)) { if (_UpdateRecordRecordInfoDict[rec.ID].Element("EnrollmentSchoolYear") != null) row["入學年月"] = _UpdateRecordRecordInfoDict[rec.ID].Element("EnrollmentSchoolYear").Value; if (_UpdateRecordRecordInfoDict[rec.ID].Element("GraduateSchool") != null) row["入學學校"] = _UpdateRecordRecordInfoDict[rec.ID].Element("GraduateSchool").Value; // 畢 if (row["學籍核准文號"].ToString() == "") row["學籍核准文號"] = rec.ADNumber; } } else if (code == 2) { // 畢業 if (_UpdateRecordRecordInfoDict.ContainsKey(rec.ID)) { if (_UpdateRecordRecordInfoDict[rec.ID].Element("GraduateSchoolYear") != null) row["畢業年月"] = _UpdateRecordRecordInfoDict[rec.ID].Element("GraduateSchoolYear").Value; if (_UpdateRecordRecordInfoDict[rec.ID].Element("GraduateCertificateNumber") != null) row["畢業證書字號"] = _UpdateRecordRecordInfoDict[rec.ID].Element("GraduateCertificateNumber").Value; } //row["畢業年月"] = rec.GraduateSchoolYear; //row["畢業證書字號"] = rec.GraduateCertificateNumber; } else { //// 找最後一筆 //DateTime dtL; //if (DateTime.TryParse(rec.LastADDate, out dtL)) //{ // if (dtLast1 == null) // dtLast1 = dtL; // if (dtL >= dtLast1) // { // row["學籍核准文號"] = rec.LastADNumber; // dtLast1 = dtL; // } //} // 檢查料是否超過可合併欄位 ChechMapFieldName("異動日期", idx); ChechMapFieldName("異動原因", idx); row["異動日期" + idx] = dt.ToShortDateString(); row["異動原因" + idx] = rec.UpdateDescription; idx++; } // 找最後一筆 DateTime dtL; if (DateTime.TryParse(rec.LastADDate, out dtL)) { int uid=int.Parse(rec.ID); if (dtLast1 == null) dtLast1 = dtL; if (dtL >= dtLast1) { if (uid > lastUID1) { row["學籍核准文號"] = rec.LastADNumber; dtLast1 = dtL; lastUID1 = uid; } } } } } if (_SemesterScoreRecordDict.ContainsKey(StudID)) { List<SemesterScoreRecord> dataList = (from da in _SemesterScoreRecordDict[StudID] orderby da.SchoolYear, da.Semester select da).ToList(); int i = 1; foreach (SemesterScoreRecord rec in dataList) { // 國中成績 if (_SemesterDomainScoreDict.ContainsKey(rec.ID)) { // 檢查料是否超過可合併欄位 ChechMapFieldName("學年學期", i); ChechMapFieldName("學期成績", i); List<string> strList = new List<string>(); row["學年學期" + i] = rec.SchoolYear + "學年第" + rec.Semester + "學期"; if (_SemesterDomainScoreDict[rec.ID].Element("Domains") != null) { foreach (XElement elm in _SemesterDomainScoreDict[rec.ID].Element("Domains").Elements("Domain")) { string str = elm.Attribute("領域").Value + ":" + elm.Attribute("成績").Value; strList.Add(str); } } if (strList.Count > 0) row["學期成績" + i] = string.Join(",", strList.ToArray()); i++; } } } // 高中分項 if (_SemesterEnrtyScoreSchoolYearDict.ContainsKey(StudID)) { List<AB_SchoolYearSemesterIdx> dataList = (from da in _SemesterEnrtyScoreSchoolYearDict[StudID] orderby da.SchoolYear, da.Semester select da).ToList(); int i = 1; foreach (AB_SchoolYearSemesterIdx rec in dataList) { if (_SemesterEnrtyScoreDict.ContainsKey(rec.id)) { if (_SemesterEnrtyScoreDict[rec.id].Elements("Entry").Count() > 0) { // 檢查料是否超過可合併欄位 ChechMapFieldName("學年學期", i); ChechMapFieldName("學期成績", i); List<string> strList = new List<string>(); row["學年學期" + i] = rec.SchoolYear + "學年第" + rec.Semester + "學期"; foreach (XElement elm in _SemesterEnrtyScoreDict[rec.id].Elements("Entry")) { string str = elm.Attribute("分項").Value + ":" + elm.Attribute("成績").Value; strList.Add(str); } if (strList.Count > 0) row["學期成績" + i] = string.Join(",", strList.ToArray()); i++; } } } } // 國中畢業成績 if (_GradeScoreDict.ContainsKey(StudID)) { if (_GradeScoreDict[StudID].Count > 0) { List<string> strList = new List<string>(); foreach (KeyValuePair<string, decimal?> data in _GradeScoreDict[StudID]) { if (data.Value.HasValue) strList.Add(data.Key + ":" + data.Value.Value); } row["畢業成績"] = string.Join(",", strList.ToArray()); } } // 高中畢業成績 if (_GradeScoreSHDict.ContainsKey(StudID)) { if (_GradeScoreSHDict[StudID].Elements("EntryScore").Count() > 0) { List<string> strList = new List<string>(); foreach (XElement elm in _GradeScoreSHDict[StudID].Elements("EntryScore")) { if (elm.Attribute("Entry").Value == "德行") continue; string str = elm.Attribute("Entry").Value + ":" + elm.Attribute("Score").Value; strList.Add(str); } row["畢業成績"] = string.Join(",", strList.ToArray()); } } row["導師評語"] = ""; // 文字評量 if (_StudentTextScoreDict.ContainsKey(StudID)) { List<string> strList = new List<string>(); foreach (ABCard_StudentTextScore sts in _StudentTextScoreDict[StudID]) { string str = ""; switch (sts.GradeYear) { case 1: str = "一"; break; case 2: str = "二"; break; case 3: str = "三"; break; case 4: str = "四"; break; case 5: str = "五"; break; case 6: str = "六"; break; case 7: str = "一"; break; case 8: str = "二"; break; case 9: str = "三"; break; } if (str != "") { if (sts.Semester == 1) str += "上:"; if (sts.Semester == 2) str += "下:"; strList.Add(str + sts.sb_Comment + sts.DailyLifeRecommend); } } if (strList.Count > 0) row["導師評語"] = string.Join("\n", strList.ToArray()); } // 處理AutoSummary if (_AutoSummaryRecordDict.ContainsKey(StudID)) { List<K12.BusinessLogic.AutoSummaryRecord> dataList = (from da in _AutoSummaryRecordDict[StudID] orderby da.SchoolYear, da.Semester select da).ToList(); int i=1; foreach (K12.BusinessLogic.AutoSummaryRecord data in dataList) { List<string> strList = new List<string> (); foreach (K12.BusinessLogic.AbsenceCountRecord rec in data.AbsenceCounts) strList.Add(rec.PeriodType+":"+rec.Name + rec.Count + "節"); if (strList.Count > 0) { // 檢查料是否超過可合併欄位 ChechMapFieldName("缺曠統計", i); row["缺曠統計" + i] =data.SchoolYear+"學年第"+data.Semester+"學期:"+ string.Join(",", strList.ToArray()); i++; } } } // 獎懲 if (_DisciplineRecordDict.ContainsKey(StudID)) { sbDisciplineRecord.Clear(); int i=1,ia = 1,ib=1; List<DisciplineRecord> dataList = (from da in _DisciplineRecordDict[StudID] orderby da.OccurDate select da).ToList(); foreach (DisciplineRecord data in dataList) { string str = ""; // 檢查料是否超過可合併欄位 if (!_TemplateFieldDict.ContainsKey("獎懲明細")) { ChechMapFieldName("獎懲日期", i); ChechMapFieldName("獎懲類別支數", i); ChechMapFieldName("獎懲事由", i); } string spstr1 = ""; string spstr2 = ""; string spstr3 = ""; if (data.MeritFlag == "0" || data.MeritFlag == "2") { str = ""; if (data.DemeritA.HasValue && data.DemeritA.Value>0) str += "大過 " + data.DemeritA.Value; if (data.DemeritB.HasValue && data.DemeritB.Value>0) str += "小過 " + data.DemeritB.Value; if (data.DemeritC.HasValue && data.DemeritC.Value>0) str += "警告 " + data.DemeritC.Value; row["懲戒日期" + ia] = data.OccurDate.ToShortDateString(); row["懲戒類別支數" + ia] = str; row["懲戒事由" + ia] = data.Reason; row["獎懲日期" + i] = data.OccurDate.ToShortDateString(); row["獎懲類別支數" + i] = str; row["獎懲事由" + i] = data.Reason; spstr1 = data.OccurDate.ToShortDateString(); spstr2 = str; spstr3 = data.Reason; if (data.MeritFlag == "2") { row["懲戒類別支數" + ia] = "留校察看"; row["獎懲類別支數" + i] = "留校察看"; spstr2 = "留校察看"; } if (data.ClearDate.HasValue) { row["懲戒日期" + ia] = data.ClearDate.Value.ToShortDateString(); row["懲戒類別支數" + ia] = "銷過"; row["懲戒事由" + ia] = data.ClearReason; row["獎懲日期" + i] = data.ClearDate.Value.ToShortDateString(); row["獎懲類別支數" + i] = "銷過"; row["獎懲事由" + i] = data.ClearReason; spstr1 = data.ClearDate.Value.ToShortDateString(); spstr2 = "銷過"; spstr3 = data.ClearReason; } i++; ia++; } if (data.MeritFlag == "1") { str = ""; if (data.MeritA.HasValue && data.MeritA.Value >0) str += "大功 " + data.MeritA.Value; if (data.MeritB.HasValue && data.MeritB.Value>0) str += "小功 " + data.MeritB.Value; if (data.MeritC.HasValue && data.MeritC.Value >0) str += "嘉獎 " + data.MeritC.Value; row["獎勵日期" + ib] = data.OccurDate.ToShortDateString(); row["獎勵類別支數" + ib] = str; row["獎勵事由" + ib] = data.Reason; row["獎懲日期" + i] = data.OccurDate.ToShortDateString(); row["獎懲類別支數" + i] = str; row["獎懲事由" + i] = data.Reason; spstr1 = data.OccurDate.ToShortDateString(); spstr2 = str; spstr3 = data.Reason; i++; ib++; } sbDisciplineRecord.AppendLine(spstr1 + " " + spstr2 + " " + spstr3); } row["獎懲明細"] = sbDisciplineRecord.ToString(); } // 單值 if (_SingleRecordDict.ContainsKey(StudID)) { foreach (UDTSingleRecordDef data in _SingleRecordDict[StudID]) { switch (data.Key) { case "本人概況_血型": row["血型"] = data.Data; break; case "本人概況_宗教": row["宗教"] = data.Data; break; case "家庭狀況_監護人_姓名": row["監護人_姓名"] = data.Data; break; case "家庭狀況_監護人_關係": row["監護人_關係"] = data.Data; break; case "家庭狀況_監護人_通訊地址": row["監護人_通訊地址"] = data.Data; break; case "家庭狀況_監護人_電話": row["監護人_電話"] = data.Data; break; case "自傳_家中最了解我的人": row["家中最了解我的人"] = data.Data; break; case "自傳_常指導我做功課的人": row["常指導我做功課的人"] = data.Data; break; case "自傳_讀過且印象最深刻的課外書": row["讀過且印象最深刻的課外書"] = data.Data; break; case "自傳_喜歡的人": row["喜歡的人"] = data.Data; break; case "自傳_喜歡的人_因為": row["喜歡的人_因為"] = data.Data; break; case "自傳_最要好的朋友": row["最要好的朋友"] = data.Data; break; case "自傳_他是怎樣的人": row["他是怎樣的人"] = data.Data; break; case "自傳_最喜歡做的事": row["最喜歡做的事"] = data.Data; break; case "自傳_最喜歡做的事_因為":row["最喜歡做的事_因為"] = data.Data; break; case "自傳_最不喜歡做的事": row["最不喜歡做的事"] = data.Data; break; case "自傳_最不喜歡做的事_因為": row["最不喜歡做的事_因為"] = data.Data; break; case "自傳_國中時的學校生活": row["國中時的學校生活"] = data.Data; break; case "自傳_最快樂的回憶": row["最快樂的回憶"] = data.Data; break; case "自傳_最痛苦的回憶": row["最痛苦的回憶"] = data.Data; break; case "自傳_最足以描述自己的幾句話": row["最足以描述自己的幾句話"] = data.Data; break; case "自我認識_需要改進的地方_1": row["自我認識_需要改進的地方_1"] = data.Data; break; case "自我認識_優點_1": row["自我認識_優點_1"] = data.Data; break; case "自我認識_個性_1": row["自我認識_個性_1"] = data.Data; break; case "自我認識_需要改進的地方_2": row["自我認識_需要改進的地方_2"] = data.Data; break; case "自我認識_優點_2": row["自我認識_優點_2"] = data.Data; break; case "自我認識_個性_2": row["自我認識_個性_2"] = data.Data; break; case "自我認識_需要改進的地方_3": row["自我認識_需要改進的地方_3"] = data.Data; break; case "自我認識_優點_3": row["自我認識_優點_3"] = data.Data; break; case "自我認識_個性_3": row["自我認識_個性_3"] = data.Data; break; case "生活感想_內容3_1": row["生活感想_內容3_1"] = data.Data; break; case "生活感想_內容2_1": row["生活感想_內容2_1"] = data.Data; break; case "生活感想_內容1_1": row["生活感想_內容1_1"] = data.Data; break; case "生活感想_內容3_2": row["生活感想_內容3_2"] = data.Data; break; case "生活感想_內容2_2": row["生活感想_內容2_2"] = data.Data; break; case "生活感想_內容1_2": row["生活感想_內容1_2"] = data.Data; break; case "備註_備註": row["備註_備註"] = data.Data; break; } } } // 學年型 if (_YearlyDataDict.ContainsKey(StudID)) { // 組合方式一 foreach(UDTYearlyDataDef data in _YearlyDataDict[StudID]) { switch (data.Key) { case "家庭狀況_父母關係": row["父母關係"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_家庭氣氛": row["家庭氣氛"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_父親管教方式": row["父管教方式"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_母親管教方式": row["母管教方式"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_居住環境":row["居住環境"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_本人住宿":row["本人住宿"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_經濟狀況": row["經濟狀況"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_每星期零用錢": row["零用金"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_每星期零用錢(元)": row["零用金"] = Utility.Counsel_Yearly_Parse1(data); break; case "家庭狀況_我覺得是否足夠":row["零用金是否足夠"] = Utility.Counsel_Yearly_Parse1(data); break; case "學習狀況_特殊專長": row["特殊專長"] = Utility.Counsel_Yearly_Parse1(data); break; case "學習狀況_休閒興趣": row["休閒興趣"] = Utility.Counsel_Yearly_Parse1(data); break; case "學習狀況_最喜歡的學科": row["最喜歡的學科"] = Utility.Counsel_Yearly_Parse1(data); break; case "學習狀況_最感困難的學科": row["最感困難的學科"] = Utility.Counsel_Yearly_Parse1(data); break; } } // 組合方式二 foreach (UDTYearlyDataDef data in _YearlyDataDict[StudID]) { switch (data.Key) { case "適應情形_生活習慣": for( int i=1;i<=6;i++) row["生活習慣"+i] = Utility.Counsel_Yearly_Parse2(data, i); break; case "適應情形_人際關係": for (int i = 1; i <= 6; i++) row["人際關係"+i] = Utility.Counsel_Yearly_Parse2(data,i); break; case "適應情形_外向行為": for (int i = 1; i <= 6; i++) row["外向行為"+i] = Utility.Counsel_Yearly_Parse2(data,i); break; case "適應情形_內向行為": for (int i = 1; i <= 6; i++) row["內向行為"+i] = Utility.Counsel_Yearly_Parse2(data, i); break; case "適應情形_學習動機": for (int i = 1; i <= 6; i++) row["學習動機"+i] = Utility.Counsel_Yearly_Parse2(data, i); break; case "適應情形_服務熱忱": for (int i = 1; i <= 6; i++) row["服務熱忱"+i] = Utility.Counsel_Yearly_Parse2(data, i); break; case "適應情形_人生態度": for (int i = 1; i <= 6; i++) row["人生態度"+i] = Utility.Counsel_Yearly_Parse2(data, i); break; } } } // 多值 if (_MultipleRecordDict.ContainsKey(StudID)) { row["生理狀態"] = Utility.Counsel_Multiple_Parse(_MultipleRecordDict[StudID], "本人概況_生理缺陷"); row["特殊疾病"] = Utility.Counsel_Multiple_Parse(_MultipleRecordDict[StudID], "本人概況_曾患特殊疾病"); row["升學意願"] = Utility.Counsel_Multiple_Parse(_MultipleRecordDict[StudID], "畢業後計畫_升學意願"); row["就業意願"] = Utility.Counsel_Multiple_Parse(_MultipleRecordDict[StudID], "畢業後計畫_就業意願"); row["職訓種類"] = Utility.Counsel_Multiple_Parse(_MultipleRecordDict[StudID], "畢業後計畫_參加職業訓練"); row["受訓地區"] = Utility.Counsel_Multiple_Parse(_MultipleRecordDict[StudID], "畢業後計畫_受訓地區"); } // 優先順序 if (_PriorityDataDict.ContainsKey(StudID)) { foreach (UDTPriorityDataDef data in _PriorityDataDict[StudID]) { switch (data.Key) { case "畢業後計畫_將來職業": row["職業意願"] = Utility.Counsel_PriorityData_Parse1(data); break; case "畢業後計畫_就業地區": row["就業地區"] = Utility.Counsel_PriorityData_Parse1(data); break; } } } // 直系血親 if (_RelativeDict.ContainsKey(StudID)) { int i = 1; foreach (UDTRelativeDef data in _RelativeDict[StudID]) { // 檢查料是否超過可合併欄位 ChechMapFieldName("家長親屬_稱謂", i); ChechMapFieldName("家長親屬_姓名", i); ChechMapFieldName("家長親屬_出生年", i); ChechMapFieldName("家長親屬_存歿", i); ChechMapFieldName("家長親屬_教育程度", i); ChechMapFieldName("家長親屬_職業", i); ChechMapFieldName("家長親屬_工作機構", i); ChechMapFieldName("家長親屬_職稱", i); row["家長親屬_稱謂" + i] = data.Title; row["家長親屬_姓名" + i] = data.Name; row["家長親屬_出生年" + i] = data.BirthYear; row["家長親屬_存歿" + i]="存"; if (data.IsAlive.HasValue && data.IsAlive.Value == false) row["家長親屬_存歿" + i] = "歿"; row["家長親屬_教育程度" + i] = data.EduDegree; row["家長親屬_職業" + i] = data.Job; row["家長親屬_工作機構" + i] = data.Institute; row["家長親屬_職稱" + i] = data.JobTitle; i++; } } // 兄弟姊妹 if (_SiblingDict.ContainsKey(StudID)) { int i = 1; foreach (UDTSiblingDef data in _SiblingDict[StudID]) { // 檢查料是否超過可合併欄位 ChechMapFieldName("兄弟姊妹_稱謂", i); ChechMapFieldName("兄弟姊妹_姓名", i); ChechMapFieldName("兄弟姊妹_出生年", i); ChechMapFieldName("兄弟姊妹_畢肄業學校", i); row["兄弟姊妹_稱謂" + i] = data.Title; row["兄弟姊妹_姓名" + i] = data.Name; row["兄弟姊妹_出生年" + i] = data.BirthYear; row["兄弟姊妹_畢肄業學校" + i] = data.SchoolName; i++; } } // 學期型 if (_SemesterDataDict.ContainsKey(StudID)) { foreach (UDTSemesterDataDef data in _SemesterDataDict[StudID]) { switch (data.Key) { case "本人概況_身高": for (int i = 1; i <= 6; i++) row["身高" + i] = Utility.Counsel_SemesterData_Parse1(data,i);break; case "本人概況_體重": for (int i = 1; i <= 6; i++) row["體重" + i] = Utility.Counsel_SemesterData_Parse1(data,i);break; } } } // 心理測驗 if (_StudQuizDataDict.ContainsKey(StudID)) { int i = 1; List<UDT_StudQuizDataDef> dataList = (from da in _StudQuizDataDict[StudID] orderby da.ImplementationDate select da).ToList(); foreach (UDT_StudQuizDataDef data in dataList) { // 檢查料是否超過可合併欄位 ChechMapFieldName("測驗名稱", i); ChechMapFieldName("測驗日期", i); ChechMapFieldName("測驗結果", i); row["測驗名稱" + i] = ""; if (_QuizDefDict.ContainsKey(data.QuizID)) row["測驗名稱" + i] = _QuizDefDict[data.QuizID].QuizName; if (data.ImplementationDate.HasValue) row["測驗日期" + i] = data.ImplementationDate.Value.ToShortDateString(); else row["測驗日期" + i] = ""; row["測驗結果" + i] = Utility.CounselStudQuizXmlParse1(data.Content); i++; } } // 晤談紀錄 if (_CounselStudentInterviewRecordDict.ContainsKey(StudID)) { int i1 = 1; List<UDT_CounselStudentInterviewRecordDef> dataList = (from da in _CounselStudentInterviewRecordDict[StudID] orderby da.InterviewDate select da).ToList(); foreach (UDT_CounselStudentInterviewRecordDef data in dataList) { // 檢查料是否超過可合併欄位 ChechMapFieldName("晤談紀錄日期", i1); ChechMapFieldName("晤談紀錄對象", i1); ChechMapFieldName("晤談紀錄方式", i1); ChechMapFieldName("晤談紀錄內容要點", i1); ChechMapFieldName("晤談紀錄記錄者姓名", i1); row["晤談紀錄日期"+i1]=data.InterviewDate.Value.ToShortDateString(); row["晤談紀錄對象" + i1] = data.IntervieweeType; row["晤談紀錄方式" + i1] = data.InterviewType; row["晤談紀錄內容要點" + i1] = data.ContentDigest; row["晤談紀錄記錄者姓名" + i1] = data.AuthorName; i1++; } } // 個案會議 if (_CounselCaseMeetingRecordDict.ContainsKey(StudID)) { int i2 = 1; List<UDT_CounselCaseMeetingRecordDef> dataList = (from da in _CounselCaseMeetingRecordDict[StudID] orderby da.MeetingDate select da).ToList(); foreach (UDT_CounselCaseMeetingRecordDef data in dataList) { // 檢查料是否超過可合併欄位 ChechMapFieldName("個案會議會議日期", i2); ChechMapFieldName("個案會議會議事由", i2); ChechMapFieldName("個案會議內容要點", i2); ChechMapFieldName("個案會議記錄者姓名", i2); row["個案會議會議日期" + i2] = data.MeetingDate.Value.ToShortDateString(); row["個案會議會議事由" + i2] = data.MeetingCause; row["個案會議內容要點" + 2] = data.ContentDigest; row["個案會議記錄者姓名" + i2] = data.AuthorName; i2++; } } // 優先關懷 if (_CounselCareRecordDict.ContainsKey(StudID)) { int i3 = 1; List<UDT_CounselCareRecordDef> dataList = (from da in _CounselCareRecordDict[StudID] orderby da.FileDate select da).ToList(); foreach (UDT_CounselCareRecordDef data in dataList) { // 檢查料是否超過可合併欄位 ChechMapFieldName("優先關懷立案日期", i3); ChechMapFieldName("優先關懷個案類別", i3); ChechMapFieldName("優先關懷個案來源", i3); ChechMapFieldName("優先關懷記錄者姓名", i3); row["優先關懷立案日期" + i3] = data.FileDate.Value.ToShortDateString(); row["優先關懷個案類別" + i3] = data.CaseCategory; row["優先關懷個案來源" + i3] = data.CaseOrigin; row["優先關懷記錄者姓名" + i3] = data.AuthorName; i3++; } } _dtTable.Rows.Add(row); } Document document = new Document(); document = docTemplae; doc.Sections.Add(doc.ImportNode(document.Sections[0], true)); doc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); doc.MailMerge.Execute(_dtTable); doc.MailMerge.RemoveEmptyParagraphs = true; doc.MailMerge.DeleteFields(); _bgWorker.ReportProgress(95); e.Result = doc; }
private void button1_Click(object sender, EventArgs e) { //未輸入電子報表名稱的檢查 if (textBox1.Text.Trim() != "") { //主要的Word文件 Document doc = new Document(); doc.Sections.Clear(); if (radioButton2.Checked) { #region 班級電子報表 //建立一個班級電子報表 //傳入參數 : 報表名稱,學年度,學期,類型(學生/班級/教師/課程) paperForClass = new SmartSchool.ePaper.ElectronicPaper(textBox1.Text, School.DefaultSchoolYear, School.DefaultSemester, SmartSchool.ePaper.ViewerType.Class); MemoryStream stream = new MemoryStream(); Document each_page = new Document(template, "", LoadFormat.Doc, ""); each_page.Save(stream, SaveFormat.Doc); //取得所選擇的班級ID List<string> ClassID = K12.Presentation.NLDPanels.Class.SelectedSource; foreach (string each in ClassID) { //傳參數給PaperItem //格式 / 內容 / 對象的系統編號 paperForClass.Append(new PaperItem(PaperFormat.Office2003Doc, stream, each)); } //開始上傳 SmartSchool.ePaper.DispatcherProvider.Dispatch(paperForClass); #endregion } else { #region 班級學生的電子報表 //建立一個學生電子報表 //傳入參數 : 報表名稱,學年度,學期,類型(學生/班級/教師/課程) paperForStudent = new SmartSchool.ePaper.ElectronicPaper(textBox1.Text, School.DefaultSchoolYear, School.DefaultSemester, SmartSchool.ePaper.ViewerType.Student); //學生個人的文件 Document each_page = new Document(template, "", LoadFormat.Doc, ""); MemoryStream stream = new MemoryStream(); each_page.Save(stream, SaveFormat.Doc); doc.Sections.Add(doc.ImportNode(each_page.Sections[0], true)); //合併至doc List<string> ClassID = K12.Presentation.NLDPanels.Class.SelectedSource; //取得畫面上所選班級的ID清單 List<StudentRecord> srList = Student.SelectByClassIDs(ClassID); //依據班級ID,取得學生物件 foreach (StudentRecord sr in srList) { //傳參數給PaperItem //格式 / 內容 / 對象的系統編號 paperForStudent.Append(new PaperItem(PaperFormat.Office2003Doc, stream, sr.ID)); } //開始上傳 SmartSchool.ePaper.DispatcherProvider.Dispatch(paperForStudent); #endregion } } else { MessageBox.Show("請輸入電子報表名稱!!"); } }
void _bgWork_DoWork(object sender, DoWorkEventArgs e) { #region 讀取資料並整理 // 取得所選課程資料 _CourseAllDict.Clear(); _StudentDict.Clear(); _AddressDict.Clear(); _ParentDict.Clear(); // 取得學生扣考 Global._StudentNotExamDict = QueryData.GetStudentNotExamCoID(_StudentIDList); // 取得學生資料 foreach (StudentRecord rec in Student.SelectByIDs(_StudentIDList)) _StudentDict.Add(rec.ID, rec); // 地址資料 foreach (AddressRecord rec in Address.SelectByStudentIDs(_StudentIDList)) { if (!_AddressDict.ContainsKey(rec.RefStudentID)) _AddressDict.Add(rec.RefStudentID, rec); } // 家長資料 foreach (ParentRecord rec in K12.Data.Parent.SelectByStudentIDs(_StudentIDList)) { if (!_ParentDict.ContainsKey(rec.RefStudentID)) _ParentDict.Add(rec.RefStudentID, rec); } Dictionary<string, UDTCourseDef> SelCourseDict = UDTTransfer.UDTCourseSelectBySchoolYearSMDict(_SelSchoolYear, _SelSemester, _SelMonth); _CourseAllDict.Clear(); foreach (KeyValuePair<string, UDTCourseDef> data in SelCourseDict) { int cid = int.Parse(data.Key); _CourseAllDict.Add(cid, data.Value); } // 取得所選課程上課時間表 _TimeSectionList = UDTTransfer.UDTTimeSectionSelectByCourseIDList(SelCourseDict.Keys.ToList()); _classNameDict.Clear(); foreach (ClassRecord cr in Class.SelectAll()) _classNameDict.Add(cr.ID, cr.Name); // 取得學生重補修課程缺曠 _AttendanceList.Clear(); List<UDTAttendanceDef> StudAddtendList= UDTTransfer.UDTAttendanceSelectByStudentIDList(_StudentIDList); foreach (UDTAttendanceDef data in StudAddtendList) { // 屬於該梯次才加入 if (_CourseAllDict.ContainsKey(data.CourseID)) _AttendanceList.Add(data); } // 整理學生缺課資料 Dictionary<string, List<UDTAttendanceDef>> StudAttendanceDict = new Dictionary<string, List<UDTAttendanceDef>>(); foreach (UDTAttendanceDef data in _AttendanceList) { string sid=data.StudentID.ToString(); if (!StudAttendanceDict.ContainsKey(sid)) StudAttendanceDict.Add(sid, new List<UDTAttendanceDef>()); StudAttendanceDict[sid].Add(data); } _bgWork.ReportProgress(30); #endregion #region 填值並合併樣板處理 Document docTemplate=null; if(_SelectChkNotExam) docTemplate = new Document(new MemoryStream(Properties.Resources.學生重補修缺曠通知單扣考範本)); else docTemplate = new Document(new MemoryStream(Properties.Resources.學生重補修缺曠通知單範本)); // 最終樣板 Document doc = new Document(); // 處理缺曠用 DataTable dtAtt = new DataTable(); List<Document> docList = new List<Document>(); DataTable dt = new DataTable(); List<int> courseIDList = new List<int>(); string SchoolName = School.ChineseName; string SchoolAddress = School.Address; string SchoolTel = School.Telephone; // 以學生為主產生資料 foreach(string studID in _StudentIDList) { // 沒有缺課學生跳過 if (!StudAttendanceDict.ContainsKey(studID)) continue; // 檢查當勾選只產生扣考,只顯示有扣考,完全沒扣考跳過 if (_SelectChkNotExam) { if (!Global._StudentNotExamDict.ContainsKey(studID)) continue; } courseIDList.Clear(); // 學生修課課程 List<UDTAttendanceDef> sadList = StudAttendanceDict[studID]; foreach (UDTAttendanceDef data in sadList) { if (!courseIDList.Contains(data.CourseID)) courseIDList.Add(data.CourseID); } dt.Clear(); dt.Columns.Clear(); // 放入欄位 dt.Columns.Add("學校名稱"); dt.Columns.Add("學校地址"); dt.Columns.Add("學校電話"); dt.Columns.Add("收件人姓名"); dt.Columns.Add("收件人地址"); dt.Columns.Add("學年度"); dt.Columns.Add("學期"); dt.Columns.Add("梯次"); dt.Columns.Add("班級"); dt.Columns.Add("座號"); dt.Columns.Add("學號"); dt.Columns.Add("學生姓名"); // 課程名稱 for (int i = 1; i <= 6; i++) { dt.Columns.Add("課程名稱" + i); dt.Columns.Add("缺曠紀錄" + i); dt.Columns.Add("小計" + i); dt.Columns.Add("扣考" + i); } DataRow dr = dt.NewRow(); // 學校名稱 dr["學校名稱"] = SchoolName; // 學校地址 dr["學校地址"] = SchoolAddress; // 學校電話 dr["學校電話"] = SchoolTel; // 收件人姓名 dr["收件人姓名"] = _StudentDict[studID].Name; if (_ParentDict.ContainsKey(studID)) { string name = _StudentDict[studID].Name; if (_SelectMailName == "監護人姓名") name = _ParentDict[studID].CustodianName; if (_SelectMailName == "父親姓名") name = _ParentDict[studID].FatherName; if (_SelectMailName == "母親姓名") name = _ParentDict[studID].MotherName; dr["收件人姓名"] = name; } // 收件人地址 dr["收件人地址"] = ""; if (_AddressDict.ContainsKey(studID)) { string address = ""; if (_SelectMailAddress == "戶籍地址") address = _AddressDict[studID].PermanentAddress; if (_SelectMailAddress == "聯絡地址") address = _AddressDict[studID].MailingAddress; if (_SelectMailAddress == "其他地址") address = _AddressDict[studID].Address1Address; dr["收件人地址"] = address; } // 班級 if (_classNameDict.ContainsKey(_StudentDict[studID].RefClassID)) { dr["班級"] = _classNameDict[_StudentDict[studID].RefClassID]; } dr["座號"] = ""; // 座號 if (_StudentDict[studID].SeatNo.HasValue) dr["座號"] = _StudentDict[studID].SeatNo.Value; // 學號 dr["學號"] = _StudentDict[studID].StudentNumber; // 學生姓名 dr["學生姓名"] = _StudentDict[studID].Name; // 清空與重設相關需要資料 Global._CourseTimeSectionList.Clear(); Global._CousreAttendList.Clear(); Global._CourseStudentAttendanceIdxDict.Clear(); dtAtt.Clear(); dtAtt.Columns.Clear(); dtAtt.Columns.Add("缺曠日期"); // 缺曠資料 for (int i = 1; i <= 100; i++) dtAtt.Columns.Add("缺曠紀錄" + i); DataRow drTT = dtAtt.NewRow(); // 填入課程名稱 int coIdx = 1; // 收集學年度學期 List<int> syL = new List<int>(); List<int> ssL = new List<int>(); List<int> smL = new List<int>(); foreach (int cid in courseIDList) { if (_CourseAllDict.ContainsKey(cid)) { // 勾選只產生扣考,沒有扣考不顯示出來 if (_SelectChkNotExam) { if (!Global._StudentNotExamDict.ContainsKey(studID)) continue; else { if (!Global._StudentNotExamDict[studID].Contains(cid)) continue; } } dr["課程名稱" + coIdx] = _CourseAllDict[cid].CourseName; if (!syL.Contains(_CourseAllDict[cid].SchoolYear)) syL.Add(_CourseAllDict[cid].SchoolYear); if (!ssL.Contains(_CourseAllDict[cid].Semester)) ssL.Add(_CourseAllDict[cid].Semester); if (!smL.Contains(_CourseAllDict[cid].Month)) smL.Add(_CourseAllDict[cid].Month); int SumCount = 0; // 整理課程上課時間表 foreach (UDTTimeSectionDef data in _TimeSectionList) { if (data.CourseID == cid) Global._CourseTimeSectionList.Add(data); } // 整理課程修課缺曠記錄 foreach (UDTAttendanceDef data in StudAttendanceDict[studID]) { if (data.CourseID == cid) { Global._CousreAttendList.Add(data); SumCount++; } } // 計算學生缺曠統計 dr["小計" + coIdx] = SumCount; // 扣考 if (Global._StudentNotExamDict.ContainsKey(studID)) { if (Global._StudentNotExamDict[studID].Contains(cid)) dr["扣考" + coIdx] = "扣考"; } string ssid = cid.ToString(); if (!Global._CourseStudentAttendanceIdxDict.ContainsKey(ssid)) Global._CourseStudentAttendanceIdxDict.Add(ssid, coIdx); drTT["缺曠紀錄" + coIdx] = ssid; coIdx++; } } dr["學年度"] = string.Join(",", syL.ToArray()); dr["學期"] = string.Join(",", ssL.ToArray()); dr["梯次"] = string.Join(",", smL.ToArray()); dt.Rows.Add(dr); dtAtt.Rows.Add(drTT); // 處理動態處理(缺曠) Document docAtt = new Document(); docAtt.Sections.Clear(); docAtt.Sections.Add(docAtt.ImportNode(docTemplate.Sections[0], true)); _builder = new DocumentBuilder(docAtt); docAtt.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); docAtt.MailMerge.Execute(dtAtt); int cot = 1; Document doc1 = new Document(); doc1.Sections.Clear(); doc1.Sections.Add(doc1.ImportNode(docAtt.Sections[0], true)); doc1.MailMerge.Execute(dt); doc1.MailMerge.RemoveEmptyParagraphs = true; doc1.MailMerge.DeleteFields(); //// 清除多餘欄位 //int TabRowCount = doc1.Sections[0].Body.Tables[0].Rows.Count - 1; //for (int idx = TabRowCount; idx >= cot; idx--) //{ // doc1.Sections[0].Body.Tables[0].Rows.RemoveAt(idx); //} docList.Add(doc1); } doc.Sections.Clear(); foreach (Document doc2 in docList) doc.Sections.Add(doc.ImportNode(doc2.Sections[0], true)); string reportNameW = "重補修缺課通知單"; if(_SelectChkNotExam) reportNameW = "重補修缺課扣考通知單"; else reportNameW = "重補修缺課通知單"; pathW = Path.Combine(System.Windows.Forms.Application.StartupPath + "\\Reports", ""); if (!Directory.Exists(pathW)) Directory.CreateDirectory(pathW); pathW = Path.Combine(pathW, reportNameW + ".doc"); if (File.Exists(pathW)) { int i = 1; while (true) { string newPathW = Path.GetDirectoryName(pathW) + "\\" + Path.GetFileNameWithoutExtension(pathW) + (i++) + Path.GetExtension(pathW); if (!File.Exists(newPathW)) { pathW = newPathW; break; } } } try { doc.Save(pathW, Aspose.Words.SaveFormat.Doc); } catch (Exception exow) { } doc = null; docList.Clear(); GC.Collect(); _bgWork.ReportProgress(100); #endregion }
private void btnPrint_Click(object sender, EventArgs e) { string survey_year = this.nudSchoolYear.Value + ""; this.btnPrint.Enabled = false; this.circularProgress.Visible = true; this.circularProgress.IsRunning = true; Task<Document> task = Task<Document>.Factory.StartNew(() => { MemoryStream template = new MemoryStream(Properties.Resources.高雄市國中畢業生進路統計報表樣版); Document doc = new Document(); Document dataDoc = new Document(template, "", LoadFormat.Doc, ""); dataDoc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); dataDoc.MailMerge.RemoveEmptyParagraphs = true; doc.Sections.Clear(); List<string> keys = new List<string>(); List<object> values = new List<object>(); Dictionary<string, object> mergeKeyValue = new Dictionary<string, object>(); List<UDT.Approach> Records = this.Access.Select<UDT.Approach>("survey_year=" + survey_year); if (Records.Count == 0) throw new Exception("本年度無填報資料。"); decimal A1_sum = Records.Count; decimal A2_sum = 0; decimal A3_sum = 0; decimal A4_sum = 0; decimal B1_sum = 0; decimal B2_sum = 0; decimal B3_sum = 0; decimal B4_sum = 0; decimal C1_sum = 0; decimal C2_sum = 0; decimal C3_sum = 0; decimal C4_sum = 0; decimal D1_sum = 0; decimal D2_sum = 0; decimal D3_sum = 0; decimal D4_sum = 0; decimal E2_sum = 0; decimal F2_sum = 0; decimal G2_sum = 0; decimal H2_sum = 0; decimal I2_sum = 0; decimal E3_sum = 0; decimal F3_sum = 0; decimal G3_sum = 0; decimal H3_sum = 0; decimal I3_sum = 0; decimal J3_sum = 0; decimal K4_sum = 0; decimal L4_sum = 0; decimal M4_sum = 0; decimal N4_sum = 0; decimal O4_sum = 0; decimal P4_sum = 0; decimal Q4_sum = 0; decimal R4_sum = 0; decimal S4_sum = 0; decimal E4_sum = 0; decimal F4_sum = 0; decimal G4_sum = 0; decimal H4_sum = 0; decimal I4_sum = 0; decimal J4_sum = 0; foreach (UDT.Approach record in Records) { // 升學或就業情形 if (record.Q1 == 1) B1_sum += 1; if (record.Q1 == 2) C1_sum += 1; if (record.Q1 == 3) D1_sum += 1; // 就讀學校 if (record.Q2 == 1) B2_sum += 1; if (record.Q2 == 2) C2_sum += 1; if (record.Q2 == 3) D2_sum += 1; if (record.Q2 == 4) E2_sum += 1; if (record.Q2 == 5) F2_sum += 1; if (record.Q2 == 6) G2_sum += 1; if (record.Q2 == 7) H2_sum += 1; if (record.Q2 == 8) I2_sum += 1; // 學制別 if (record.Q3 == 1) B3_sum += 1; if (record.Q3 == 2) C3_sum += 1; if (record.Q3 == 3) D3_sum += 1; if (record.Q3 == 4) E3_sum += 1; if (record.Q3 == 5) F3_sum += 1; if (record.Q3 == 6) G3_sum += 1; if (record.Q3 == 7) H3_sum += 1; if (record.Q3 == 8) I3_sum += 1; if (record.Q3 == 9) J3_sum += 1; // 入學方式 if (record.Q4 == 1) B4_sum += 1; if (record.Q4 == 2) C4_sum += 1; if (record.Q4 == 3) D4_sum += 1; if (record.Q4 == 4) E4_sum += 1; if (record.Q4 == 5) F4_sum += 1; if (record.Q4 == 6) G4_sum += 1; if (record.Q4 == 7) H4_sum += 1; if (record.Q4 == 8) I4_sum += 1; if (record.Q4 == 9) J4_sum += 1; if (record.Q4 == 10) K4_sum += 1; if (record.Q4 == 11) L4_sum += 1; if (record.Q4 == 12) M4_sum += 1; if (record.Q4 == 13) N4_sum += 1; if (record.Q4 == 14) O4_sum += 1; if (record.Q4 == 15) P4_sum += 1; if (record.Q4 == 16) Q4_sum += 1; if (record.Q4 == 17) R4_sum += 1; if (record.Q4 == 18) S4_sum += 1; } #region 全校畢業學生升學就業情形 mergeKeyValue.Add("A1", A1_sum); mergeKeyValue.Add("B1", B1_sum); mergeKeyValue.Add("C1", C1_sum); mergeKeyValue.Add("D1", D1_sum); mergeKeyValue.Add("B1/A1", Math.Round(B1_sum * 100 / A1_sum, 2, MidpointRounding.AwayFromZero)); mergeKeyValue.Add("C1/A1", Math.Round(C1_sum * 100 / A1_sum, 2, MidpointRounding.AwayFromZero)); mergeKeyValue.Add("D1/A1", Math.Round(D1_sum * 100 / A1_sum, 2, MidpointRounding.AwayFromZero)); #endregion #region 全校畢業學生升學之就讀學校情形 A2_sum = B2_sum + C2_sum + D2_sum + E2_sum + F2_sum + G2_sum + H2_sum + I2_sum; mergeKeyValue.Add("A2", A2_sum); mergeKeyValue.Add("B2", B2_sum); mergeKeyValue.Add("C2", C2_sum); mergeKeyValue.Add("D2", D2_sum); mergeKeyValue.Add("E2", E2_sum); mergeKeyValue.Add("F2", F2_sum); mergeKeyValue.Add("G2", G2_sum); mergeKeyValue.Add("H2", H2_sum); mergeKeyValue.Add("I2", I2_sum); mergeKeyValue.Add("B2/A2", A2_sum > 0 ? Math.Round(B2_sum * 100 / A2_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("C2/A2", A2_sum > 0 ? Math.Round(C2_sum * 100 / A2_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("D2/A2", A2_sum > 0 ? Math.Round(D2_sum * 100 / A2_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("E2/A2", A2_sum > 0 ? Math.Round(E2_sum * 100 / A2_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("F2/A2", A2_sum > 0 ? Math.Round(F2_sum * 100 / A2_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("G2/A2", A2_sum > 0 ? Math.Round(G2_sum * 100 / A2_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("H2/A2", A2_sum > 0 ? Math.Round(H2_sum * 100 / A2_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("I2/A2", A2_sum > 0 ? Math.Round(I2_sum * 100 / A2_sum, 2, MidpointRounding.AwayFromZero) : 0); #endregion #region 學制別 A3_sum = B3_sum + C3_sum + D3_sum + E3_sum + F3_sum + G3_sum + H3_sum + I3_sum + J3_sum; mergeKeyValue.Add("A3", A3_sum); mergeKeyValue.Add("B3", B3_sum); mergeKeyValue.Add("C3", C3_sum); mergeKeyValue.Add("D3", D3_sum); mergeKeyValue.Add("E3", E3_sum); mergeKeyValue.Add("F3", F3_sum); mergeKeyValue.Add("G3", G3_sum); mergeKeyValue.Add("H3", H3_sum); mergeKeyValue.Add("I3", I3_sum); mergeKeyValue.Add("J3", J3_sum); mergeKeyValue.Add("B3/A3", A3_sum > 0 ? Math.Round(B4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("C3/A3", A3_sum > 0 ? Math.Round(C4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("D3/A3", A3_sum > 0 ? Math.Round(D4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("E3/A3", A3_sum > 0 ? Math.Round(E4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("F3/A3", A3_sum > 0 ? Math.Round(F4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("G3/A3", A3_sum > 0 ? Math.Round(G4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("H3/A3", A3_sum > 0 ? Math.Round(H4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("I3/A3", A3_sum > 0 ? Math.Round(I4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("J3/A3", A3_sum > 0 ? Math.Round(J4_sum * 100 / A3_sum, 2, MidpointRounding.AwayFromZero) : 0); #endregion #region 入學方式 A4_sum = B4_sum + C4_sum + D4_sum + E4_sum + F4_sum + G4_sum + H4_sum + I4_sum + J4_sum + K4_sum + L4_sum + M4_sum + N4_sum + O4_sum + P4_sum + Q4_sum + R4_sum + S4_sum; mergeKeyValue.Add("A4", A4_sum); mergeKeyValue.Add("B4", B4_sum); mergeKeyValue.Add("C4", C4_sum); mergeKeyValue.Add("D4", D4_sum); mergeKeyValue.Add("E4", E4_sum); mergeKeyValue.Add("F4", F4_sum); mergeKeyValue.Add("G4", G4_sum); mergeKeyValue.Add("H4", H4_sum); mergeKeyValue.Add("I4", I4_sum); mergeKeyValue.Add("J4", J4_sum); mergeKeyValue.Add("K4", K4_sum); mergeKeyValue.Add("L4", L4_sum); mergeKeyValue.Add("M4", M4_sum); mergeKeyValue.Add("N4", N4_sum); mergeKeyValue.Add("O4", O4_sum); mergeKeyValue.Add("P4", P4_sum); mergeKeyValue.Add("Q4", Q4_sum); mergeKeyValue.Add("R4", R4_sum); mergeKeyValue.Add("S4", S4_sum); mergeKeyValue.Add("B4/A4", A4_sum > 0 ? Math.Round(B4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("C4/A4", A4_sum > 0 ? Math.Round(C4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("D4/A4", A4_sum > 0 ? Math.Round(D4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("E4/A4", A4_sum > 0 ? Math.Round(E4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("F4/A4", A4_sum > 0 ? Math.Round(F4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("G4/A4", A4_sum > 0 ? Math.Round(G4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("H4/A4", A4_sum > 0 ? Math.Round(H4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("I4/A4", A4_sum > 0 ? Math.Round(I4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("J4/A4", A4_sum > 0 ? Math.Round(J4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("K4/A4", A4_sum > 0 ? Math.Round(K4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("L4/A4", A4_sum > 0 ? Math.Round(L4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("M4/A4", A4_sum > 0 ? Math.Round(M4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("N4/A4", A4_sum > 0 ? Math.Round(N4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("O4/A4", A4_sum > 0 ? Math.Round(O4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("P4/A4", A4_sum > 0 ? Math.Round(P4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("Q4/A4", A4_sum > 0 ? Math.Round(Q4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("R4/A4", A4_sum > 0 ? Math.Round(R4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); mergeKeyValue.Add("S4/A4", A4_sum > 0 ? Math.Round(S4_sum * 100 / A4_sum, 2, MidpointRounding.AwayFromZero) : 0); #endregion // 學校代碼及名稱 mergeKeyValue.Add("學校代碼", K12.Data.School.Code); mergeKeyValue.Add("填報學校", K12.Data.School.ChineseName); foreach (string key in mergeKeyValue.Keys) { keys.Add(key); values.Add(mergeKeyValue[key]); } dataDoc.MailMerge.Execute(keys.ToArray(), values.ToArray()); doc.Sections.Add(doc.ImportNode(dataDoc.Sections[0], true)); return doc; }); task.ContinueWith((x) => { this.btnPrint.Enabled = true; this.circularProgress.Visible = false; this.circularProgress.IsRunning = false; if (x.Exception != null) MessageBox.Show(x.Exception.InnerException.Message); else Completed("國中畢業學生進路調查填報表格", x.Result); }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); }
void _bgPrintData_DoWork(object sender, DoWorkEventArgs e) { _bgPrintData.ReportProgress(1); AddTableColumn(); Document doc = new Document(); doc.Sections.Clear(); // 取得缺曠資料 _SelectAttendanceList = UDTTransfer.UDTAttendanceSelectByCourseIDList(_SelectCourseIDList); // 取得課程修課 _SelectSCList = UDTTransfer.UDTSCSelectByCourseIDList(_SelectCourseIDList); Dictionary<string, List<string>> _SCStudernDict = new Dictionary<string, List<string>>(); foreach (UDTScselectDef data in _SelectSCList) { string cid=data.CourseID.ToString(); if (!_SCStudernDict.ContainsKey(cid)) _SCStudernDict.Add(cid, new List<string>()); _SCStudernDict[cid].Add(data.StudentID.ToString()); } _StudentIDList.Clear(); _StudentDict.Clear(); _AddressDict.Clear(); _ParentDict.Clear(); // 取得有缺曠學生id foreach (UDTAttendanceDef data in _SelectAttendanceList) { string sid = data.StudentID.ToString(); if (!_StudentIDList.Contains(sid)) _StudentIDList.Add(sid); } // 取得學生資料 foreach (StudentRecord rec in Student.SelectByIDs(_StudentIDList)) _StudentDict.Add(rec.ID, rec); // 地址資料 foreach (AddressRecord rec in Address.SelectByStudentIDs(_StudentIDList)) { if (!_AddressDict.ContainsKey(rec.RefStudentID)) _AddressDict.Add(rec.RefStudentID, rec); } // 家長資料 foreach (ParentRecord rec in K12.Data.Parent.SelectByStudentIDs(_StudentIDList)) { if (!_ParentDict.ContainsKey(rec.RefStudentID)) _ParentDict.Add(rec.RefStudentID, rec); } // 教師姓名 _TeacherNameDict.Clear(); foreach (TeacherRecord rec in Teacher.SelectAll()) { if (rec.Status == TeacherRecord.TeacherStatus.刪除) continue; string name = rec.Name; if(!string.IsNullOrWhiteSpace(rec.Nickname)) name="("+rec.Nickname+")"; _TeacherNameDict.Add(rec.ID, name); } // 班級名稱 _ClassNameDict.Clear(); foreach (ClassRecord cr in Class.SelectAll()) _ClassNameDict.Add(cr.ID, cr.Name); string SchoolName = School.ChineseName; string SchoolAddress = School.Address; string SchoolTel = School.Telephone; _bgPrintData.ReportProgress(20); // 整理資料並過濾畫面上已修課學生 // 學校名稱、學校地址、學校電話、收件人、收件地址、學年度、學期、梯次、班級、座號、學號、 // 學生姓名、教師、課程名稱、缺曠統計、缺曠資料。 int idx = 1; foreach (string StudID in _StudentIDList) { _dtTable.Clear(); DataRow row = _dtTable.NewRow(); // 處理 Word 資料合併 Document document = new Document(); document.Sections[0].PageSetup.PaperSize = PaperSize.A4; NodeCollection doctables = _WordTemplate.GetChildNodes(NodeType.Table, true); Node docdstNode = document.ImportNode(doctables[0], true, ImportFormatMode.KeepSourceFormatting); document.LastSection.Body.AppendChild(docdstNode); // 學校名稱 row["學校名稱"] = SchoolName; // 學校地址 row["學校地址"] = SchoolAddress; // 學校電話 row["學校電話"] = SchoolTel; if (_StudentDict.ContainsKey(StudID)) { rpt_StudentInfo StudentInfoData = new rpt_StudentInfo(); // 收件人姓名 row["收件人姓名"] = _StudentDict[StudID].Name; StudentInfoData.MailName = _StudentDict[StudID].Name; if (_ParentDict.ContainsKey(StudID)) { string name = _StudentDict[StudID].Name; if (_SelectMailName == "監護人姓名") name = _ParentDict[StudID].CustodianName; if (_SelectMailName == "父親姓名") name = _ParentDict[StudID].FatherName; if (_SelectMailName == "母親姓名") name = _ParentDict[StudID].MotherName; row["收件人姓名"] = name; StudentInfoData.MailName = name; } // 收件人地址 row["收件人地址"] = ""; if (_AddressDict.ContainsKey(StudID)) { string address = ""; if (_SelectMailAddress == "戶籍地址") address = _AddressDict[StudID].PermanentAddress; if (_SelectMailAddress == "聯絡地址") address = _AddressDict[StudID].MailingAddress; if (_SelectMailAddress == "其他地址") address = _AddressDict[StudID].Address1Address; row["收件人地址"] = address; StudentInfoData.MailAddress = address; } // 班級 if (_ClassNameDict.ContainsKey(_StudentDict[StudID].RefClassID)) { row["班級"] = _ClassNameDict[_StudentDict[StudID].RefClassID]; StudentInfoData.ClassName = _ClassNameDict[_StudentDict[StudID].RefClassID]; } row["座號"] = ""; // 座號 if (_StudentDict[StudID].SeatNo.HasValue) row["座號"] = _StudentDict[StudID].SeatNo.Value; StudentInfoData.SeatNo = _StudentDict[StudID].SeatNo.Value; // 學號 row["學號"] = _StudentDict[StudID].StudentNumber; StudentInfoData.StudentNumber = _StudentDict[StudID].StudentNumber; // 學生姓名 row["學生姓名"] = _StudentDict[StudID].Name; StudentInfoData.Name = _StudentDict[StudID].Name; int sid = int.Parse(StudID); // 分課程 Dictionary<int, List<UDTAttendanceDef>> coAttendDict = new Dictionary<int, List<UDTAttendanceDef>>(); foreach (UDTAttendanceDef atData in _SelectAttendanceList.Where(x => x.StudentID == sid)) { if (!coAttendDict.ContainsKey(atData.CourseID)) coAttendDict.Add(atData.CourseID, new List<UDTAttendanceDef>()); coAttendDict[atData.CourseID].Add(atData); } // 處理課程細項 foreach (KeyValuePair<int, List<UDTAttendanceDef>> atData in coAttendDict) { DataTable dt = new DataTable(); dt.Columns.Add("學年度"); dt.Columns.Add("學期"); dt.Columns.Add("梯次"); dt.Columns.Add("班級"); dt.Columns.Add("座號"); dt.Columns.Add("學號"); dt.Columns.Add("學生姓名"); dt.Columns.Add("教師"); dt.Columns.Add("課程名稱"); dt.Columns.Add("缺曠統計"); dt.Columns.Add("缺曠明細"); string coid = atData.Key.ToString(); foreach (UDTCourseDef coData in _SelectCourseList.Where(x => x.UID == coid)) { // 檢查有修課學生 if(_SCStudernDict.ContainsKey(coid)) if (_SCStudernDict[coid].Contains(StudID)) { DataRow dt_row = dt.NewRow(); dt_row["學年度"] = coData.SchoolYear; dt_row["學期"] = coData.Semester; dt_row["梯次"] = coData.Month; // 班級 if (_ClassNameDict.ContainsKey(_StudentDict[StudID].RefClassID)) dt_row["班級"] = _ClassNameDict[_StudentDict[StudID].RefClassID]; dt_row["座號"] = ""; // 座號 if (_StudentDict[StudID].SeatNo.HasValue) dt_row["座號"] = _StudentDict[StudID].SeatNo.Value; // 學號 dt_row["學號"] = _StudentDict[StudID].StudentNumber; // 學生姓名 dt_row["學生姓名"] = _StudentDict[StudID].Name; string tid = coData.RefTeacherID.ToString(); // 教師 if (_TeacherNameDict.ContainsKey(tid)) dt_row["教師"] = _TeacherNameDict[tid]; // 課程名稱 dt_row["課程名稱"] = coData.CourseName; dt_row["缺曠統計"] = atData.Value.Count; // 存放上課時間與缺曠比對後 Dictionary<DateTime, List<int>> atDict = new Dictionary<DateTime, List<int>>(); foreach (UDTAttendanceDef dd in atData.Value) { foreach (UDTTimeSectionDef tt in _SelectTimeSectionList.Where(x => x.UID == dd.TimeSectionID.ToString())) { if (!atDict.ContainsKey(tt.Date)) atDict.Add(tt.Date, new List<int>()); atDict[tt.Date].Add(tt.Period); } } if (Global._TempStudentTimeSectionDict.ContainsKey(StudID)) Global._TempStudentTimeSectionDict[StudID] = atDict; else Global._TempStudentTimeSectionDict.Add(StudID, atDict); dt_row["缺曠明細"] = StudID; // 缺曠統計 dt.Rows.Add(dt_row); NodeCollection tables = _WordTemplate.GetChildNodes(NodeType.Table, true); Document subDoc = new Document(); subDoc.Sections[0].PageSetup.PaperSize = PaperSize.A4; subDoc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); Node dstNode = subDoc.ImportNode(tables[1], true, ImportFormatMode.KeepSourceFormatting); _builder = new DocumentBuilder(subDoc); subDoc.LastSection.Body.AppendChild(dstNode); subDoc.MailMerge.Execute(dt); subDoc.MailMerge.RemoveEmptyParagraphs = true; subDoc.MailMerge.DeleteFields(); document.Sections.Add(document.ImportNode(subDoc.Sections[0], true)); } } } _StudentInfoList.Add(StudentInfoData); // 加入 DatatTablle _dtTable.Rows.Add(row); } document.MailMerge.Execute(_dtTable); document.MailMerge.RemoveEmptyParagraphs = true; document.MailMerge.DeleteFields(); // 處理 section break for (int i = document.Sections.Count - 2; i >= 0; i--) { document.LastSection.PrependContent(document.Sections[i]); document.Sections[i].Remove(); } for (int i = 0; i < document.Sections.Count; i++) doc.Sections.Add(doc.ImportNode(document.Sections[i], true)); } //doc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); //doc.MailMerge.Execute(_dtTable); //doc.MailMerge.RemoveEmptyParagraphs = true; //doc.MailMerge.DeleteFields(); _bgPrintData.ReportProgress(95); e.Result = doc; }
void _bgWorker_DoWork(object sender, DoWorkEventArgs e) { _studDataDict.Clear(); _dataDictList.Clear(); string SchoolName = School.ChineseName; Dictionary<int, string> intTeacherNameDict = new Dictionary<int, string>(); foreach (TeacherRecord tr in Teacher.SelectAll()) { if (tr.Status == TeacherRecord.TeacherStatus.刪除) continue; int tid = int.Parse(tr.ID); string TName=tr.Name; if (!string.IsNullOrWhiteSpace(tr.Nickname)) TName = tr.Name + "(" + tr.Nickname + ")"; intTeacherNameDict.Add(tid, TName); } if (_UserSelectType == SelectType.學生) { // 取得學生資料 foreach (StudentRecord stud in Student.SelectByIDs(_studIDList)) _studDataDict.Add(stud.ID, stud); // 取得晤談紀錄 List<UDT_CounselStudentInterviewRecordDef> dataList = _UDTTransfer.GetCounselStudentInterviewRecordByStudentIDList(_studIDList); // 透過 query 依照班級序號、班級名稱、學號座號排序 _studIDList = Utility.SortStudentID1(_studIDList); foreach (string studID in _studIDList) { int sid = int.Parse(studID); string studName = ""; string StudNumber = ""; string ClassName = ""; string StudSeatNo = ""; if (_studDataDict.ContainsKey(studID)) { studName = _studDataDict[studID].Name; StudNumber = _studDataDict[studID].StudentNumber; if (_studDataDict[studID].Class != null) ClassName = _studDataDict[studID].Class.Name; if (_studDataDict[studID].SeatNo.HasValue) StudSeatNo = _studDataDict[studID].SeatNo.Value.ToString(); } List<UDT_CounselStudentInterviewRecordDef> studInterviewList = (from da in dataList where da.StudentID == sid orderby da.InterviewDate select da).ToList(); //// 當沒有資料顯示一張有名稱空的 //if (studInterviewList.Count == 0) //{ // Dictionary<string, string> mapDict1 = new Dictionary<string, string>(); // mapDict1.Add("校名", SchoolName); // mapDict1.Add("學生姓名", studName); // mapDict1.Add("學號", StudNumber); // mapDict1.Add("班級", ClassName); // mapDict1.Add("座號", StudSeatNo); // _dataDictList.Add(mapDict1); //} foreach (UDT_CounselStudentInterviewRecordDef data in studInterviewList) { Dictionary<string, string> mapDict = new Dictionary<string, string>(); mapDict.Add("校名", SchoolName); mapDict.Add("學生姓名", studName); mapDict.Add("學號", StudNumber); mapDict.Add("班級", ClassName); if (intTeacherNameDict.ContainsKey(data.TeacherID)) mapDict.Add("晤談老師", intTeacherNameDict[data.TeacherID]); mapDict.Add("晤談編號", data.InterviewNo); mapDict.Add("座號", StudSeatNo); mapDict.Add("晤談對象", data.IntervieweeType); mapDict.Add("晤談方式", data.InterviewType); if (data.InterviewDate.HasValue) mapDict.Add("晤談日期", data.InterviewDate.Value.ToShortDateString()); mapDict.Add("時間", data.InterviewTime); mapDict.Add("地點", data.Place); mapDict.Add("參與人員", ParseUDTXML1(data.Attendees)); mapDict.Add("晤談事由", data.Cause); mapDict.Add("輔導方式", ParseUDTXML1(data.CounselType)); mapDict.Add("輔導歸類", ParseUDTXML1(data.CounselTypeKind)); mapDict.Add("內容要點", data.ContentDigest); mapDict.Add("記錄者姓名", data.AuthorName); _dataDictList.Add(mapDict); } } } if (_UserSelectType == SelectType.教師) { List<int> sortStudIDList = new List<int>(); // 透過教師取得所屬晤談紀錄 List<UDT_CounselStudentInterviewRecordDef> InterviewRecorT = _UDTTransfer.GetCounselStudentInterviewRecordByTeacherIDList(_TeacherIDList); // 取得晤談紀錄內學生id List<string> InterviewRecorStudIDList = new List<string>(); foreach (UDT_CounselStudentInterviewRecordDef data in InterviewRecorT) { if (!sortStudIDList.Contains(data.StudentID)) sortStudIDList.Add(data.StudentID); string key = data.StudentID.ToString(); if (!InterviewRecorStudIDList.Contains(key)) InterviewRecorStudIDList.Add(key); } // 取得學生資訊 Dictionary<int, StudentRecord> InterviewRecorStudDict = new Dictionary<int, StudentRecord>(); foreach (StudentRecord rec in Student.SelectByIDs(InterviewRecorStudIDList)) { int sid = int.Parse(rec.ID); if (!InterviewRecorStudDict.ContainsKey(sid)) InterviewRecorStudDict.Add(sid, rec); } // 轉換教師ID int List<int> intTeacherIDList = new List<int>(); foreach (string tid in _TeacherIDList) intTeacherIDList.Add(int.Parse(tid)); sortStudIDList = Utility.SortStudentID2(sortStudIDList); // 組資料 foreach (int id in intTeacherIDList) { List<UDT_CounselStudentInterviewRecordDef> dataTT = (from data in InterviewRecorT where data.TeacherID == id orderby data.StudentID,data.InterviewDate select data).ToList(); // 依班級順序、班級名稱、學生座號排序後加入 List<UDT_CounselStudentInterviewRecordDef> dataT = new List<UDT_CounselStudentInterviewRecordDef>(); foreach (int ssid in sortStudIDList) { foreach (UDT_CounselStudentInterviewRecordDef data in dataTT.Where(x => x.StudentID == ssid)) dataT.Add(data); } foreach (UDT_CounselStudentInterviewRecordDef data in dataT) { string studName = ""; string StudNumber = ""; string ClassName = ""; string StudSeatNo = ""; if (InterviewRecorStudDict.ContainsKey(data.StudentID)) { studName = InterviewRecorStudDict[data.StudentID].Name; StudNumber = InterviewRecorStudDict[data.StudentID].StudentNumber; if (InterviewRecorStudDict[data.StudentID].Class != null) ClassName = InterviewRecorStudDict[data.StudentID].Class.Name; if (InterviewRecorStudDict[data.StudentID].SeatNo.HasValue) StudSeatNo = InterviewRecorStudDict[data.StudentID].SeatNo.Value.ToString(); } Dictionary<string, string> mapDict = new Dictionary<string, string>(); mapDict.Add("校名", SchoolName); mapDict.Add("學生姓名", studName); mapDict.Add("學號", StudNumber); mapDict.Add("班級", ClassName); if (intTeacherNameDict.ContainsKey(data.TeacherID)) mapDict.Add("晤談老師", intTeacherNameDict[data.TeacherID]); mapDict.Add("晤談編號", data.InterviewNo); mapDict.Add("座號", StudSeatNo); mapDict.Add("晤談對象", data.IntervieweeType); mapDict.Add("晤談方式", data.InterviewType); if (data.InterviewDate.HasValue) mapDict.Add("晤談日期", data.InterviewDate.Value.ToShortDateString()); mapDict.Add("時間", data.InterviewTime); mapDict.Add("地點", data.Place); mapDict.Add("參與人員", ParseUDTXML1(data.Attendees)); mapDict.Add("晤談事由", data.Cause); mapDict.Add("輔導方式", ParseUDTXML1(data.CounselType)); mapDict.Add("輔導歸類", ParseUDTXML1(data.CounselTypeKind)); mapDict.Add("內容要點", data.ContentDigest); mapDict.Add("記錄者姓名", data.AuthorName); _dataDictList.Add(mapDict); } } } // word 資料合併 Document doc = new Document(); doc.Sections.Clear(); // 比對欄位名稱放值 List<string> mapFieldName = new List<string>(); mapFieldName.Add("校名"); mapFieldName.Add("學生姓名"); mapFieldName.Add("學號"); mapFieldName.Add("班級"); mapFieldName.Add("晤談老師"); mapFieldName.Add("晤談編號"); mapFieldName.Add("座號"); mapFieldName.Add("晤談對象"); mapFieldName.Add("晤談方式"); mapFieldName.Add("晤談日期"); mapFieldName.Add("時間"); mapFieldName.Add("地點"); mapFieldName.Add("參與人員"); mapFieldName.Add("晤談事由"); mapFieldName.Add("輔導方式"); mapFieldName.Add("輔導歸類"); mapFieldName.Add("內容要點"); mapFieldName.Add("記錄者姓名"); foreach (Dictionary<string, string> data in _dataDictList) { DataTable dt = new DataTable(); // 建立欄位名稱 foreach (string name in mapFieldName) dt.Columns.Add(name, typeof(string)); DataRow dr = dt.NewRow(); foreach (string name in mapFieldName) { if (data.ContainsKey(name)) dr[name] = data[name]; } dt.Rows.Add(dr); Document docTemplate = new Document(new MemoryStream(_DocTemplate)); DocumentBuilder _builder = new DocumentBuilder(docTemplate); docTemplate.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); docTemplate.MailMerge.RemoveEmptyParagraphs = true; docTemplate.MailMerge.Execute(dt); docTemplate.MailMerge.DeleteFields(); doc.Sections.Add(doc.ImportNode(docTemplate.Sections[0], true)); } e.Result = doc; }
void _bgWorker_DoWork(object sender, DoWorkEventArgs e) { _DataTable = new DataTable(); // 新增 DataTable Columns AddTableColumns(); _bgWorker.ReportProgress(1); // word 資料合併 Document doc = new Document(); doc.Sections.Clear(); // 取得資料 _StudentRecDict.Clear(); foreach (SHStudentRecord rec in SHStudent.SelectByIDs(_StudentIDList)) { if (!_StudentRecDict.ContainsKey(rec.ID)) //假如沒有這個ID才加入 { _StudentRecDict.Add(rec.ID, rec); } } //新加 _ClassStuRecDict.Clear(); foreach (SHStudentRecord rec in _StudentRecDict.Values) { if (rec.RefClassID != "") { SHClassRecord _class = SHClass.SelectByID(rec.RefClassID); if (!_ClassStuRecDict.ContainsKey(_class.ID)) { _ClassStuRecDict.Add(rec.ID, _class); } } //foreach (SHClassRecord recCla in SHClass.SelectByIDs(_ClassIDList)) //{ // if (rec.RefClassID == recCla.ID) // { // _ClassStuRecDict.Add(rec.ID, recCla); // } //} } _PhoneRecDict.Clear(); foreach (SHPhoneRecord rec in SHPhone.SelectByStudentIDs(_StudentIDList)) _PhoneRecDict.Add(rec.RefStudentID, rec); // 入學照片 _PhotoPDict.Clear(); _PhotoPDict = K12.Data.Photo.SelectFreshmanPhoto(_StudentIDList); // 畢業照片 _PhotoGDict.Clear(); _PhotoGDict = K12.Data.Photo.SelectGraduatePhoto(_StudentIDList); //監護人(父母親) _ParentRecDict.Clear(); foreach (SHParentRecord rec in SHParent.SelectByStudentIDs(_StudentIDList)) _ParentRecDict.Add(rec.RefStudentID, rec); //地址 _AddressRecDict.Clear(); foreach (SHAddressRecord rec in SHAddress.SelectByStudentIDs(_StudentIDList)) _AddressRecDict.Add(rec.RefStudentID, rec); // 學校名稱 string SchoolName = K12.Data.School.ChineseName; _bgWorker.ReportProgress(30); // 開始填入資料 foreach (string StudID in _StudentIDList) { DataRow row = _DataTable.NewRow(); row["學校名稱"] = SchoolName; if (_StudentRecDict.ContainsKey(StudID)) { if (_StudentRecDict[StudID].Department != null) row["科別"] = _StudentRecDict[StudID].Department.FullName; else row["科別"] = ""; row["班級"] = _ClassStuRecDict[StudID].Name;//新加 row["學號"] = _StudentRecDict[StudID].StudentNumber; row["座號"] = _StudentRecDict[StudID].SeatNo; row["條碼"] = _StudentRecDict[StudID].StudentNumber; row["姓名"] = _StudentRecDict[StudID].Name; row["英文姓名"] = _StudentRecDict[StudID].EnglishName; row["性別"] = _StudentRecDict[StudID].Gender; row["身分證字號"] = _StudentRecDict[StudID].IDNumber; if (_StudentRecDict[StudID].Birthday.HasValue) { DateTime dtb = _StudentRecDict[StudID].Birthday.Value; row["生日"] = dtb.Year + "/" + dtb.Month + "/" + dtb.Day; row["生日2"] = (dtb.Year - 1911) + "/" + dtb.Month + "/" + dtb.Day; } else { row["生日"] = ""; row["生日2"] = ""; } } if (_PhotoPDict.ContainsKey(StudID)) { row["照片"] = _PhotoPDict[StudID]; row["照片2"] = _PhotoPDict[StudID]; } if (_PhotoGDict.ContainsKey(StudID)) { row["畢業照片"] = _PhotoGDict[StudID]; row["畢業照片2"] = _PhotoGDict[StudID]; } if (_PhoneRecDict.ContainsKey(StudID)) { row["戶籍電話"] = _PhoneRecDict[StudID].Permanent; row["聯絡電話"] = _PhoneRecDict[StudID].Contact; } if (_ParentRecDict.ContainsKey(StudID)) { row["監護人電話"] = _ParentRecDict[StudID].CustodianPhone; row["父親電話"] = _ParentRecDict[StudID].FatherPhone; row["母親電話"] = _ParentRecDict[StudID].MotherPhone; //新加 if (radiobtnCustodianName.Checked) { row["監護人姓名"] = _ParentRecDict[StudID].CustodianName; } else if (radiobtnFatherName.Checked) { row["父親姓名"] = _ParentRecDict[StudID].FatherName; } else { row["母親姓名"] = _ParentRecDict[StudID].MotherName; } } if (_AddressRecDict.ContainsKey(StudID)) { //新加 if (radiobtnPermanentAddress.Checked) { row["戶籍地址"] = _AddressRecDict[StudID].PermanentAddress; } else if (radiobtnMailingAddress.Checked) { row["聯絡地址"] = _AddressRecDict[StudID].MailingAddress; } else { row["其它地址"] = _AddressRecDict[StudID].Address1;//新加 } } _DataTable.Rows.Add(row); } _bgWorker.ReportProgress(70); int page = 1; count = 0; List<string> mapNameList = _Config.Template.ToDocument().MailMerge.GetFieldNames().ToList(); foreach (string str in mapNameList) if (str == "姓名") count++; for (int i = 1; i <= _StudentIDList.Count; i++) if (i % count == 0 && i >= count) page++; // 當人數與一頁個數相同,只有一頁 if (count == _StudentIDList.Count) page = 1; for (int i = 1; i <= page; i++) { Document document = new Document(); document = _Config.Template.ToDocument(); doc.Sections.Add(doc.ImportNode(document.Sections[0], true)); } doc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); doc.MailMerge.Execute(_DataTable); doc.MailMerge.RemoveEmptyParagraphs = true; doc.MailMerge.DeleteFields(); //doc.Sections.Add(doc.ImportNode(document.Sections[0], true)); _bgWorker.ReportProgress(95); e.Result = doc; }
void _bgWork_DoWork(object sender, DoWorkEventArgs e) { Document doc = new Document(); doc.Sections.Clear(); // 比對欄位名稱放值 foreach (Dictionary<string, string> data in _DocDataList) { DataTable dt = new DataTable(); // 建立欄位名稱 foreach (string name in _MergeNameList) dt.Columns.Add(name, typeof(string)); DataRow dr = dt.NewRow(); foreach (string name in _MergeNameList) { if (data.ContainsKey(name)) dr[name] = data[name]; } dt.Rows.Add(dr); docTemplate = new Document(new MemoryStream(_DocTemplate)); _builder = new DocumentBuilder(docTemplate); docTemplate.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField); docTemplate.MailMerge.RemoveEmptyParagraphs = true; docTemplate.MailMerge.Execute(dt); docTemplate.MailMerge.DeleteFields(); doc.Sections.Add(doc.ImportNode(docTemplate.Sections[0], true)); } e.Result = doc; }