private void BgWorkerReport_DoWork(object sender, DoWorkEventArgs e) { DataTable dtTable = new DataTable(); bgWorkerReport.ReportProgress(1); Document docTemplate = _Configure.Template; if (docTemplate == null) { docTemplate = new Document(new MemoryStream(Properties.Resources.屏東班級服務表現樣板)); } // 校名 string SchoolName = K12.Data.School.ChineseName; // 取得班導師 Dictionary <string, string> ClassTeacherNameDict = QueryData.GetClassTeacherNameDictByClassID(ClassIDList); // 產生合併欄位 dtTable.Columns.Add("學校名稱"); dtTable.Columns.Add("班級名稱"); dtTable.Columns.Add("學年度"); for (int studIdx = 1; studIdx <= 100; studIdx++) { dtTable.Columns.Add("座號" + studIdx); dtTable.Columns.Add("姓名" + studIdx); dtTable.Columns.Add("服務表現項目7上" + studIdx); dtTable.Columns.Add("服務表現項目7下" + studIdx); dtTable.Columns.Add("服務表現項目8上" + studIdx); dtTable.Columns.Add("服務表現項目8下" + studIdx); dtTable.Columns.Add("服務表現項目9上" + studIdx); dtTable.Columns.Add("服務表現積分" + studIdx); dtTable.Columns.Add("服務表現備註" + studIdx); } // 取得班級學生相關資料 Dictionary <string, List <StudentInfo> > ClassStudentDict = QueryData.GetClassStudentDict(ClassIDList); Dictionary <string, ClassRecord> classRecDict = new Dictionary <string, ClassRecord>(); List <ClassRecord> claRecList = Class.SelectByIDs(ClassIDList); foreach (ClassRecord data in claRecList) { if (!classRecDict.ContainsKey(data.ID)) { classRecDict.Add(data.ID, data); } } //StreamWriter sw1 = new StreamWriter(Application.StartupPath + "\\合併欄位.txt"); //StringBuilder sb1 = new StringBuilder(); //foreach (DataColumn dc in dtTable.Columns) // sb1.AppendLine(dc.Caption); //sw1.Write(sb1.ToString()); //sw1.Close(); // 排序後班級 foreach (string class_id in ClassTeacherNameDict.Keys) { DataRow row = dtTable.NewRow(); row["學校名稱"] = SchoolName; if (classRecDict.ContainsKey(class_id)) { row["班級名稱"] = classRecDict[class_id].Name; } int sc; if (int.TryParse(K12.Data.School.DefaultSchoolYear, out sc)) { row["學年度"] = sc + 1; } if (ClassStudentDict.ContainsKey(class_id)) { int studIdx = 1; foreach (StudentInfo si in ClassStudentDict[class_id]) { row["座號" + studIdx] = si.SeatNo; row["姓名" + studIdx] = si.StudentName; row["服務表現項目7上" + studIdx] = string.Join("\n", si.ServiceItem_7a.ToArray()); row["服務表現項目7下" + studIdx] = string.Join("\n", si.ServiceItem_7b.ToArray()); row["服務表現項目8上" + studIdx] = string.Join("\n", si.ServiceItem_8a.ToArray()); row["服務表現項目8下" + studIdx] = string.Join("\n", si.ServiceItem_8b.ToArray()); row["服務表現項目9上" + studIdx] = string.Join("\n", si.ServiceItem_9a.ToArray()); row["服務表現積分" + studIdx] = si.ServiceScore; row["服務表現備註" + studIdx] = string.Join("\n", si.ServiceMemo.ToArray()); studIdx++; } } dtTable.Rows.Add(row); } //// debug //dtTable.TableName = "debug"; //dtTable.WriteXml(Application.StartupPath + "\\debug.xml"); Document doc = _Configure.Template; doc.MailMerge.Execute(dtTable); doc.MailMerge.DeleteFields(); e.Result = doc; bgWorkerReport.ReportProgress(100); }