Exemple #1
0
        ///--------------------------------------------------------------
        /// <summary>
        ///     シートの日付欄をセットする </summary>
        /// <param name="rtnArray">
        ///     日付配列</param>
        /// <param name="cld">
        ///     日付配列クラス</param>
        ///--------------------------------------------------------------
        private void setDayToSheet(object[,] rtnArray, clsDays cld)
        {
            int sRow = 31;

            for (int i = 0; i < 31; i++)
            {
                if (i < 16)
                {
                    rtnArray[sRow, 5]     = cld.dl[i];
                    rtnArray[sRow + 3, 5] = cld.dw[i];
                }
                else
                {
                    rtnArray[sRow, 103]     = cld.dl[i];
                    rtnArray[sRow + 3, 103] = cld.dw[i];
                }

                if (i == 15)
                {
                    sRow = 31;
                }
                else
                {
                    sRow += 6;
                }
            }
        }
Exemple #2
0
        ///-------------------------------------------------------------------
        /// <summary>
        ///     日付配列を作成 </summary>
        /// <param name="cld">
        ///     日付配列クラス</param>
        /// <param name="shime">
        ///     締日</param>
        /// <param name="zDt">
        ///     開始月の前月(勤怠記入開始日の月)</param>
        /// <param name="nDt">
        ///     開始月</param>
        ///-------------------------------------------------------------------
        private void setDayArray(clsDays cld, string shime, DateTime zDt, DateTime nDt)
        {
            int      idl = 0;
            int      iZ  = 1;
            DateTime gDt;

            while (idl < 31)
            {
                int day = Utility.StrtoInt(shime) + iZ;

                if (DateTime.TryParse(zDt.Year.ToString() + "/" + zDt.Month.ToString() + "/" + day.ToString(), out gDt))
                {
                    cld.dl[idl] = gDt.Month.ToString().PadLeft(2, ' ') + "/" + gDt.Day.ToString().PadLeft(2, '0');
                    cld.dw[idl] = "(" + ("日月火水木金土").Substring(int.Parse(gDt.DayOfWeek.ToString("d")), 1) + ")";
                }
                else
                {
                    cld.dl[idl] = string.Empty;
                    cld.dw[idl] = string.Empty;
                }

                if (day == 31)
                {
                    iZ    = 1;
                    shime = "";
                    zDt   = nDt;
                }
                else
                {
                    iZ++;
                }

                idl++;
            }
        }
Exemple #3
0
        ///--------------------------------------------------------------------
        /// <summary>
        ///     シートの訂正欄日付をセットする </summary>
        /// <param name="rtnArray">
        ///     日付配列</param>
        /// <param name="cld">
        ///     日付配列クラス</param>
        /// <param name="oxls">
        ///     アクティブなエクセルシート</param>
        ///--------------------------------------------------------------------
        private void setDayToSheet2(object[,] rtnArray, clsDays cld, Excel.Worksheet oxls)
        {
            // 下部日付欄をセット
            int sCol = 15;

            for (int i = 0; i < 31; i++)
            {
                if (cld.dl[i] != string.Empty)
                {
                    rtnArray[129, sCol] = Utility.StrtoInt(cld.dl[i].Substring(3, 2)).ToString();
                }
                else
                {
                    // 空白欄の背景色を変える
                    Excel.Range aRng = (Excel.Range)oxls.Cells[129, sCol];
                    oxls.get_Range(aRng, aRng).Interior.ColorIndex = 15;
                }

                sCol += 6;
            }
        }
Exemple #4
0
        ///----------------------------------------------------------------------
        /// <summary>
        ///     出勤簿印刷処理 </summary>
        /// <param name="dg">
        ///     DataGridViewオブジェクト</param>
        ///----------------------------------------------------------------------
        private void prnSheet(DataGridView dg)
        {
            string kihonWorkTime = Properties.Settings.Default.基本実労時 + Properties.Settings.Default.基本実労分.PadLeft(2, '0');

            // 印刷開始月
            DateTime nDt;

            // 印刷終了月
            DateTime eDt = DateTime.Parse(txtEyear.Text + "/" + txtEmonth.Text + "/01");

            DateTime zDt;

            //マウスポインタを待機にする
            this.Cursor = Cursors.WaitCursor;

            // Excel起動
            string sAppPath = System.AppDomain.CurrentDomain.BaseDirectory;

            Excel.Application oXls = new Excel.Application();

            Excel.Workbook oXlsBook = (Excel.Workbook)(oXls.Workbooks.Open(Properties.Settings.Default.xlsFAX出勤簿, 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   = (Excel.Worksheet)oXlsBook.Sheets[1];
            Excel.Worksheet oxlsMsSheet = (Excel.Worksheet)oXlsBook.Sheets[1]; // テンプレートシート
            oxlsSheet.Select(Type.Missing);

            Excel.Range   rng  = null;
            Excel.Range[] aRng = new Excel.Range[3];

            int pCnt = 1;   // ページカウント

            object[,] rtnArray = null;

            try
            {
                // スタッフ
                foreach (DataGridViewRow r in dg.Rows)
                {
                    // チェックされているスタッフを対象とする
                    if (dataGridView1[colChk, r.Index].Value.ToString() == "False")
                    {
                        continue;
                    }

                    nDt = DateTime.Parse(txtSyear.Text + "/" + txtSmonth.Text + "/01");

                    // 年月指定範囲でループさせる
                    while (true)
                    {
                        // テンプレートシートを追加する
                        pCnt++;
                        oxlsMsSheet.Copy(Type.Missing, oXlsBook.Sheets[pCnt - 1]);
                        oxlsSheet = (Excel.Worksheet)oXlsBook.Sheets[pCnt];

                        // シートのセルを一括して配列に取得します
                        rng      = oxlsMsSheet.Range[oxlsMsSheet.Cells[1, 1], oxlsMsSheet.Cells[oxlsMsSheet.UsedRange.Rows.Count, oxlsMsSheet.UsedRange.Columns.Count]];
                        rtnArray = (object[, ])rng.Value2;

                        // 年
                        rtnArray[3, 14] = nDt.Year.ToString().Substring(2, 1);
                        rtnArray[3, 20] = nDt.Year.ToString().Substring(3, 1);

                        // 月
                        rtnArray[3, 32] = nDt.Month.ToString().PadLeft(2, '0').Substring(0, 1);
                        rtnArray[3, 38] = nDt.Month.ToString().PadLeft(2, '0').Substring(1, 1);

                        // 氏名
                        rtnArray[5, 18] = dg[colSName, r.Index].Value.ToString();

                        // スタッフ№
                        rtnArray[6, 106] = dg[colSCode, r.Index].Value.ToString().Substring(0, 1);
                        rtnArray[6, 112] = dg[colSCode, r.Index].Value.ToString().Substring(1, 1);
                        rtnArray[6, 118] = dg[colSCode, r.Index].Value.ToString().Substring(2, 1);
                        rtnArray[6, 124] = dg[colSCode, r.Index].Value.ToString().Substring(3, 1);
                        rtnArray[6, 130] = dg[colSCode, r.Index].Value.ToString().Substring(4, 1);

                        // 日給者
                        if (dg[colKyuyoKbn, r.Index].Value.ToString() == global.NIKKYU)
                        {
                            // 基本労働時間
                            if (dg[colWorkTime, r.Index].Value.ToString() != string.Empty)
                            {
                                rtnArray[6, 169] = dg[colWorkTime, r.Index].Value.ToString().Substring(1, 1);
                                rtnArray[6, 175] = dg[colWorkTime, r.Index].Value.ToString().Substring(3, 1);
                                rtnArray[6, 181] = dg[colWorkTime, r.Index].Value.ToString().Substring(4, 1);
                            }

                            // 基本就業時間帯1
                            string tm = dg[colTime1, r.Index].Value.ToString();
                            if (tm.Length > 10)
                            {
                                rtnArray[18, 29] = tm.Substring(0, 1);
                                rtnArray[18, 35] = tm.Substring(1, 1);
                                rtnArray[18, 41] = tm.Substring(3, 1);
                                rtnArray[18, 47] = tm.Substring(4, 1);

                                rtnArray[18, 57] = tm.Substring(6, 1);
                                rtnArray[18, 63] = tm.Substring(7, 1);
                                rtnArray[18, 69] = tm.Substring(9, 1);
                                rtnArray[18, 75] = tm.Substring(10, 1);
                            }

                            // 基本就業時間帯2
                            tm = dg[colTime2, r.Index].Value.ToString();
                            if (tm.Length > 10)
                            {
                                rtnArray[18, 88]  = tm.Substring(0, 1);
                                rtnArray[18, 94]  = tm.Substring(1, 1);
                                rtnArray[18, 100] = tm.Substring(3, 1);
                                rtnArray[18, 106] = tm.Substring(4, 1);

                                rtnArray[18, 116] = tm.Substring(6, 1);
                                rtnArray[18, 122] = tm.Substring(7, 1);
                                rtnArray[18, 128] = tm.Substring(9, 1);
                                rtnArray[18, 134] = tm.Substring(10, 1);
                            }

                            // 基本就業時間帯3
                            tm = dg[colTime3, r.Index].Value.ToString();
                            if (tm.Length > 10)
                            {
                                rtnArray[18, 147] = tm.Substring(0, 1);
                                rtnArray[18, 153] = tm.Substring(1, 1);
                                rtnArray[18, 159] = tm.Substring(3, 1);
                                rtnArray[18, 165] = tm.Substring(4, 1);

                                rtnArray[18, 175] = tm.Substring(6, 1);
                                rtnArray[18, 181] = tm.Substring(7, 1);
                                rtnArray[18, 187] = tm.Substring(9, 1);
                                rtnArray[18, 193] = tm.Substring(10, 1);
                            }
                        }
                        else if (dg[colKyuyoKbn, r.Index].Value.ToString() == global.JIKKYU) // 時給者
                        {
                            // 基本労働時間
                            rtnArray[6, 169] = "*";
                            rtnArray[6, 175] = "*";
                            rtnArray[6, 181] = "*";

                            // 基本就業時間帯1
                            rtnArray[18, 29] = "*";
                            rtnArray[18, 35] = "*";
                            rtnArray[18, 41] = "*";
                            rtnArray[18, 47] = "*";

                            rtnArray[18, 57] = "*";
                            rtnArray[18, 63] = "*";
                            rtnArray[18, 69] = "*";
                            rtnArray[18, 75] = "*";

                            // 基本就業時間帯2
                            rtnArray[18, 88]  = "*";
                            rtnArray[18, 94]  = "*";
                            rtnArray[18, 100] = "*";
                            rtnArray[18, 106] = "*";

                            rtnArray[18, 116] = "*";
                            rtnArray[18, 122] = "*";
                            rtnArray[18, 128] = "*";
                            rtnArray[18, 134] = "*";

                            // 基本就業時間帯3
                            rtnArray[18, 147] = "*";
                            rtnArray[18, 153] = "*";
                            rtnArray[18, 159] = "*";
                            rtnArray[18, 165] = "*";

                            rtnArray[18, 175] = "*";
                            rtnArray[18, 181] = "*";
                            rtnArray[18, 187] = "*";
                            rtnArray[18, 193] = "*";
                        }

                        // 所属店名
                        rtnArray[11, 25] = dg[colShopName, r.Index].Value.ToString();

                        // 所属店コード
                        rtnArray[12, 169] = dg[colShopCode, r.Index].Value.ToString().Substring(0, 1);
                        rtnArray[12, 175] = dg[colShopCode, r.Index].Value.ToString().Substring(1, 1);
                        rtnArray[12, 181] = dg[colShopCode, r.Index].Value.ToString().Substring(2, 1);
                        rtnArray[12, 187] = dg[colShopCode, r.Index].Value.ToString().Substring(3, 1);
                        rtnArray[12, 193] = dg[colShopCode, r.Index].Value.ToString().Substring(4, 1);

                        // 開始月
                        zDt = nDt.AddMonths(-1);

                        // 締日
                        string shime = dg[colShimebi, r.Index].Value.ToString();
                        if (shime != global.SHIME_15 && shime != global.SHIME_20)
                        {
                            // 締日記入がないものは15日締とする
                            shime = global.SHIME_15;
                        }

                        // 締日による制御
                        if (shime == global.SHIME_15)
                        {
                            // 15日締
                            // 締切文言
                            rtnArray[25, 103] = "※ 締切 毎月16日~翌15日 ※ 送信締切日:17日迄";

                            // 訂正欄月区切り罫線
                            aRng[0] = (Excel.Range)oxlsSheet.Cells[128, 111];
                            aRng[1] = (Excel.Range)oxlsSheet.Cells[130, 111];
                            oxlsSheet.get_Range(aRng[0], aRng[1]).Borders.get_Item(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous;

                            // 訂正欄月表示
                            rtnArray[128, 57]  = zDt.Month.ToString();
                            rtnArray[128, 63]  = "月";
                            rtnArray[128, 147] = nDt.Month.ToString();
                            rtnArray[128, 153] = "月";
                        }
                        else
                        {
                            // 20日締
                            // 締切文言
                            rtnArray[25, 103] = "※ 締切 毎月21日~翌20日 ※ 送信締切日:22日迄";

                            // 訂正欄月区切り罫線
                            aRng[0] = (Excel.Range)oxlsSheet.Cells[128, 81];
                            aRng[1] = (Excel.Range)oxlsSheet.Cells[130, 81];
                            oxlsSheet.get_Range(aRng[0], aRng[1]).Borders.get_Item(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous;

                            // 訂正欄月表示
                            rtnArray[128, 39]  = zDt.Month.ToString();
                            rtnArray[128, 45]  = "月";
                            rtnArray[128, 135] = nDt.Month.ToString();
                            rtnArray[128, 141] = "月";
                        }

                        // 日付配列クラスを作成
                        clsDays cld = new clsDays();
                        setDayArray(cld, shime, zDt, nDt);

                        // 日付をセット
                        setDayToSheet(rtnArray, cld);

                        // 下部日付欄をセット
                        setDayToSheet2(rtnArray, cld, oxlsSheet);

                        // 配列からシートセルに一括してデータをセットします
                        rng        = oxlsSheet.Range[oxlsSheet.Cells[1, 1], oxlsSheet.Cells[oxlsSheet.UsedRange.Rows.Count, oxlsSheet.UsedRange.Columns.Count]];
                        rng.Value2 = rtnArray;

                        // 年月範囲を超えたらループからぬける
                        nDt = nDt.AddMonths(1);
                        bool nxt = true;
                        switch (nDt.CompareTo(eDt))
                        {
                        case -1:        // 期限内
                            nxt = true;
                            break;

                        case 0:         // 期限日と同日
                            nxt = true;
                            break;

                        case 1:         // 期限日超過
                            nxt = false;
                            break;
                        }

                        if (!nxt)
                        {
                            break;
                        }
                    }
                }

                // 確認のためExcelのウィンドウを表示する
                //oXls.Visible = true;

                // 1枚目はテンプレートシートなので印刷時には削除する
                oXls.DisplayAlerts = false;
                oXlsBook.Sheets[1].Delete();

                //System.Threading.Thread.Sleep(1000);

                // 印刷
                oXlsBook.PrintOut();

                // 終了メッセージ
                MessageBox.Show("終了しました");
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "印刷処理", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

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

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

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

                // Excelを終了
                oXls.Quit();

                // COM オブジェクトの参照カウントを解放する
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oxlsMsSheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oxlsSheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oXlsBook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oXls);

                oXls        = null;
                oXlsBook    = null;
                oxlsSheet   = null;
                oxlsMsSheet = null;

                GC.Collect();

                //マウスポインタを元に戻す
                this.Cursor = Cursors.Default;
            }
        }