Exemplo n.º 1
0
        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;
        }