private void _BGWLoadData_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { DataTable dataTable = e.Result as DataTable; Dictionary<string, List<string>> dicCourseTeachers = new Dictionary<string, List<string>>(); // 授課教師 DataTable dataTable_Teacher = (new QueryHelper()).Select(string.Format(@"select course.id as ref_course_id, teacher.id as ref_teacher_id, course.course_name, teacher.teacher_name from course join $ischool.emba.course_instructor as ci on course.id=ci.ref_course_id join teacher on teacher.id=ci.ref_teacher_id where teacher.id in (SELECT distinct teacher.id FROM course LEFT JOIN $ischool.emba.course_instructor ON $ischool.emba.course_instructor.ref_course_id = course.id LEFT JOIN teacher ON teacher.id = $ischool.emba.course_instructor.ref_teacher_id LEFT JOIN tag_teacher ON tag_teacher.ref_teacher_id = teacher.id LEFT JOIN tag ON tag.id = tag_teacher.ref_tag_id WHERE tag.category = 'Teacher' AND tag.prefix = '教師') order by course.course_name, teacher.teacher_name")); foreach (DataRow row in dataTable_Teacher.Rows) { if (!dicCourseTeachers.ContainsKey(row["ref_course_id"] + "")) dicCourseTeachers.Add(row["ref_course_id"] + "", new List<string>()); dicCourseTeachers[row["ref_course_id"] + ""].Add(row["ref_teacher_id"] + ""); } dataTable.TableName = "授課教師"; if (dataTable == null || dataTable.Rows.Count == 0) { FISCA.Presentation.Controls.MsgBox.Show("無資料可匯出。", "欄位空白", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } //string fileName = "課程檔"; //string filePath = string.Empty; //string message = string.Empty; //System.Windows.Forms.FolderBrowserDialog folder = new FolderBrowserDialog(); //do //{ // DialogResult dr = folder.ShowDialog(); // if (dr == DialogResult.OK) // filePath = folder.SelectedPath; // if (dr == DialogResult.Cancel) // return; //} while (!System.IO.Directory.Exists(filePath)); DBF_Table dbf_Table = new DBF_Table(); // 加入 dbf 欄位 dbf_Table.Fields.Add(new DBF_Field("ser_no", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("co_chg", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("dpt_code", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("year", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("cou_code", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("class", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("credit", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("tlec", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("tlab", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("forh", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("sel_code", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("cou_cname", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("cou_ename", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("tea_seq", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("tea_code", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("tea_cname", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("tea_ename", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("clsrom_1", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("clsrom_2", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("clsrom_3", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("clsrom_4", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("clsrom_5", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("clsrom_6", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("st1", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("day1", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("st2", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("day2", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("st3", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("day3", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("st4", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("day4", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("st5", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("day5", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("st6", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("day6", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("limit", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("tno", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("eno", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("co_select", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("sno", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("mark", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("co_rep", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("co_tp", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("co_gmark", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("co_eng", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("grpno", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("initsel", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("outside", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("pre_course", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("dpt_abbr", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("cou_teacno", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("chgitem", FieldType.Char, 250, 0, false)); dbf_Table.Fields.Add(new DBF_Field("engmark", FieldType.Char, 250, 0, false)); DataTable newDataTable = dataTable.Clone(); DataRow dRow = dataTable.NewRow(); foreach (DataRow dataRow in dataTable.Rows) { string teacher_id = dataRow["教師系統編號"] + ""; string course_id = dataRow["課程系統編號"] + ""; if (dicCourseTeachers.ContainsKey(course_id)) { if (!string.IsNullOrEmpty(teacher_id)) { if (!dicCourseTeachers[course_id].Contains(teacher_id)) continue; } } if (newDataTable.Rows.Count == 0) newDataTable.ImportRow(dataRow); else { if (course_id == dRow["課程系統編號"].ToString()) { if (!string.IsNullOrWhiteSpace(dataRow["授課教師"].ToString())) { if (!string.IsNullOrWhiteSpace(newDataTable.Rows[newDataTable.Rows.Count - 1]["授課教師"].ToString())) newDataTable.Rows[newDataTable.Rows.Count - 1]["授課教師"] += ";" + dataRow["授課教師"].ToString().Trim(); else newDataTable.Rows[newDataTable.Rows.Count - 1]["授課教師"] = dataRow["授課教師"].ToString().Trim(); } if (!string.IsNullOrWhiteSpace(dataRow["授課教師英文名稱"].ToString())) { if (!string.IsNullOrWhiteSpace(newDataTable.Rows[newDataTable.Rows.Count - 1]["授課教師英文名稱"].ToString())) newDataTable.Rows[newDataTable.Rows.Count - 1]["授課教師英文名稱"] += ";" + dataRow["授課教師英文名稱"].ToString().Trim(); else newDataTable.Rows[newDataTable.Rows.Count - 1]["授課教師英文名稱"] = dataRow["授課教師英文名稱"].ToString().Trim(); } if (!string.IsNullOrWhiteSpace(dataRow["員工代碼"].ToString())) { if (!string.IsNullOrWhiteSpace(newDataTable.Rows[newDataTable.Rows.Count - 1]["員工代碼"].ToString())) newDataTable.Rows[newDataTable.Rows.Count - 1]["員工代碼"] += ";" + dataRow["員工代碼"].ToString().Trim(); else newDataTable.Rows[newDataTable.Rows.Count - 1]["員工代碼"] = dataRow["員工代碼"].ToString().Trim(); } if (!string.IsNullOrWhiteSpace(dataRow["教師代碼"].ToString())) { if (!string.IsNullOrWhiteSpace(newDataTable.Rows[newDataTable.Rows.Count - 1]["教師代碼"].ToString())) newDataTable.Rows[newDataTable.Rows.Count - 1]["教師代碼"] += ";" + dataRow["教師代碼"].ToString().Trim(); else newDataTable.Rows[newDataTable.Rows.Count - 1]["教師代碼"] = dataRow["教師代碼"].ToString().Trim(); } } else { newDataTable.ImportRow(dataRow); } } dRow = dataRow; } // 加入 dbf 資料 foreach (DataRow row in newDataTable.Rows) { DBF_Row dbf_row = dbf_Table.NewRow(); dbf_row["ser_no"] = ""; dbf_row["co_chg"] = ""; dbf_row["dpt_code"] = (row["系所代碼"] + ""); dbf_row["year"] = ""; dbf_row["cou_code"] = (row["課程識別碼"] + ""); dbf_row["class"] = (row["開課班次"] + ""); dbf_row["credit"] = (row["學分數"] + ""); dbf_row["tlec"] = "0"; dbf_row["tlab"] = "0"; dbf_row["forh"] = ""; dbf_row["sel_code"] = ((row["必選修"] + "").ToUpper() == "FALSE" ? "7" : "3"); dbf_row["cou_cname"] = (row["開課"] + ""); dbf_row["cou_ename"] = (row["課程英文名稱"] + ""); dbf_row["tea_seq"] = (row["員工代碼"] + ""); dbf_row["tea_code"] = (row["教師代碼"] + ""); dbf_row["tea_cname"] = (row["授課教師"] + ""); dbf_row["tea_ename"] = (row["授課教師英文名稱"] + ""); dbf_row["clsrom_1"] = ""; dbf_row["clsrom_2"] = ""; dbf_row["clsrom_3"] = ""; dbf_row["clsrom_4"] = ""; dbf_row["clsrom_5"] = ""; dbf_row["clsrom_6"] = ""; dbf_row["st1"] = ""; dbf_row["day1"] = ""; dbf_row["st2"] = ""; dbf_row["day2"] = ""; dbf_row["st3"] = ""; dbf_row["day3"] = ""; dbf_row["st4"] = ""; dbf_row["day4"] = ""; dbf_row["st5"] = ""; dbf_row["day5"] = ""; dbf_row["st6"] = ""; dbf_row["day6"] = ""; dbf_row["limit"] = ""; dbf_row["tno"] = ""; dbf_row["eno"] = "0"; dbf_row["co_select"] = "2"; dbf_row["sno"] = "0"; dbf_row["mark"] = (row["備註"] + ""); dbf_row["co_rep"] = "0"; dbf_row["co_tp"] = "1"; dbf_row["co_gmark"] = ""; dbf_row["co_eng"] = ""; dbf_row["grpno"] = "0"; dbf_row["initsel"] = ""; dbf_row["outside"] = "0"; dbf_row["pre_course"] = ""; // 解析課號(6+4) string s6 = string.Empty; string s4 = string.Empty; string s = (row["課號"] + ""); if (s.Length >= 4) s4 = s.Substring(s.Length - 4, 4); else s4 = s; s6 = s.Substring(0, s.Length - s4.Length); dbf_row["dpt_abbr"] = s6; dbf_row["cou_teacno"] = s4; dbf_row["chgitem"] = ""; dbf_row["engmark"] = ""; dbf_Table.Rows.Add(dbf_row); } try { Workbook wb = dbf_Table.ToDataTable().ToWorkbook(true); wb.Save(true, "匯出課程檔(Excel 格式)"); } catch (Exception ex) { MessageBox.Show(ex.Message); } this.Dispose(); }