void _bgWorker_DoWork(object sender, DoWorkEventArgs e) { _bgWorker.ReportProgress(1); // 取得班級 _ClassDataList = QueryData.GetClassDataByClassIDs(_SelectClassIDList); _bgWorker.ReportProgress(20); // 取得學生 _StudentDataList = QueryData.GetStudentDataListByClassIDs(_SelectClassIDList); _bgWorker.ReportProgress(40); // 取得學期成績並判斷 _StudentDataList = Utility.CalcStudDomainScorePass(_StudentDataList, _SchoolYear, _Semester, _passScore); _bgWorker.ReportProgress(70); // 取得樣版 Workbook wb = new Workbook(new MemoryStream(Properties.Resources.給試務樣版)); // 使用領域名稱 List <string> DomainNameList = Utility.GetDomainNameList(); // copy Template int wstIdx = wb.Worksheets.AddCopy("給試務樣版"); Worksheet wst = wb.Worksheets[wstIdx]; wst.Name = "給試務"; // 依班級列印 int rowIdx = 1; Dictionary <string, int> ReExamDomainCountDict = new Dictionary <string, int>(); foreach (ClassData cd in _ClassDataList) { ReExamDomainCountDict.Clear(); foreach (StudentData sd in _StudentDataList.Where(x => x.ClassID == cd.ClassID)) { foreach (string name in DomainNameList) { if (sd.DomainScorePassDict.ContainsKey(name)) { if (sd.DomainScorePassDict[name] == false) { if (!ReExamDomainCountDict.ContainsKey(name)) { ReExamDomainCountDict.Add(name, 0); } ReExamDomainCountDict[name]++; } } } } // 計算各領域不及格人數 cd.DomainReExamCount = ReExamDomainCountDict; wst.Cells[rowIdx, 0].PutValue(cd.ClassName); int colIdx = 1; foreach (string name in DomainNameList) { wst.Cells[rowIdx, colIdx].PutValue(0); if (cd.DomainReExamCount.ContainsKey(name)) { wst.Cells[rowIdx, colIdx].PutValue(cd.DomainReExamCount[name]); } colIdx++; } rowIdx++; } _bgWorker.ReportProgress(100); string rr = "J" + rowIdx; Range rng = wst.Cells.CreateRange("A2", rr); Style sty = wb.CreateStyle(); sty.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; sty.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; sty.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; sty.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; StyleFlag sf = new StyleFlag(); sf.Borders = true; rng.ApplyStyle(sty, sf); // 移除樣版 wb.Worksheets.RemoveAt("給試務樣版"); e.Result = wb; }
void _bgWorker_DoWork(object sender, DoWorkEventArgs e) { _bgWorker.ReportProgress(1); // 取得班級 _ClassDataList = QueryData.GetClassDataByClassIDs(_SelectClassIDList); _bgWorker.ReportProgress(20); // 取得學生 _StudentDataList = QueryData.GetStudentDataListByClassIDs(_SelectClassIDList); _bgWorker.ReportProgress(40); // 取得學期成績並判斷 _StudentDataList = Utility.CalcStudDomainScorePass(_StudentDataList, _SchoolYear, _Semester, _passScore); _bgWorker.ReportProgress(70); // 取得樣版 Workbook wb = new Workbook(new MemoryStream(Properties.Resources.給班導師樣版)); // 使用領域名稱 List <string> DomainNameList = Utility.GetDomainNameList(); // copy Template int wstIdx = wb.Worksheets.AddCopy("給導師樣版"); Worksheet wst = wb.Worksheets[wstIdx]; wst.Name = "給導師"; string strHeader = _SchoolYear + "學年度第" + _Semester + "學期「應補考領域」班級學生名單"; // 設定頁首 wst.PageSetup.SetHeader(1, strHeader); // 依班級列印 int rowIdx = 1; foreach (ClassData cd in _ClassDataList) { foreach (StudentData sd in _StudentDataList.Where(x => x.ClassID == cd.ClassID)) { wst.Cells[rowIdx, 0].PutValue(sd.GradeYear); wst.Cells[rowIdx, 1].PutValue(sd.ClassName); wst.Cells[rowIdx, 2].PutValue(sd.SeatNo); wst.Cells[rowIdx, 3].PutValue(sd.Name); int colIdx = 4; // 是否需要補考與成績 foreach (string name in DomainNameList) { // 印是否需要補考 if (sd.DomainScorePassDict.ContainsKey(name)) { if (sd.DomainScorePassDict[name] == false) { wst.Cells[rowIdx, colIdx].PutValue("補考"); } } // 印成績 if (sd.DomainScoreDict.ContainsKey(name)) { wst.Cells[rowIdx, colIdx + 9].PutValue(sd.DomainScoreDict[name]); } colIdx++; } rowIdx++; } // 加入分頁 wst.HorizontalPageBreaks.Add(rowIdx); } _bgWorker.ReportProgress(100); string rr = "V" + rowIdx; Range rng = wst.Cells.CreateRange("A2", rr); Style sty = wb.CreateStyle(); sty.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; sty.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; sty.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; sty.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; StyleFlag sf = new StyleFlag(); sf.Borders = true; rng.ApplyStyle(sty, sf); // 移除樣版 wb.Worksheets.RemoveAt("給導師樣版"); e.Result = wb; }