public void Execute()
        {
            GetScoreSheet();

            List <UDT.WeeklyStats> listInsertData = new List <UDT.WeeklyStats>();

            // 1.計算各班週成績
            foreach (string classID in this.dicClassCalculatorByID.Keys)
            {
                ClassWeeklyScoreCalculator calculator = this.dicClassCalculatorByID[classID];
                // 取得各班週成績
                decimal weeklyScore = calculator.CalculateWeeklyScore();
                // 取得班級各區週成績
                List <string> listAreaScore = calculator.ListAreaScore;
                // 資料整理
                UDT.WeeklyStats data = new UDT.WeeklyStats();
                data.SchoolYear      = int.Parse(this._schoolYear);
                data.Semester        = int.Parse(this._semester);
                data.StartDate       = DateTime.Parse(this._startDate);
                data.EndDate         = DateTime.Parse(this._endDate);
                data.RefClassID      = int.Parse(classID);
                data.GradeYear       = calculator.GradeYear;
                data.WeekTotal       = weeklyScore;
                data.AreaWeeklyTotal = string.Join(",", listAreaScore);
                data.WeekNumber      = this._weekNumber;
                data.CreateTime      = DateTime.Now;
                data.CreatedBy       = this._userName;

                listInsertData.Add(data);
            }

            // 0. 刪除日期區間週統計
            List <UDT.WeeklyStats> listWeeklyStats = this._access.Select <UDT.WeeklyStats>(string.Format("school_year = {0} AND semester = {1} AND week_number = {2}", this._schoolYear, this._semester, this._weekNumber));

            this._access.DeletedValues(listWeeklyStats);

            // 2.更新資料庫
            this._access.InsertValues(listInsertData);
        }
        private void getClassData()
        {
            string    sql = @"
SELECT
    id
    , class_name
    , grade_year
FROM
    class
WHERE
    class.grade_year IN (1,2,3)
";
            DataTable dt  = this._qh.Select(sql);

            foreach (DataRow row in dt.Rows)
            {
                if (!dicClassCalculatorByID.ContainsKey("" + row["id"]))
                {
                    ClassWeeklyScoreCalculator calculator = new ClassWeeklyScoreCalculator("" + row["id"], "" + row["class_name"], int.Parse("" + row["grade_year"]));
                    dicClassCalculatorByID.Add("" + row["id"], calculator);
                }
            }
        }