/// --------------------------------------------------------------------------
        /// <summary>
        ///     アサイン担当用稼働表エクセルシート作成
        ///     : closedXML版 2018/02/22</summary>
        /// <param name="t">
        ///     組合員予定申告データクラス </param>
        /// <param name="oxlsWorkSheet">
        ///     アサイン担当用稼働表エクセルシート </param>
        /// <returns>
        ///     作成:true, 未作成:false</returns>
        /// --------------------------------------------------------------------------
        private bool xlsCellsSetXML(clsWorksTbl t, ClosedXML.Excel.IXLWorksheet sheet)
        {
            //Excel.Range[] rng = new Microsoft.Office.Interop.Excel.Range[2];

            // 該当期間のデータか検証
            string yymm = t.会員稼働予定.年.ToString() + t.会員稼働予定.月.ToString().PadLeft(2, '0');

            bool   yymmOn = false;
            string col    = string.Empty;

            for (int iX = 0; iX < 6; iX++)
            {
                if (sheetYYMM[iX, 0] == yymm)
                {
                    col    = sheetYYMM[iX, 1];
                    yymmOn = true;
                    break;
                }
            }

            if (!yymmOn)
            {
                return(false); // 非該当期間のため読み飛ばし
            }

            // 組合員が変わったら行番号を加算する
            if (t.cardNumBox != string.Empty && t.cardNumBox != t.cardNo.ToString())
            {
                //セル下部へ点線ヨコ罫線を引く 2018/02/28
                sheet.Range(sheet.Cell(t.sRow, 1).Address,
                            sheet.Cell(t.sRow, sheet.LastCellUsed().Address.ColumnNumber).Address).Style.Border.BottomBorder = XLBorderStyleValues.Dotted;

                //// 表の外枠右罫線を引く 2018/02/27
                //sheet.Range(sheet.Cell("A1"), sheet.Cell("E10")).Style.Border.RightBorder = XLBorderStyleValues.Thin;

                t.sRow++;
            }

            t.cardNumBox = t.cardNo.ToString();    // カード番号

            // 作業用シートにデータ貼り付け
            if (t.ew == cEAST)
            {
                sheet.Cell(t.sRow, 1).SetValue(t.氏名);
                sheet.Cell(t.sRow, 2).SetValue(t.会員稼働予定.フリガナ);
                sheet.Cell(t.sRow, 3).SetValue(t.JFG加入年.ToString());
                sheet.Cell(t.sRow, 4).SetValue(t.携帯電話番号);
                sheet.Cell(t.sRow, 5).SetValue(t.会員稼働予定.稼働日数.ToString());
                sheet.Cell(t.sRow, 6).SetValue(t.会員稼働予定.自己申告日数.ToString());
                sheet.Cell(t.sRow, 7).SetValue(t.会員稼働予定.備考);
                sheet.Cell(t.sRow, 8).SetValue(Utility.nulltoString(t.会員稼働予定.申告年月日));
            }
            else if (t.ew == cWEST)
            {
                sheet.Cell(t.sRow, 1).SetValue(t.地域名);
                sheet.Cell(t.sRow, 2).SetValue(t.氏名);
                sheet.Cell(t.sRow, 3).SetValue(t.会員稼働予定.フリガナ);
                sheet.Cell(t.sRow, 4).SetValue(t.JFG加入年.ToString());
                sheet.Cell(t.sRow, 5).SetValue(t.携帯電話番号);
                sheet.Cell(t.sRow, 6).SetValue(t.会員稼働予定.稼働日数.ToString());
                sheet.Cell(t.sRow, 7).SetValue(t.会員稼働予定.自己申告日数.ToString());
                sheet.Cell(t.sRow, 8).SetValue(t.会員稼働予定.備考);
                sheet.Cell(t.sRow, 9).SetValue(Utility.nulltoString(t.会員稼働予定.申告年月日));
            }

            // アサイン担当者か検証する
            jfgDataClassDataContext db = new jfgDataClassDataContext();
            var s = db.アサイン担当者.Where(a => a.カード番号 == double.Parse(t.cardNumBox));

            if (s.Count() > 0)
            {
                // 氏名セルのBackColorを黄色にする
                if (t.ew == cEAST) // 東
                {
                    // 2018/02/22
                    sheet.Cell(t.sRow, 1).Style.Fill.SetBackgroundColor(XLColor.Yellow);
                    sheet.Cell(t.sRow, 2).Style.Fill.SetBackgroundColor(XLColor.Yellow);
                }
                else if (t.ew == cWEST)
                {
                                        // 西
                    {
                        // 2018/02/22
                        sheet.Cell(t.sRow, 1).Style.Fill.SetBackgroundColor(XLColor.Yellow);
                        sheet.Cell(t.sRow, 2).Style.Fill.SetBackgroundColor(XLColor.Yellow);
                        sheet.Cell(t.sRow, 3).Style.Fill.SetBackgroundColor(XLColor.Yellow);
                    }
                }
            }

            // 予定申告内容をセルに貼り付ける
            sheet.Cell(t.sRow, int.Parse(col)).SetValue(t.会員稼働予定.d1);
            sheet.Cell(t.sRow, int.Parse(col) + 1).SetValue(t.会員稼働予定.d2);
            sheet.Cell(t.sRow, int.Parse(col) + 2).SetValue(t.会員稼働予定.d3);
            sheet.Cell(t.sRow, int.Parse(col) + 3).SetValue(t.会員稼働予定.d4);
            sheet.Cell(t.sRow, int.Parse(col) + 4).SetValue(t.会員稼働予定.d5);
            sheet.Cell(t.sRow, int.Parse(col) + 5).SetValue(t.会員稼働予定.d6);
            sheet.Cell(t.sRow, int.Parse(col) + 6).SetValue(t.会員稼働予定.d7);
            sheet.Cell(t.sRow, int.Parse(col) + 7).SetValue(t.会員稼働予定.d8);
            sheet.Cell(t.sRow, int.Parse(col) + 8).SetValue(t.会員稼働予定.d9);
            sheet.Cell(t.sRow, int.Parse(col) + 9).SetValue(t.会員稼働予定.d10);
            sheet.Cell(t.sRow, int.Parse(col) + 10).SetValue(t.会員稼働予定.d11);
            sheet.Cell(t.sRow, int.Parse(col) + 11).SetValue(t.会員稼働予定.d12);
            sheet.Cell(t.sRow, int.Parse(col) + 12).SetValue(t.会員稼働予定.d13);
            sheet.Cell(t.sRow, int.Parse(col) + 13).SetValue(t.会員稼働予定.d14);
            sheet.Cell(t.sRow, int.Parse(col) + 14).SetValue(t.会員稼働予定.d15);
            sheet.Cell(t.sRow, int.Parse(col) + 15).SetValue(t.会員稼働予定.d16);
            sheet.Cell(t.sRow, int.Parse(col) + 16).SetValue(t.会員稼働予定.d17);
            sheet.Cell(t.sRow, int.Parse(col) + 17).SetValue(t.会員稼働予定.d18);
            sheet.Cell(t.sRow, int.Parse(col) + 18).SetValue(t.会員稼働予定.d19);
            sheet.Cell(t.sRow, int.Parse(col) + 19).SetValue(t.会員稼働予定.d20);
            sheet.Cell(t.sRow, int.Parse(col) + 20).SetValue(t.会員稼働予定.d21);
            sheet.Cell(t.sRow, int.Parse(col) + 21).SetValue(t.会員稼働予定.d22);
            sheet.Cell(t.sRow, int.Parse(col) + 22).SetValue(t.会員稼働予定.d23);
            sheet.Cell(t.sRow, int.Parse(col) + 23).SetValue(t.会員稼働予定.d24);
            sheet.Cell(t.sRow, int.Parse(col) + 24).SetValue(t.会員稼働予定.d25);
            sheet.Cell(t.sRow, int.Parse(col) + 25).SetValue(t.会員稼働予定.d26);
            sheet.Cell(t.sRow, int.Parse(col) + 26).SetValue(t.会員稼働予定.d27);
            sheet.Cell(t.sRow, int.Parse(col) + 27).SetValue(t.会員稼働予定.d28);
            sheet.Cell(t.sRow, int.Parse(col) + 28).SetValue(t.会員稼働予定.d29);
            sheet.Cell(t.sRow, int.Parse(col) + 29).SetValue(t.会員稼働予定.d30);
            sheet.Cell(t.sRow, int.Parse(col) + 30).SetValue(t.会員稼働予定.d31);

            return(true);
        }
        ///----------------------------------------------------
        /// <summary>
        ///     稼働表作成 </summary>
        ///----------------------------------------------------
        public void worksOutput()
        {
            // Excelテンプレートシート開く
            Excel.Application oXls = new Excel.Application();

            Excel.Workbook oXlsBook = (Excel.Workbook)(oXls.Workbooks.Open(Properties.Settings.Default.xlsKadouPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                                                           Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                                                           Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                                                           Type.Missing, Type.Missing));

            Excel.Workbook oXlsWork = (Excel.Workbook)(oXls.Workbooks.Open(Properties.Settings.Default.xlsTempPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                                                           Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                                                           Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                                                           Type.Missing, Type.Missing));

            Excel.Worksheet oxlsSheet     = null;       // 入力シート
            Excel.Worksheet oxlsWorkSheet = null;       // 作業用ワークシート

            Excel.Range[] rng = new Microsoft.Office.Interop.Excel.Range[2];
            Excel.Range   rngDay;
            Excel.Range[] rngs = new Microsoft.Office.Interop.Excel.Range[31];

            DateTime stDate;
            DateTime edDate;

            try
            {
                // 稼働予定開始年月日
                stDate = DateTime.Parse(DateTime.Today.Year.ToString() + "/" + DateTime.Today.Month.ToString() + "/01");

                // 稼働予定終了年月日
                edDate = stDate.AddMonths(6).AddDays(-1);

                int ew = 0;

                while (ew < sCnt)
                {
                    oxlsSheet = (Excel.Worksheet)oXlsBook.Sheets[ew + 1];    // 東西テンプレートシート

                    // 言語別シートを作成
                    for (int i = 1; i <= gengo.GetLength(0); i++)
                    {
                        int sNum = i + (10 * ew);

                        // ページシートを追加する
                        oxlsSheet.Copy(Type.Missing, oXlsWork.Sheets[sNum]);

                        // カレントシート
                        oxlsWorkSheet      = (Excel.Worksheet)oXlsWork.Sheets[sNum + 1];
                        oxlsWorkSheet.Name = sheetName[ew] + "・" + gengo[i - 1, 1];

                        int xCol = 0;   // 日列初期値

                        // 稼働予定期間のカレンダーをセット
                        for (int mon = 0; mon < 6; mon++)
                        {
                            // 該当月
                            DateTime wDt = stDate.AddMonths(mon);
                            xCol = 31 * mon + ew + 9;
                            oxlsWorkSheet.Cells[1, xCol] = wDt.ToShortDateString();  // 9,40,71,102,・・・

                            // 年月と開始列の配列にセット
                                sheetYYMM[mon, 0] = wDt.Year.ToString() + wDt.Month.ToString().PadLeft(2, '0');
                            sheetYYMM[mon, 1] = xCol.ToString();

                            DateTime dDay;

                            // 該当月の暦
                            int dy = 0;
                            while (dy < 31)
                            {
                                if (DateTime.TryParse(wDt.Year.ToString() + "/" + wDt.Month.ToString() + "/" + (dy + 1).ToString(), out dDay))
                                {
                                    oxlsWorkSheet.Cells[2, xCol + dy] = (dy + 1).ToString();    // 日
                                    oxlsWorkSheet.Cells[3, xCol + dy] = dDay.ToString("ddd");   // 曜日
                                }
                                else
                                {
                                    oxlsWorkSheet.Cells[2, xCol + dy] = string.Empty;
                                    oxlsWorkSheet.Cells[3, xCol + dy] = string.Empty;
                                }

                                dy++;
                            }
                        }

                        // 組合員予定申告データを取得
                        string cardNum = string.Empty;
                        string gCode   = gengo[i - 1, 0];
                        int    sRow    = sheetStRow;

                        jfgDataClassDataContext db = new jfgDataClassDataContext();

                        // 東・LINQ
                        var linqEast = db.会員情報.Where(a => (a.言語1 == int.Parse(gCode) || a.言語2 == int.Parse(gCode) ||
                                                           a.言語3 == int.Parse(gCode) || a.言語4 == int.Parse(gCode) ||
                                                           a.言語5 == int.Parse(gCode)) && a.東西 == 1)
                                       .OrderBy(a => a.会員稼働予定.フリガナ).ThenBy(a => a.会員稼働予定.カード番号).ThenBy(a => a.会員稼働予定.年).ThenBy(a => a.会員稼働予定.月)
                                       .Select(a => new {
                            cardno = a.カード番号,
                            氏名     = a.氏名,
                            携帯電話番号 = a.携帯電話番号,
                            JFG加入年 = a.JFG加入年,
                            a.会員稼働予定
                        });

                        // 西・LINQ
                        var linqWest = db.会員情報.Where(a => (a.言語1 == int.Parse(gCode) || a.言語2 == int.Parse(gCode) ||
                                                           a.言語3 == int.Parse(gCode) || a.言語4 == int.Parse(gCode) ||
                                                           a.言語5 == int.Parse(gCode)) && a.東西 == 2)
                                       .OrderBy(a => a.地域コード).ThenBy(a => a.会員稼働予定.フリガナ).ThenBy(a => a.カード番号).ThenBy(a => a.会員稼働予定.年).ThenBy(a => a.会員稼働予定.月)
                                       .Select(a => new
                        {
                            地域コード  = a.地域コード,
                            地域名    = a.地域名,
                            cardno = a.カード番号,
                            氏名     = a.氏名,
                            携帯電話番号 = a.携帯電話番号,
                            JFG加入年 = a.JFG加入年,
                            a.会員稼働予定
                        });

                        if (ew == cEAST)    // 東
                        {
                            // 組合員予定申告データクラスのインスタンス生成
                            clsWorksTbl w = new clsWorksTbl();
                            w.cardNumBox = string.Empty;
                            w.sRow       = sheetStRow;
                            w.ew         = ew;

                            foreach (var t in linqEast)
                            {
                                w.cardNo = t.cardno;
                                w.氏名     = t.氏名;
                                w.携帯電話番号 = t.携帯電話番号;
                                w.JFG加入年 = (short)t.JFG加入年;
                                w.会員稼働予定 = t.会員稼働予定;

                                // エクセル稼働表作成
                                if (!xlsCellsSet(w, ref oxlsWorkSheet))
                                {
                                    continue;
                                }
                            }
                        }
                        else if (ew == cWEST)   // 西
                        {
                            // 組合員予定申告データクラスのインスタンス生成
                            clsWorksTbl w = new clsWorksTbl();
                            w.cardNumBox = string.Empty;
                            w.sRow       = sheetStRow;
                            w.ew         = ew;

                            foreach (var t in linqWest)
                            {
                                w.地域コード  = (int)t.地域コード;
                                w.地域名    = t.地域名;
                                w.cardNo = t.cardno;
                                w.氏名     = t.氏名;
                                w.携帯電話番号 = t.携帯電話番号;
                                w.JFG加入年 = (short)t.JFG加入年;
                                w.会員稼働予定 = t.会員稼働予定;

                                // エクセル稼働表作成
                                if (!xlsCellsSet(w, ref oxlsWorkSheet))
                                {
                                    continue;
                                }
                            }
                        }

                        // カレンダーにない日の列削除
                        bool colDelStatus = true;
                        while (colDelStatus)
                        {
                            for (int cl = (ew + 9); cl <= oxlsWorkSheet.UsedRange.Columns.Count; cl++)
                            {
                                rngDay = (Excel.Range)oxlsWorkSheet.Cells[2, cl];
                                if (!Utility.NumericCheck(rngDay.Text.Trim()))
                                {
                                    oxlsWorkSheet.Columns[cl].Delete();
                                    colDelStatus = true;
                                    break;
                                }
                                else
                                {
                                    colDelStatus = false;
                                }
                            }
                        }

                        // 列数を再取得
                        int colsMaxFin = oxlsWorkSheet.UsedRange.Columns.Count;

                        //セル下部へ実線ヨコ罫線を引く
                        rng[0] = (Excel.Range)oxlsWorkSheet.Cells[oxlsWorkSheet.UsedRange.Rows.Count, 1];
                        rng[1] = (Excel.Range)oxlsWorkSheet.Cells[oxlsWorkSheet.UsedRange.Rows.Count, colsMaxFin];
                        oxlsWorkSheet.get_Range(rng[0], rng[1]).Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

                        //表全体に実線縦罫線を引く
                        rng[0] = (Excel.Range)oxlsWorkSheet.Cells[1, 1];
                        rng[1] = (Excel.Range)oxlsWorkSheet.Cells[oxlsWorkSheet.UsedRange.Rows.Count, colsMaxFin];
                        oxlsWorkSheet.get_Range(rng[0], rng[1]).Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

                        //表全体の左端縦罫線
                        rng[0] = (Excel.Range)oxlsWorkSheet.Cells[1, 1];
                        rng[1] = (Excel.Range)oxlsWorkSheet.Cells[oxlsWorkSheet.UsedRange.Rows.Count, 1];
                        oxlsWorkSheet.get_Range(rng[0], rng[1]).Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

                        //表全体の右端縦罫線
                        rng[0] = (Excel.Range)oxlsWorkSheet.Cells[1, colsMaxFin];
                        rng[1] = (Excel.Range)oxlsWorkSheet.Cells[oxlsWorkSheet.UsedRange.Rows.Count, colsMaxFin];
                        oxlsWorkSheet.get_Range(rng[0], rng[1]).Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

                        //// 出力シートコンソール表示
                        //Console.WriteLine(oxlsWorkSheet.Name);
                    }

                    ew++;
                }

                // 作業用BOOKの1番目のシートは削除する
                ((Excel.Worksheet)oXlsWork.Sheets[1]).Delete();

                // カレントシート
                oxlsWorkSheet = (Excel.Worksheet)oXlsWork.Sheets[1];

                // ウィンドウを非表示にする
                oXls.Visible = false;

                //保存処理
                oXls.DisplayAlerts = false;

                oXlsWork.SaveAs(Properties.Settings.Default.xlsWorksPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,
                                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            }
            catch (Exception ex)
            {
                Console.Write(ex.ToString());
            }
            finally
            {
                // ウィンドウを非表示にする
                oXls.Visible = false;

                //保存処理
                oXls.DisplayAlerts = false;

                // ExcelBookをクローズ
                oXlsBook.Close(Type.Missing, Type.Missing, Type.Missing);
                oXlsWork.Close(Type.Missing, Type.Missing, Type.Missing);

                // Excel終了
                oXls.Quit();

                // COM オブジェクトの参照カウントを解放する
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oxlsSheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oXlsBook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oxlsWorkSheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oXlsWork);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oXls);
            }
        }
        /// --------------------------------------------------------------------------
        /// <summary>
        ///     アサイン担当用稼働表エクセルシート作成 </summary>
        /// <param name="t">
        ///     組合員予定申告データクラス </param>
        /// <param name="oxlsWorkSheet">
        ///     アサイン担当用稼働表エクセルシート </param>
        /// <returns>
        ///     作成:true, 未作成:false</returns>
        /// --------------------------------------------------------------------------
        private bool xlsCellsSet(clsWorksTbl t, ref Excel.Worksheet oxlsWorkSheet)
        {
            Excel.Range[] rng = new Microsoft.Office.Interop.Excel.Range[2];

            // 該当期間のデータか検証
            string yymm = t.会員稼働予定.年.ToString() + t.会員稼働予定.月.ToString().PadLeft(2, '0');

            bool   yymmOn = false;
            string col    = string.Empty;

            for (int iX = 0; iX < 6; iX++)
            {
                if (sheetYYMM[iX, 0] == yymm)
                {
                    col    = sheetYYMM[iX, 1];
                    yymmOn = true;
                    break;
                }
            }

            if (!yymmOn)
            {
                return(false);         // 非該当期間のため読み飛ばし
            }
            // 組合員が変わったら行番号を加算する
            if (t.cardNumBox != string.Empty && t.cardNumBox != t.cardNo.ToString())
            {
                //セル下部へ実線ヨコ罫線を引く
                rng[0] = (Excel.Range)oxlsWorkSheet.Cells[t.sRow, 1];
                rng[1] = (Excel.Range)oxlsWorkSheet.Cells[t.sRow, S_colSMAX[t.ew]];
                oxlsWorkSheet.get_Range(rng[0], rng[1]).Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDot;

                t.sRow++;
            }

            t.cardNumBox = t.cardNo.ToString();    // カード番号

            // 作業用シートにデータ貼り付け
            if (t.ew == cEAST)
            {
                oxlsWorkSheet.Cells[t.sRow, 1] = t.氏名.ToString();
                oxlsWorkSheet.Cells[t.sRow, 2] = t.会員稼働予定.フリガナ.ToString();
                oxlsWorkSheet.Cells[t.sRow, 3] = t.JFG加入年.ToString();
                oxlsWorkSheet.Cells[t.sRow, 4] = t.携帯電話番号.ToString();
                oxlsWorkSheet.Cells[t.sRow, 5] = t.会員稼働予定.稼働日数.ToString();
                oxlsWorkSheet.Cells[t.sRow, 6] = t.会員稼働予定.自己申告日数.ToString();
                oxlsWorkSheet.Cells[t.sRow, 7] = t.会員稼働予定.備考.ToString();
                oxlsWorkSheet.Cells[t.sRow, 8] = Utility.nulltoString(t.会員稼働予定.申告年月日);
            }
            else if (t.ew == cWEST)
            {
                oxlsWorkSheet.Cells[t.sRow, 1] = t.地域名;
                oxlsWorkSheet.Cells[t.sRow, 2] = t.氏名.ToString();
                oxlsWorkSheet.Cells[t.sRow, 3] = t.会員稼働予定.フリガナ.ToString();
                oxlsWorkSheet.Cells[t.sRow, 4] = t.JFG加入年.ToString();
                oxlsWorkSheet.Cells[t.sRow, 5] = t.携帯電話番号.ToString();
                oxlsWorkSheet.Cells[t.sRow, 6] = t.会員稼働予定.稼働日数.ToString();
                oxlsWorkSheet.Cells[t.sRow, 7] = t.会員稼働予定.自己申告日数.ToString();
                oxlsWorkSheet.Cells[t.sRow, 8] = t.会員稼働予定.備考.ToString();
                oxlsWorkSheet.Cells[t.sRow, 9] = Utility.nulltoString(t.会員稼働予定.申告年月日);
            }

            // アサイン担当者か検証する
            jfgDataClassDataContext db = new jfgDataClassDataContext();
            var s = db.アサイン担当者.Where(a => a.カード番号 == double.Parse(t.cardNumBox));

            if (s.Count() > 0)
            {
                // 氏名セルのBackColorを黄色にする
                if (t.ew == cEAST) // 東
                {
                    rng[0] = (Excel.Range)oxlsWorkSheet.Cells[t.sRow, 1];
                    rng[1] = (Excel.Range)oxlsWorkSheet.Cells[t.sRow, 2];
                }
                else if (t.ew == cWEST)
                {
                                        // 西
                    {
                        rng[0] = (Excel.Range)oxlsWorkSheet.Cells[t.sRow, 1];
                        rng[1] = (Excel.Range)oxlsWorkSheet.Cells[t.sRow, 3];
                    }
                }

                oxlsWorkSheet.get_Range(rng[0], rng[1]).Interior.Color = Color.Yellow;
            }

            // 予定申告内容をセルに貼り付ける
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col)]      = t.会員稼働予定.d1;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 1]  = t.会員稼働予定.d2;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 2]  = t.会員稼働予定.d3;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 3]  = t.会員稼働予定.d4;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 4]  = t.会員稼働予定.d5;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 5]  = t.会員稼働予定.d6;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 6]  = t.会員稼働予定.d7;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 7]  = t.会員稼働予定.d8;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 8]  = t.会員稼働予定.d9;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 9]  = t.会員稼働予定.d10;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 10] = t.会員稼働予定.d11;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 11] = t.会員稼働予定.d12;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 12] = t.会員稼働予定.d13;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 13] = t.会員稼働予定.d14;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 14] = t.会員稼働予定.d15;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 15] = t.会員稼働予定.d16;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 16] = t.会員稼働予定.d17;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 17] = t.会員稼働予定.d18;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 18] = t.会員稼働予定.d19;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 19] = t.会員稼働予定.d20;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 20] = t.会員稼働予定.d21;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 21] = t.会員稼働予定.d22;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 22] = t.会員稼働予定.d23;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 23] = t.会員稼働予定.d24;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 24] = t.会員稼働予定.d25;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 25] = t.会員稼働予定.d26;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 26] = t.会員稼働予定.d27;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 27] = t.会員稼働予定.d28;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 28] = t.会員稼働予定.d29;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 29] = t.会員稼働予定.d30;
            oxlsWorkSheet.Cells[t.sRow, int.Parse(col) + 30] = t.会員稼働予定.d31;

            return(true);
        }
        ///----------------------------------------------------
        /// <summary>
        ///     稼働表作成 : closedXML版 2018/02/22</summary>
        ///----------------------------------------------------
        public void worksOutputXML()
        {
            DateTime stDate;
            DateTime edDate;

            //IXLWorksheet tmpSheet = null;

            try
            {
                using (var book = new XLWorkbook(Properties.Settings.Default.xlsKadouPath, XLEventTracking.Disabled))
                {
                    // 稼働予定開始年月日
                    stDate = DateTime.Parse(DateTime.Today.Year.ToString() + "/" + DateTime.Today.Month.ToString() + "/01");

                    // 稼働予定終了年月日
                    edDate = stDate.AddMonths(6).AddDays(-1);

                    int ew = 0;

                    while (ew < sCnt)
                    {
                        // 言語別シートを作成
                        for (int i = 1; i <= gengo.GetLength(0); i++)
                        {
                            int sNum = i + (10 * ew);

                            // シートを追加する 2018/02/22
                            if (ew == cEAST)
                            {
                                book.Worksheet("東").CopyTo(book, sheetName[ew] + "・" + gengo[i - 1, 1], sNum);
                            }
                            else if (ew == cWEST)
                            {
                                book.Worksheet("西").CopyTo(book, sheetName[ew] + "・" + gengo[i - 1, 1], sNum);
                            }

                            // カレントシート
                            IXLWorksheet tmpSheet = book.Worksheet(sNum);

                            int xCol = 0;   // 日列初期値

                            // 稼働予定期間のカレンダーをセット
                            for (int mon = 0; mon < 6; mon++)
                            {
                                // 該当月
                                DateTime wDt = stDate.AddMonths(mon);
                                xCol = 31 * mon + ew + 9;
                                //tmpSheet.Cell(1, xCol).Value = wDt.ToShortDateString(); // 9,40,71,102,・・・ 2018/02/23
                                tmpSheet.Cell(1, xCol).SetValue(wDt.Year + "年" + wDt.Month + "月"); // 9,40,71,102,・・・ 2018/02/28

                                // 年月と開始列の配列にセット
                                sheetYYMM[mon, 0] = wDt.Year.ToString() + wDt.Month.ToString().PadLeft(2, '0');
                                sheetYYMM[mon, 1] = xCol.ToString();

                                DateTime dDay;

                                // 該当月の暦
                                int dy = 0;
                                while (dy < 31)
                                {
                                    if (DateTime.TryParse(wDt.Year.ToString() + "/" + wDt.Month.ToString() + "/" + (dy + 1).ToString(), out dDay))
                                    {
                                        // 2018/02/23
                                        tmpSheet.Cell(2, xCol + dy).SetValue((dy + 1).ToString());    // 日
                                        tmpSheet.Cell(3, xCol + dy).SetValue(dDay.ToString("ddd"));   // 曜日
                                    }
                                    else
                                    {
                                        // 2018/02/23
                                        tmpSheet.Cell(2, xCol + dy).SetValue(string.Empty);
                                        tmpSheet.Cell(3, xCol + dy).SetValue(string.Empty);
                                    }

                                    dy++;
                                }
                            }

                            // 組合員予定申告データを取得
                            string cardNum = string.Empty;
                            string gCode   = gengo[i - 1, 0];
                            int    sRow    = sheetStRow;

                            jfgDataClassDataContext db = new jfgDataClassDataContext();

                            // 東・LINQ
                            var linqEast = db.会員情報.Where(a => (a.言語1 == int.Parse(gCode) || a.言語2 == int.Parse(gCode) ||
                                                               a.言語3 == int.Parse(gCode) || a.言語4 == int.Parse(gCode) ||
                                                               a.言語5 == int.Parse(gCode)) && a.東西 == 1)
                                           .OrderBy(a => a.会員稼働予定.フリガナ).ThenBy(a => a.会員稼働予定.カード番号).ThenBy(a => a.会員稼働予定.年).ThenBy(a => a.会員稼働予定.月)
                                           .Select(a => new
                            {
                                cardno = a.カード番号,
                                氏名     = a.氏名,
                                携帯電話番号 = a.携帯電話番号,
                                JFG加入年 = a.JFG加入年,
                                a.会員稼働予定
                            });

                            // 西・LINQ
                            var linqWest = db.会員情報.Where(a => (a.言語1 == int.Parse(gCode) || a.言語2 == int.Parse(gCode) ||
                                                               a.言語3 == int.Parse(gCode) || a.言語4 == int.Parse(gCode) ||
                                                               a.言語5 == int.Parse(gCode)) && a.東西 == 2)
                                           .OrderBy(a => a.地域コード).ThenBy(a => a.会員稼働予定.フリガナ).ThenBy(a => a.カード番号).ThenBy(a => a.会員稼働予定.年).ThenBy(a => a.会員稼働予定.月)
                                           .Select(a => new
                            {
                                地域コード  = a.地域コード,
                                地域名    = a.地域名,
                                cardno = a.カード番号,
                                氏名     = a.氏名,
                                携帯電話番号 = a.携帯電話番号,
                                JFG加入年 = a.JFG加入年,
                                a.会員稼働予定
                            });

                            if (ew == cEAST)    // 東
                            {
                                // 組合員予定申告データクラスのインスタンス生成
                                clsWorksTbl w = new clsWorksTbl();
                                w.cardNumBox = string.Empty;
                                w.sRow       = sheetStRow;
                                w.ew         = ew;

                                foreach (var t in linqEast)
                                {
                                    w.cardNo = t.cardno;
                                    w.氏名     = t.氏名;
                                    w.携帯電話番号 = t.携帯電話番号;
                                    w.JFG加入年 = (short)t.JFG加入年;
                                    w.会員稼働予定 = t.会員稼働予定;

                                    // エクセル稼働表作成 2018/02/26
                                    if (!xlsCellsSetXML(w, tmpSheet))
                                    {
                                        continue;
                                    }
                                }
                            }
                            else if (ew == cWEST)   // 西
                            {
                                // 組合員予定申告データクラスのインスタンス生成
                                clsWorksTbl w = new clsWorksTbl();
                                w.cardNumBox = string.Empty;
                                w.sRow       = sheetStRow;
                                w.ew         = ew;

                                foreach (var t in linqWest)
                                {
                                    w.地域コード  = (int)t.地域コード;
                                    w.地域名    = t.地域名;
                                    w.cardNo = t.cardno;
                                    w.氏名     = t.氏名;
                                    w.携帯電話番号 = t.携帯電話番号;
                                    w.JFG加入年 = (short)t.JFG加入年;
                                    w.会員稼働予定 = t.会員稼働予定;

                                    // エクセル稼働表作成 2018/02/26
                                    if (!xlsCellsSetXML(w, tmpSheet))
                                    {
                                        continue;
                                    }
                                }
                            }

                            // カレンダーにない日の列削除
                            bool colDelStatus = true;

                            // 2018/02/26
                            while (colDelStatus)
                            {
                                for (int cl = (ew + 9); cl <= tmpSheet.RangeUsed().RangeAddress.LastAddress.ColumnNumber; cl++)
                                {
                                    if (!Utility.NumericCheck(Utility.nulltoString(tmpSheet.Cell(2, cl).Value).Trim()))
                                    {
                                        tmpSheet.Column(cl).Delete();  // 2018/02/26
                                        colDelStatus = true;
                                        break;
                                    }
                                    else
                                    {
                                        colDelStatus = false;
                                    }
                                }
                            }

                            // 年月を表すセルを結合する 2018/02/28
                            int stCell = 0;
                            int edCell = 0;

                            tmpSheet.Range(tmpSheet.Cell(1, ew + 9).Address,
                                           tmpSheet.Cell(1, tmpSheet.LastCellUsed().Address.ColumnNumber).Address).Style
                            .Border.BottomBorder = XLBorderStyleValues.Thin;
                            for (int cl = (ew + 9); cl <= tmpSheet.LastCellUsed().Address.ColumnNumber; cl++)
                            {
                                if (Utility.nulltoString(tmpSheet.Cell(2, cl).Value).Trim() == "1")
                                {
                                    if (stCell == 0)
                                    {
                                        stCell = cl;
                                    }
                                    else
                                    {
                                        // セル結合
                                        tmpSheet.Range(tmpSheet.Cell(1, stCell).Address, tmpSheet.Cell(1, edCell).Address).Merge(false);

                                        // IsMerge()パフォ劣化回避のためのStyle変更
                                        for (int cc = stCell; cc <= edCell; cc++)
                                        {
                                            tmpSheet.Cell(1, cc).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                                        }

                                        stCell = cl;
                                    }
                                }
                                else
                                {
                                    edCell = cl;
                                }
                            }

                            if (stCell != 0)
                            {
                                // セル結合
                                tmpSheet.Range(tmpSheet.Cell(1, stCell).Address, tmpSheet.Cell(1, edCell).Address).Merge(false);

                                // IsMerge()パフォ劣化回避のためのStyle変更
                                for (int cc = stCell; cc <= edCell; cc++)
                                {
                                    tmpSheet.Cell(1, cc).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                                }
                            }

                            // 表の外枠罫線を引く 2018/02/26
                            var range = tmpSheet.Range(tmpSheet.Cell("A1").Address, tmpSheet.LastCellUsed().Address);
                            range.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;

                            // 年月セル下部に罫線を引く 2018/02/28
                            tmpSheet.Range(tmpSheet.Cell(1, ew + 9).Address,
                                           tmpSheet.Cell(1, tmpSheet.LastCellUsed().Address.ColumnNumber).Address).Style
                            .Border.BottomBorder = XLBorderStyleValues.Thin;

                            tmpSheet.Range(tmpSheet.Cell(2, ew + 9).Address,
                                           tmpSheet.Cell(2, tmpSheet.LastCellUsed().Address.ColumnNumber).Address).Style
                            .Border.BottomBorder = XLBorderStyleValues.Dotted;

                            // 明細最上部に罫線を引く 2018/02/27
                            tmpSheet.Range(tmpSheet.Cell("A4").Address,
                                           tmpSheet.Cell(4, tmpSheet.LastCellUsed().Address.ColumnNumber).Address).Style
                            .Border.TopBorder = XLBorderStyleValues.Thin;

                            // 表の外枠左罫線を引く 2018/02/27
                            tmpSheet.Range(tmpSheet.Cell("A1").Address, tmpSheet.LastCellUsed().Address).Style
                            .Border.LeftBorder = XLBorderStyleValues.Thin;

                            // 見出しの背景色 2018/02/28
                            tmpSheet.Range(tmpSheet.Cell("A1").Address, tmpSheet.Cell(3, tmpSheet.LastCellUsed().Address.ColumnNumber).Address)
                            .Style.Fill.BackgroundColor = XLColor.WhiteSmoke;

                            // 日曜日の背景色
                            range = tmpSheet.Range(tmpSheet.Cell(3, ew + 9).Address, tmpSheet.Cell(3, tmpSheet.LastCellUsed().Address.ColumnNumber).Address);
                            range.AddConditionalFormat()
                            .WhenEquals("日")
                            .Fill.SetBackgroundColor(XLColor.MistyRose);

                            var range2 = tmpSheet.Range(tmpSheet.Cell(2, ew + 9).Address, tmpSheet.Cell(2, tmpSheet.LastCellUsed().Address.ColumnNumber).Address);

                            if (ew == cEAST)
                            {
                                // 日曜日の日付の背景色
                                range2.AddConditionalFormat()
                                .WhenIsTrue("=I3=" + @"""日""")
                                .Fill.BackgroundColor = XLColor.MistyRose;

                                // ウィンドウ枠の固定
                                tmpSheet.SheetView.Freeze(3, 2);

                                // 見出し
                                tmpSheet.Cell("A2").SetValue("氏名").Style.Font.SetBold(true).Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                tmpSheet.Cell("B2").SetValue("フリガナ").Style.Font.SetBold(true).Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                tmpSheet.Cell("C2").SetValue("入会年度").Style.Font.SetBold(true);
                                tmpSheet.Cell("D2").SetValue("携帯電話").Style.Font.SetBold(true);
                                tmpSheet.Cell("E2").SetValue("稼働日数").Style.Font.SetBold(true);
                                tmpSheet.Cell("F2").SetValue("自己申告").Style.Font.SetBold(true);
                                tmpSheet.Cell("F3").SetValue("日数").Style.Font.SetBold(true);
                                tmpSheet.Cell("G2").SetValue("備考").Style.Font.SetBold(true);
                                tmpSheet.Cell("H2").SetValue("更新日").Style.Font.SetBold(true);

                                // 見出しはBold 2018/02/28
                                tmpSheet.Range(tmpSheet.Cell("I1").Address, tmpSheet.Cell(3, tmpSheet.LastCellUsed().Address.ColumnNumber).Address)
                                .Style.Font.SetBold(true);
                            }
                            else if (ew == cWEST)
                            {
                                // 日曜日の日付の背景色
                                range2.AddConditionalFormat()
                                .WhenIsTrue("=J3=" + @"""日""")
                                .Fill.BackgroundColor = XLColor.MistyRose;

                                // ウィンドウ枠の固定
                                tmpSheet.SheetView.Freeze(3, 3);

                                // 見出し
                                tmpSheet.Cell("A2").SetValue("地域").Style.Font.SetBold(true).Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                tmpSheet.Cell("B2").SetValue("氏名").Style.Font.SetBold(true).Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                tmpSheet.Cell("C2").SetValue("フリガナ").Style.Font.SetBold(true).Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                tmpSheet.Cell("D2").SetValue("入会年度").Style.Font.SetBold(true);
                                tmpSheet.Cell("E2").SetValue("携帯電話").Style.Font.SetBold(true);
                                tmpSheet.Cell("F2").SetValue("稼働日数").Style.Font.SetBold(true);
                                tmpSheet.Cell("G2").SetValue("自己申告").Style.Font.SetBold(true);
                                tmpSheet.Cell("G3").SetValue("日数").Style.Font.SetBold(true);
                                tmpSheet.Cell("H2").SetValue("備考").Style.Font.SetBold(true);
                                tmpSheet.Cell("I2").SetValue("更新日").Style.Font.SetBold(true);

                                // 見出しはBold 2018/02/28
                                tmpSheet.Range(tmpSheet.Cell("J1").Address, tmpSheet.Cell(3, tmpSheet.LastCellUsed().Address.ColumnNumber).Address)
                                .Style.Font.SetBold(true);
                            }
                        }

                        ew++;
                    }

                    // テンプレートシートは削除する 2018/02/26
                    book.Worksheet("東").Delete();
                    book.Worksheet("西").Delete();

                    // カレントシート 2018/02/26
                    //tmpSheet = book.Worksheet(1);

                    //保存処理 2018/02/26
                    book.SaveAs(Properties.Settings.Default.xlsWorksPath);
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex.ToString());
            }
            finally
            {
            }
        }