/// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtShohinList">
        ///     仕入実績確認のデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtShohinList, List <string> lstItem)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                //Linqで必要なデータをselect
                var outDataAll = dtShohinList.AsEnumerable()
                                 .Select(dat => new
                {
                    daibunrui     = dat["大分類名"],
                    chubunrui     = dat["中分類名"],
                    maker         = dat["メーカー名"],
                    kataban       = dat["品名型式"],
                    teika         = (decimal)dat["定価"],
                    baika         = (decimal)dat["標準売価"],
                    siireTanak    = (decimal)dat["仕入単価"],
                    hyokaTanka    = (decimal)dat["評価単価"],
                    tateneTanka   = (decimal)dat["建値仕入単価"],
                    tanabanHonsha = dat["棚番本社"],
                    tanabanGifu   = dat["棚番岐阜"],
                }).ToList();

                // リストをデータテーブルに変換
                DataTable dtShohin = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtShohin.Rows.Count;
                int maxColCnt = dtShohin.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                double page        = 1.0 * maxRowCnt / 35;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    // 小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drShohin in dtShohin.Rows)
                {
                    // 1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "商品単価一覧";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 14.5;
                        headersheet.Range("A1", "K1").Merge();

                        // ヘッダー出力(3行目のセル)
                        headersheet.Cell("A3").Value = "大分類";
                        headersheet.Cell("B3").Value = "中分類";
                        headersheet.Cell("C3").Value = "メーカー名";
                        headersheet.Cell("D3").Value = "品名・型番";
                        headersheet.Cell("E3").Value = "定価";
                        headersheet.Cell("F3").Value = "標準売価";
                        headersheet.Cell("G3").Value = "仕入単価";
                        headersheet.Cell("H3").Value = "評価単価";
                        headersheet.Cell("I3").Value = "建値単価";
                        headersheet.Cell("J3").Value = "本社棚番";
                        headersheet.Cell("K3").Value = "岐阜棚番";

                        // ヘッダー列
                        headersheet.Range("A3", "K3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "K3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // 列幅の指定
                        headersheet.Column(1).Width  = 14;
                        headersheet.Column(2).Width  = 14;
                        headersheet.Column(3).Width  = 14;
                        headersheet.Column(4).Width  = 40;
                        headersheet.Column(5).Width  = 12;
                        headersheet.Column(6).Width  = 12;
                        headersheet.Column(7).Width  = 12;
                        headersheet.Column(8).Width  = 12;
                        headersheet.Column(9).Width  = 12;
                        headersheet.Column(10).Width = 10;
                        headersheet.Column(11).Width = 10;

                        // 印刷体裁(B4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.B4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№115)");

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drShohin[colCnt - 1].ToString();

                        // 品名・型式セルの処理
                        if (colCnt == 4)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }

                        // 金額セルの処理
                        if (colCnt >= 5 && colCnt <= 6)
                        {
                            // 3桁毎に","を挿入する
                            str = string.Format("{0:#,0}", decimal.Parse(str));
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 単価セルの処理
                        if (colCnt >= 7 && colCnt <= 9)
                        {
                            // 3桁毎に","を挿入する、小数点第2位まで
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0.00");
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 棚番セルの処理
                        if (colCnt == 10 || colCnt == 11)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }

                        currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 11).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 35行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 39)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #2
0
        private string printSakuseiList()
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strFilePath = "./Template/H0210_MitsumoriSakuseiList.xlsx";
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");

            try
            {
                this.Cursor = Cursors.WaitCursor;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled);

                IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート
                //IXLWorksheet templatesheet2 = workbook.Worksheet(2);   // テンプレートシート(明細行のみ)
                IXLWorksheet currentsheet = null;                    // 処理中シート

                int pageCnt   = 0;                                   // ページ(シート枚数)カウント
                int xlsRowCnt = 11;                                  // Excel出力行カウント(開始は出力行)

                templatesheet1.CopyTo("Page" + pageCnt.ToString());
                currentsheet = workbook.Worksheet(workbook.Worksheets.Count);

                string strKikan = "";
                if (!string.IsNullOrWhiteSpace(txtFrom.Text))
                {
                    strKikan += txtFrom.Text;
                    if (!string.IsNullOrWhiteSpace(txtTo.Text))
                    {
                        strKikan += "~";
                    }
                }
                if (!string.IsNullOrWhiteSpace(txtTo.Text))
                {
                    strKikan += txtTo.Text;
                }
                currentsheet.Cell(8, "B").Value = strKikan;

                for (int i = 0; i < gridMitsu.RowCount; i++)
                {
                    if (xlsRowCnt == 55)
                    {
                        pageCnt++;
                        xlsRowCnt = 11;

                        // テンプレートシート(明細行のみ)からコピー
                        templatesheet1.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);
                    }
                    currentsheet.Cell(xlsRowCnt, "A").Value = getCellValue(gridMitsu[7, i], false);
                    currentsheet.Cell(xlsRowCnt, "C").Value = getCellValue(gridMitsu[3, i], false);
                    currentsheet.Cell(xlsRowCnt, "D").Value = getCellValue(gridMitsu[2, i], false);
                    currentsheet.Cell(xlsRowCnt, "E").Value = getCellValue(gridMitsu[4, i], false);
                    currentsheet.Cell(xlsRowCnt, "F").Value = getCellValue(gridMitsu[5, i], false);

                    xlsRowCnt++;
                }

                // テンプレートシート削除
                templatesheet1.Delete();
                //templatesheet2.Delete();

                // ページ数設定
                for (pageCnt = 1; pageCnt <= workbook.Worksheets.Count; pageCnt++)
                {
                    workbook.Worksheet(pageCnt).Cell("F3").Value = "'" + pageCnt.ToString() + "/" + (workbook.Worksheets.Count).ToString("0");      // No.
                }

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                //string strOutXlsFile = strWorkPath + "_" + txtMNum.Text + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                CreatePdf pdf = new CreatePdf();
                return(pdf.createPdf(strOutXlsFile, strDateTime, 0));
                //return pdf.createPdf(strOutXlsFile, "_" + txtMNum.Text, 0);
            }
            catch
            {
                throw;
            }
            finally
            {
                //// Workフォルダの全ファイルを取得
                //string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                //// Workフォルダ内のファイル削除
                //foreach (string filepath in files)
                //{
                //    System.IO.File.Delete(filepath);
                //}
                this.Cursor = Cursors.Default;
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSetCd_B_Input">
        ///     得意先元帳確認の印刷データテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSetCd_B_Input, List <string> lstPrintData)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            //合計値の確保用
            decimal decUriKin = 0;  //売上金額
            decimal decNyukin = 0;  //入金金額

            //得意先コードの表示とページ変えのチェック用
            string strTokuiCd = "";

            //得意先名の表示用
            string strTokuiName = "";

            //担当者名の表示用
            string strTantoName = "";

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS ゴシック";
                XLWorkbook.DefaultStyle.Font.FontSize = 7.5;


                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                // Linqで必要なデータをselect
                var outDataAll = dtSetCd_B_Input.AsEnumerable()
                                 .Select(dat => new
                {
                    TokuiCd         = dat["得意先コード"], //[0]ヘッダー表示のみ使用
                    TokuiName       = dat["得意先名"],   //[1]ヘッダー表示のみ使用
                    TokuiYMD        = dat["年月日"],    //[2]
                    Tokuikbn        = dat["取引区分名"],  //[3]
                    TokuiShohinName = dat["商品名"],    //[4]
                    TokuiSu         = dat["数量"],     //[5]
                    TokuiTanka      = dat["売上単価"],   //[6]
                    TokuiUrikin     = dat["売上金額"],   //[7]
                    TokuiNyukin     = dat["入金金額"],   //[8]
                    TokuiSashiZan   = dat["差引残高"],   //[9]
                    TokuiTantoName  = dat["担当者名"],   //[10]ヘッダー表示のみ使用
                    TokuiBiko       = dat["備考"],     //[11]
                }).ToList();

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 5;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // 最大ページ数の行数カウント用
                int rowCntMaxPage    = 1;
                int xlsRowCntMaxPage = 5;


                // 最大ページ数の取得
                foreach (DataRow drTokuiCheak in dtChkList.Rows)
                {
                    // 2ページ目以降
                    if (rowCntMaxPage > 1)
                    {
                        // 次の得意先が違う場合にシート作成
                        if (strTokuiCd != drTokuiCheak[0].ToString())
                        {
                            strTokuiCd = drTokuiCheak[0].ToString();
                            //合計分の行を追加
                            maxPage++;
                            xlsRowCntMaxPage = 5;
                        }
                    }

                    // 1ページ目のシート作成
                    if (rowCntMaxPage == 1)
                    {
                        maxPage++;
                        strTokuiCd = drTokuiCheak[0].ToString();
                    }

                    //44行に達した場合
                    if (xlsRowCntMaxPage == 44)
                    {
                        maxPage++;

                        xlsRowCntMaxPage = 4;
                    }
                    //maxPage++;
                    rowCntMaxPage++;
                    xlsRowCntMaxPage++;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drTokuiCheak in dtChkList.Rows)
                {
                    //2ページ目以降
                    if (rowCnt > 1)
                    {
                        //次の得意先が違う場合にシート作成
                        if (strTokuiCd != drTokuiCheak[0].ToString())
                        {
                            //マージ
                            currentsheet.Range("A" + xlsRowCnt, "E" + xlsRowCnt).Merge();
                            currentsheet.Range("H" + xlsRowCnt, "I" + xlsRowCnt).Merge();

                            currentsheet.Row(xlsRowCnt).Height = 10;

                            currentsheet.Cell(xlsRowCnt, 1).Value = "■■■ 合 計 ■■■";
                            currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                            currentsheet.Cell(xlsRowCnt, 6).Value = decUriKin.ToString();    //売上金額
                            currentsheet.Cell(xlsRowCnt, 7).Value = decNyukin.ToString();    //入金金額

                            //最終行、各項目のカンマ処理と文字寄せ
                            for (int intCnt = 6; intCnt < 8; intCnt++)
                            {
                                currentsheet.Cell(xlsRowCnt, intCnt).Style.NumberFormat.Format  = "#,0";
                                currentsheet.Cell(xlsRowCnt, intCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                            }

                            // 1行分のセルの周囲に罫線を引く
                            currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 16).Style
                            .Border.SetTopBorder(XLBorderStyleValues.Thin)
                            .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                            .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                            .Border.SetRightBorder(XLBorderStyleValues.Thin);

                            //初期化
                            decUriKin = 0;
                            decNyukin = 0;

                            //得意先コードと名前の確保
                            strTokuiCd   = drTokuiCheak[0].ToString();
                            strTokuiName = drTokuiCheak[1].ToString();
                            strTantoName = drTokuiCheak[10].ToString();

                            pageCnt++;

                            // ヘッダー出力(表ヘッダー上)
                            headersheet.Cell("A3").Value = strTokuiCd.Trim() + " " + strTokuiName.Trim(); //取引先名と取引先コード
                            headersheet.Cell("D3").Value = "担当者: " + strTantoName.Trim();                 //担当者名

                            xlsRowCnt = 5;

                            //ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    //1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        //得意先コードと名前の確保
                        strTokuiCd   = drTokuiCheak[0].ToString();
                        strTokuiName = drTokuiCheak[1].ToString();
                        strTantoName = drTokuiCheak[10].ToString();

                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "得 意 先 元 帳";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "I1").Merge();

                        // ヘッダー出力(表ヘッダー)
                        headersheet.Cell("A4").Value = "年月日";
                        headersheet.Cell("B4").Value = "区分";
                        headersheet.Cell("C4").Value = "商 品 名";
                        headersheet.Cell("D4").Value = "数 量";
                        headersheet.Cell("E4").Value = "単 価";
                        headersheet.Cell("F4").Value = "売上金額";
                        headersheet.Cell("G4").Value = "入金金額";
                        headersheet.Cell("H4").Value = "差引残高";
                        headersheet.Cell("I4").Value = "備考";

                        //行高さの指定
                        headersheet.Row(4).Height = 10;

                        // 列幅の指定
                        headersheet.Column(1).Width = 10;   //年月日
                        headersheet.Column(2).Width = 9;    //区分
                        headersheet.Column(3).Width = 80;   //商品名
                        headersheet.Column(4).Width = 11.5; //数量
                        headersheet.Column(5).Width = 11.5; //単価
                        headersheet.Column(6).Width = 11.5; //売上金額
                        headersheet.Column(7).Width = 11.5; //入金金額
                        headersheet.Column(8).Width = 11.5; //差引残高
                        headersheet.Column(9).Width = 30;   //備考

                        //ヘッダー文字位置の指定
                        headersheet.Column(1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //年月日
                        headersheet.Column(2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //区分
                        headersheet.Column(3).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //商品名
                        headersheet.Column(4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //数量
                        headersheet.Column(5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //単価
                        headersheet.Column(6).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //売上金額
                        headersheet.Column(7).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //入金金額
                        headersheet.Column(8).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //差引残高
                        headersheet.Column(9).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //備考

                        // セルの周囲に罫線を引く
                        headersheet.Range("A4", "I4").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        //背景を灰色にする
                        headersheet.Range("A4", "I4").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 印刷体裁(A4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№33)");

                        //マージ
                        currentsheet.Range("A3", "C3").Merge();
                        currentsheet.Range("D3", "E3").Merge();
                        currentsheet.Range("F3", "G3").Merge();

                        // ヘッダー出力(表ヘッダー上)
                        headersheet.Cell("A3").Value = strTokuiCd + " " + strTokuiName;                     //取引先名と取引先コード
                        headersheet.Cell("D3").Value = "担当者: " + strTantoName;                              //担当者名
                        headersheet.Cell("F3").Value = "(外税 請求単位)";                                         //(外税 請求単位)の記入
                        headersheet.Cell("I3").Value = "対象期間:" + lstPrintData[2] + " ~ " + lstPrintData[3]; //対象期間

                        // ヘッダー列
                        headersheet.Range("A3", "C3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        headersheet.Range("D3", "F3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        headersheet.Range("I3").Style.Alignment.Horizontal       = XLAlignmentHorizontalValues.Right;

                        //ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drTokuiCheak[colCnt - 1].ToString();

                        //行の高さ指定
                        currentsheet.Row(xlsRowCnt).Height = 10;

                        //数量、単価の場合
                        if (colCnt == 6 || colCnt == 7)
                        {
                            //空白以外の場合
                            if (str != "")
                            {
                                //小数点以下第二位まで表示
                                currentsheet.Cell(xlsRowCnt, colCnt - 2).Style.NumberFormat.Format = "#,0.00";
                            }

                            currentsheet.Cell(xlsRowCnt, colCnt - 2).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt - 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                            //0の場合
                            if (currentsheet.Cell(xlsRowCnt, colCnt - 2).Value.ToString() == "0")
                            {
                                //空にする
                                currentsheet.Cell(xlsRowCnt, colCnt - 2).Value = "";
                            }
                        }
                        //売上金額、入金金額、割引残高の場合
                        else if (colCnt >= 8 && colCnt <= 10)
                        {
                            //空白以外の場合
                            if (str != "")
                            {
                                //余計な小数点以下数値を取り除く
                                str = Math.Floor(decimal.Parse(str)).ToString();

                                //空白以外の場合
                                if (str != "0")
                                {
                                    //カンマつけ
                                    currentsheet.Cell(xlsRowCnt, colCnt - 2).Style.NumberFormat.Format = "#,0";
                                }
                                //0の場合は空白
                                else if (str == "0")
                                {
                                    str = "";
                                }
                            }

                            currentsheet.Cell(xlsRowCnt, colCnt - 2).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt - 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                            //0の場合
                            if (currentsheet.Cell(xlsRowCnt, colCnt - 2).ToString() == "0")
                            {
                                //空にする
                                currentsheet.Cell(xlsRowCnt, colCnt - 2).Value = "";
                            }
                        }
                        //得意先コード、得意先名、担当者名はスルー
                        else if (colCnt == 1 || colCnt == 2 || colCnt == 11)
                        {
                            //スルー
                        }
                        //備考
                        else if (colCnt == 12)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt - 3).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt - 3).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }
                        //年月日、区分、商品名の場合
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt - 2).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt - 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 9).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 44行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 44)
                    {
                        pageCnt++;

                        xlsRowCnt = 4;

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    rowCnt++;
                    xlsRowCnt++;

                    //各合計値を入れる
                    decUriKin = decUriKin + decimal.Parse(drTokuiCheak[7].ToString());
                    decNyukin = decNyukin + decimal.Parse(drTokuiCheak[8].ToString());

                    //最終行の場合
                    if (rowCnt > dtChkList.Rows.Count)
                    {
                        //マージ
                        currentsheet.Range("A" + xlsRowCnt, "E" + xlsRowCnt).Merge();

                        currentsheet.Row(xlsRowCnt).Height = 10;

                        currentsheet.Cell(xlsRowCnt, 1).Value = "◆◆◆ 合 計 ◆◆◆";
                        currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        currentsheet.Cell(xlsRowCnt, 6).Value = decUriKin.ToString();    //売上金額
                        currentsheet.Cell(xlsRowCnt, 7).Value = decNyukin.ToString();    //入金金額

                        //最終行、各項目のカンマ処理と文字寄せ
                        for (int intCnt = 6; intCnt < 8; intCnt++)
                        {
                            currentsheet.Cell(xlsRowCnt, intCnt).Style.NumberFormat.Format  = "#,0";
                            currentsheet.Cell(xlsRowCnt, intCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 1行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 16).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        //初期化
                        decUriKin = 0;
                        decNyukin = 0;
                    }
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #4
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSetCd_B_Input">
        ///     担当者別伝票処理件数のデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSetCd_B_Input, DateTime dateOpen, DateTime dateClose, string strTantoshaCdOpen, string strTantoshaCdClose, List <string> lstKei)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                //Linqで必要なデータをselect
                var outDataAll = dtSetCd_B_Input.AsEnumerable()
                                 .Select(dat => new
                {
                    tantoName = (String)dat["担当者名"],
                    juchu     = dat["受注計"],
                    hachu     = dat["発注計"],
                    shire     = dat["仕入計"],
                    uriage    = dat["売上計"],
                    nyuko     = dat["入庫計"],
                    shuko     = dat["出庫計"],
                    tanto     = dat["担当計"],
                }).ToList();

                //リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 5;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                //各セルの縦サイズ指定
                headersheet.RowHeight = 14;

                //ページ数計算
                double page        = 1.0 * maxRowCnt / 30;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    //小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                //ClosedXMLで1行ずつExcelに出力
                foreach (DataRow row in dtChkList.Rows)
                {
                    //1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        //タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "担当者別伝票処理件数";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "H1").Merge();

                        //タイトル出力(中央揃え、セル結合)
                        IXLCell YMDtitle = headersheet.Cell("A3");
                        YMDtitle.Value = "伝票年月日:" + dateOpen.ToString("yyyy年MM月dd日") + " ~ " + dateClose.ToString("yyyy年MM月dd日") + "  担当者コード:" + strTantoshaCdOpen + " ~ " + strTantoshaCdClose;
                        YMDtitle.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        YMDtitle.Style.Font.FontSize        = 9;
                        headersheet.Range("A3", "E3").Merge();

                        //ヘッダー出力(表ヘッダー)
                        headersheet.Cell("A4").Value = "担当者名";
                        headersheet.Cell("B4").Value = "受注計";
                        headersheet.Cell("C4").Value = "発注計";
                        headersheet.Cell("D4").Value = "仕入計";
                        headersheet.Cell("E4").Value = "売上計";
                        headersheet.Cell("F4").Value = "入庫計";
                        headersheet.Cell("G4").Value = "出庫計";
                        headersheet.Cell("H4").Value = "担当計";

                        //ヘッダー列
                        headersheet.Range("A4", "H4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        //セルの周囲に罫線を引く
                        headersheet.Range("A4", "H4").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        //セルの背景色
                        headersheet.Range("A4", "H4").Style.Fill.BackgroundColor = XLColor.LightGray;

                        //列幅の指定
                        headersheet.Column(1).Width = 20;
                        headersheet.Column(2).Width = 16;
                        headersheet.Column(3).Width = 16;
                        headersheet.Column(4).Width = 16;
                        headersheet.Column(5).Width = 16;
                        headersheet.Column(6).Width = 16;
                        headersheet.Column(7).Width = 16;
                        headersheet.Column(8).Width = 16;

                        //印刷体裁(A4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        //ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№5)");

                        //ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    //1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = row[colCnt - 1].ToString();

                        //decimalに変換できるかどうかを見る用
                        decimal decTry = 0;

                        //decimal型に変換できるか
                        if (decimal.TryParse(str, out decTry))
                        {
                            str = ((int)Math.Floor(decimal.Parse(str))).ToString();

                            //0の場合空白文字に
                            if (str == "0")
                            {
                                str = "";
                            }
                            else
                            {
                                int intChange = (int)Math.Floor(double.Parse(str));
                                str = string.Format("{0:#,0}", intChange);
                            }
                        }

                        currentsheet.Cell(xlsRowCnt, colCnt).Value = str;

                        //担当者の場合
                        if (colCnt == 1)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }
                    }

                    //1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 8).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    //34行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 31)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 4;

                            //ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                if (dtChkList.Rows.Count > 0)
                {
                    //セル結合、中央揃え
                    IXLCell sumcell = currentsheet.Cell(xlsRowCnt, 1);
                    sumcell.Value = "◆◆  合  計  ◆◆";

                    //金額セルの処理(3桁毎に","を挿入する)
                    for (int cnt = 0; cnt < 7; cnt++)
                    {
                        IXLCell kingakuCell = currentsheet.Cell(xlsRowCnt, cnt + 2);
                        kingakuCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                        int intChange = (int)Math.Floor(double.Parse(lstKei[cnt]));
                        kingakuCell.Value = string.Format("{0:#,0}", intChange);
                    }

                    //1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 8).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);
                }

                //ヘッダーシート削除
                headersheet.Delete();

                //workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                //workbookを解放
                workbook.Dispose();

                //PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                //Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                //Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #5
0
        // 印刷用ファイル作成
        public string dbToPdf(DataTable dtShiharaiCheakList, List <string> lstItem)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート


                //Linqで必要なデータをselect
                var outDataAll = dtShiharaiCheakList.AsEnumerable()
                                 .Select(dat => new
                {
                    siiresakiCd   = dat["仕入先コード"],
                    siiresakiName = dat["仕入先名"],
                    shiharaiYmd   = dat["伝票年月日"],
                    denpyoNo      = dat["伝票番号"],
                    bunruiName    = dat["取引区分名"],
                    koza          = dat["口座"],
                    kinyuKikan    = dat["金融機関名"],
                    kingaku       = (decimal)dat["支払額"],
                    kijitsu       = dat["手形期日"],
                    bikou         = dat["備考"]
                                    //gaku = (decimal)dat["額"]
                }).ToList();

                // linqで税抜合計金額、消費税、税込合計金額の合計算出
                decimal decKingaku = outDataAll.Select(gokei => gokei.kingaku).Sum();

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count - 1;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                double page        = 1.0 * maxRowCnt / 29;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    // 小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSiireCheak in dtChkList.Rows)
                {
                    // 1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "支払チェックリスト";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "J1").Merge();

                        // 入力日、伝票年月日出力(A2のセル)
                        IXLCell unitCell = headersheet.Cell("A2");
                        unitCell.Value = "入力日:" +
                                         string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[0])) + " ~ " +
                                         string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[1])) + "  伝票年月日:" +
                                         string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[2])) + " ~ " +
                                         string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[3])) +
                                         "  仕入先コード:" + lstItem[5] + " ~ " + lstItem[6];
                        unitCell.Style.Font.FontSize = 10;

                        // ヘッダー出力(3行目のセル)
                        headersheet.Cell("A3").Value = "コード";
                        headersheet.Cell("B3").Value = "仕入先名";
                        headersheet.Cell("C3").Value = "支払日";
                        headersheet.Cell("D3").Value = "伝票番号";
                        headersheet.Cell("E3").Value = "取引区分";

                        headersheet.Cell("F3").Value = "口座";
                        headersheet.Cell("G3").Value = "金融機関";

                        headersheet.Cell("H3").Value = "支払額";
                        headersheet.Cell("I3").Value = "手形期日";
                        headersheet.Cell("J3").Value = "備  考";

                        // ヘッダー列
                        headersheet.Range("A3", "J3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "J3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // セルの背景色
                        headersheet.Range("A3", "J3").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 列幅の指定
                        headersheet.Column(1).Width  = 5;
                        headersheet.Column(2).Width  = 30;
                        headersheet.Column(3).Width  = 11;
                        headersheet.Column(4).Width  = 8;
                        headersheet.Column(5).Width  = 10;
                        headersheet.Column(6).Width  = 4;
                        headersheet.Column(7).Width  = 13;
                        headersheet.Column(8).Width  = 12;
                        headersheet.Column(9).Width  = 11;
                        headersheet.Column(10).Width = 27;

                        // 印刷体裁(A4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№7)");

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drSiireCheak[colCnt - 1].ToString();

                        // 支払日、手形期日セルの場合
                        if (colCnt == 3 || colCnt == 9)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.DateFormat.SetFormat("yyyy/MM/dd");
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        }

                        // 伝票番号セルの処理
                        if (colCnt == 4)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 支払額セルの処理
                        if (colCnt == 8)
                        {
                            // 3桁毎に","を挿入する
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0");
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 備考セルの場合
                        if (colCnt == 10)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                            str = "'" + str;
                        }

                        currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 10).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 29行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 32)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // 最終行を出力した後、合計行を出力
                if (dtChkList.Rows.Count > 0)
                {
                    // セル結合
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 7).Merge();
                    currentsheet.Cell(xlsRowCnt, 1).Value = "◆◆◆ 合 計 ◆◆◆";
                    currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                    // 入金額
                    currentsheet.Cell(xlsRowCnt, 8).Value = string.Format("{0:#,0}", decKingaku);
                    currentsheet.Cell(xlsRowCnt, 8).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 10).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #6
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// DataTableをもとにxlsxファイルを作成し、PDFファイルを作成
        /// </summary>
        /// <param name="dtHachu">発注のデータテーブル</param>
        /// <returns>結合PDFファイル</returns>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtHachu)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strFilePath = "./Template/A0120_ChumonShoPrint.xlsx";
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");

            try
            {
                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled);

                IXLWorksheet templatesheet = workbook.Worksheet(1); // テンプレートシート
                IXLWorksheet currentsheet  = null;                  // 処理中シート

                int     pageCnt           = 0;                      // ページ(シート枚数)カウント
                int     xlsRowCnt         = 11;                     // Excel出力行カウント(開始は出力行)
                Boolean blnSheetCreate    = false;
                string  strTorihikisakiCd = "";
                string  strHachusha       = "";

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drHachu in dtHachu.Rows)
                {
                    // 取引先コードが前行と違う場合、テンプレートシート作成
                    if (!strTorihikisakiCd.Equals(drHachu[1].ToString()))
                    {
                        // 取引先コードが空でない場合
                        if (!strTorihikisakiCd.Equals(""))
                        {
                            // 明細行が17行、18行の場合
                            if (xlsRowCnt == 28 || xlsRowCnt == 29)
                            {
                                // 不要な明細行、発注者行を削除
                                currentsheet.Rows(xlsRowCnt, 33).Delete();

                                pageCnt++;
                                xlsRowCnt = 11;

                                // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー
                                templatesheet.CopyTo(templatesheet.Name);
                            }

                            // 不要な明細行を削除
                            currentsheet.Rows(xlsRowCnt, 28).Delete();

                            // 発注者
                            currentsheet.Cell(xlsRowCnt + 2, "K").Value = strHachusha;
                            currentsheet.Range(xlsRowCnt + 2, 11, xlsRowCnt + 4, 11).Merge();
                        }

                        strTorihikisakiCd = drHachu[1].ToString();      // 取引先コード
                        strHachusha       = drHachu[11].ToString();     // 発注者
                        pageCnt++;
                        xlsRowCnt      = 11;
                        blnSheetCreate = true;

                        // テンプレートシートからコピー
                        templatesheet.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);
                    }

                    // 明細行が19行になった場合
                    if (xlsRowCnt == 29)
                    {
                        // 発注者行を削除
                        currentsheet.Rows(xlsRowCnt, 33).Delete();

                        pageCnt++;
                        xlsRowCnt = 11;

                        // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー
                        templatesheet.CopyTo(templatesheet.Name);
                    }

                    // 最初の明細行の場合
                    if (blnSheetCreate)
                    {
                        blnSheetCreate = false;

                        currentsheet.Cell("A4").Value = drHachu[2].ToString();       // 取引先名
                        currentsheet.Cell("B6").Value = drHachu[3].ToString();       // 電話番号
                        currentsheet.Cell("B7").Value = drHachu[4].ToString();       // FAX
                        currentsheet.Cell("E3").Value = drHachu[0].ToString();       // 年月日
                        currentsheet.Cell("K3").Value = drHachu[13].ToString();      // 営業所名
                    }

                    currentsheet.Cell(xlsRowCnt, "A").Value = drHachu[5].ToString();        // 商品名
                    currentsheet.Cell(xlsRowCnt, "E").Value = drHachu[6].ToString();        // 数量
                    currentsheet.Cell(xlsRowCnt, "F").Value = drHachu[7].ToString();        // 単価
                    currentsheet.Cell(xlsRowCnt, "G").Value = drHachu[8].ToString();        // 金額
                    currentsheet.Cell(xlsRowCnt, "I").Value = drHachu[9].ToString();        // 納期
                    currentsheet.Cell(xlsRowCnt, "J").Value = drHachu[10].ToString();       // 注文番号
                    currentsheet.Cell(xlsRowCnt, "K").Value = "'" + drHachu[12].ToString(); // 備考

                    xlsRowCnt++;
                }

                // 発注データがある場合
                if (dtHachu.Rows.Count > 0)
                {
                    // 明細行が17行、18行の場合
                    if (xlsRowCnt == 28 || xlsRowCnt == 29)
                    {
                        // 不要な明細行、発注者行を削除
                        currentsheet.Rows(xlsRowCnt, 33).Delete();

                        pageCnt++;
                        xlsRowCnt = 11;

                        // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー
                        templatesheet.CopyTo(templatesheet.Name);
                        //this.sheetCopy(ref workbook, ref currentsheet, templatesheet, pageCnt);
                    }

                    // 不要な明細行を削除
                    currentsheet.Rows(xlsRowCnt, 28).Delete();

                    // 発注者
                    currentsheet.Cell(xlsRowCnt + 2, "K").Value = strHachusha;
                    currentsheet.Range(xlsRowCnt + 2, 11, xlsRowCnt + 4, 11).Merge();
                }

                // テンプレートシート削除
                templatesheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // CreatePdfのインスタンス生成
                CreatePdf pdf = new CreatePdf();

                // ロゴ貼り付け処理
                int[] topRow     = { 2 };
                int[] leftColumn = { 8 };
                pdf.logoPaste(strOutXlsFile, topRow, leftColumn, 200, 850, 57);

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime));
            }
            catch
            {
                throw;
            }
            finally
            {
                //// Workフォルダの作成日時ファイルを取得
                //string[] files = Directory.GetFiles(strWorkPath, strDateTime + "*", SearchOption.AllDirectories);
                //// Workフォルダ内のファイル削除
                //foreach (string filepath in files)
                //{
                //    File.Delete(filepath);
                //}
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="lstDtSuiihyo">
        ///     推移表のデータテーブルのリスト</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(List <DataTable> lstDtSuiihyo, List <string> lstItem)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet; // ヘッダーシート
                IXLWorksheet currentsheet = worksheet; // 処理中シート

                int maxPage;                           // 最大ページ数

                // リストに格納しているデータテーブルすべてを実行
                for (int listCnt = 0; listCnt < lstDtSuiihyo.Count; listCnt++)
                {
                    DataTable dtSuiihyo = lstDtSuiihyo[listCnt];

                    if (dtSuiihyo == null || dtSuiihyo.Rows.Count == 0)
                    {
                        break;
                    }

                    //Linqで必要なデータをselect
                    var outDataAll = dtSuiihyo.AsEnumerable()
                                     .Select(dat => new
                    {
                        tantoCd         = dat["担当者コード"],
                        tantoName       = dat["担当者名"],
                        tokuisakiCd     = dat["得意先コード"],
                        tokuisakiName   = dat["得意先名"],
                        zenUriage1      = (decimal)dat["前売上1"],
                        zenUriage2      = (decimal)dat["前売上2"],
                        zenUriage3      = (decimal)dat["前売上3"],
                        zenUriage4      = (decimal)dat["前売上4"],
                        zenUriage5      = (decimal)dat["前売上5"],
                        zenUriage6      = (decimal)dat["前売上6"],
                        zenUriage7      = (decimal)dat["前売上7"],
                        zenUriage8      = (decimal)dat["前売上8"],
                        zenUriage9      = (decimal)dat["前売上9"],
                        zenUriage10     = (decimal)dat["前売上10"],
                        zenUriage11     = (decimal)dat["前売上11"],
                        zenUriage12     = (decimal)dat["前売上12"],
                        zenUriageGoukei = (decimal)dat["前売上合計"],
                        honUriage1      = (decimal)dat["本売上1"],
                        honUriage2      = (decimal)dat["本売上2"],
                        honUriage3      = (decimal)dat["本売上3"],
                        honUriage4      = (decimal)dat["本売上4"],
                        honUriage5      = (decimal)dat["本売上5"],
                        honUriage6      = (decimal)dat["本売上6"],
                        honUriage7      = (decimal)dat["本売上7"],
                        honUriage8      = (decimal)dat["本売上8"],
                        honUriage9      = (decimal)dat["本売上9"],
                        honUriage10     = (decimal)dat["本売上10"],
                        honUriage11     = (decimal)dat["本売上11"],
                        honUriage12     = (decimal)dat["本売上12"],
                        honUriageGoukei = (decimal)dat["本売上合計"]
                    }).ToList();

                    // linqで前売上1~前売上12、前売上合計、本売上1~本売上12、本売上合計の合計算出
                    decimal[,] decKingaku = new decimal[2, 13];
                    decKingaku[0, 0]      = outDataAll.Select(gokei => gokei.zenUriage1).Sum();
                    decKingaku[0, 1]      = outDataAll.Select(gokei => gokei.zenUriage2).Sum();
                    decKingaku[0, 2]      = outDataAll.Select(gokei => gokei.zenUriage3).Sum();
                    decKingaku[0, 3]      = outDataAll.Select(gokei => gokei.zenUriage4).Sum();
                    decKingaku[0, 4]      = outDataAll.Select(gokei => gokei.zenUriage5).Sum();
                    decKingaku[0, 5]      = outDataAll.Select(gokei => gokei.zenUriage6).Sum();
                    decKingaku[0, 6]      = outDataAll.Select(gokei => gokei.zenUriage7).Sum();
                    decKingaku[0, 7]      = outDataAll.Select(gokei => gokei.zenUriage8).Sum();
                    decKingaku[0, 8]      = outDataAll.Select(gokei => gokei.zenUriage9).Sum();
                    decKingaku[0, 9]      = outDataAll.Select(gokei => gokei.zenUriage10).Sum();
                    decKingaku[0, 10]     = outDataAll.Select(gokei => gokei.zenUriage11).Sum();
                    decKingaku[0, 11]     = outDataAll.Select(gokei => gokei.zenUriage12).Sum();
                    decKingaku[0, 12]     = outDataAll.Select(gokei => gokei.zenUriageGoukei).Sum();
                    decKingaku[1, 0]      = outDataAll.Select(gokei => gokei.honUriage1).Sum();
                    decKingaku[1, 1]      = outDataAll.Select(gokei => gokei.honUriage2).Sum();
                    decKingaku[1, 2]      = outDataAll.Select(gokei => gokei.honUriage3).Sum();
                    decKingaku[1, 3]      = outDataAll.Select(gokei => gokei.honUriage4).Sum();
                    decKingaku[1, 4]      = outDataAll.Select(gokei => gokei.honUriage5).Sum();
                    decKingaku[1, 5]      = outDataAll.Select(gokei => gokei.honUriage6).Sum();
                    decKingaku[1, 6]      = outDataAll.Select(gokei => gokei.honUriage7).Sum();
                    decKingaku[1, 7]      = outDataAll.Select(gokei => gokei.honUriage8).Sum();
                    decKingaku[1, 8]      = outDataAll.Select(gokei => gokei.honUriage9).Sum();
                    decKingaku[1, 9]      = outDataAll.Select(gokei => gokei.honUriage10).Sum();
                    decKingaku[1, 10]     = outDataAll.Select(gokei => gokei.honUriage11).Sum();
                    decKingaku[1, 11]     = outDataAll.Select(gokei => gokei.honUriage12).Sum();
                    decKingaku[1, 12]     = outDataAll.Select(gokei => gokei.honUriageGoukei).Sum();

                    // 担当者計
                    var tantoGoukei = from tbl in dtSuiihyo.AsEnumerable()
                                      group tbl by tbl.Field <string>("担当者コード") into g
                                      select new
                    {
                        section         = g.Key,
                        count           = g.Count(),
                        zenUriage1      = g.Sum(p => p.Field <decimal>("前売上1")),
                        zenUriage2      = g.Sum(p => p.Field <decimal>("前売上2")),
                        zenUriage3      = g.Sum(p => p.Field <decimal>("前売上3")),
                        zenUriage4      = g.Sum(p => p.Field <decimal>("前売上4")),
                        zenUriage5      = g.Sum(p => p.Field <decimal>("前売上5")),
                        zenUriage6      = g.Sum(p => p.Field <decimal>("前売上6")),
                        zenUriage7      = g.Sum(p => p.Field <decimal>("前売上7")),
                        zenUriage8      = g.Sum(p => p.Field <decimal>("前売上8")),
                        zenUriage9      = g.Sum(p => p.Field <decimal>("前売上9")),
                        zenUriage10     = g.Sum(p => p.Field <decimal>("前売上10")),
                        zenUriage11     = g.Sum(p => p.Field <decimal>("前売上11")),
                        zenUriage12     = g.Sum(p => p.Field <decimal>("前売上12")),
                        zenUriageGoukei = g.Sum(p => p.Field <decimal>("前売上合計")),
                        honUriage1      = g.Sum(p => p.Field <decimal>("本売上1")),
                        honUriage2      = g.Sum(p => p.Field <decimal>("本売上2")),
                        honUriage3      = g.Sum(p => p.Field <decimal>("本売上3")),
                        honUriage4      = g.Sum(p => p.Field <decimal>("本売上4")),
                        honUriage5      = g.Sum(p => p.Field <decimal>("本売上5")),
                        honUriage6      = g.Sum(p => p.Field <decimal>("本売上6")),
                        honUriage7      = g.Sum(p => p.Field <decimal>("本売上7")),
                        honUriage8      = g.Sum(p => p.Field <decimal>("本売上8")),
                        honUriage9      = g.Sum(p => p.Field <decimal>("本売上9")),
                        honUriage10     = g.Sum(p => p.Field <decimal>("本売上10")),
                        honUriage11     = g.Sum(p => p.Field <decimal>("本売上11")),
                        honUriage12     = g.Sum(p => p.Field <decimal>("本売上12")),
                        honUriageGoukei = g.Sum(p => p.Field <decimal>("本売上合計"))
                    };

                    // 担当者計の前売上1~前売上12、前売上合計、本売上1~本売上12、本売上合計の合計算出
                    decimal[,,] decKingakuTanto = new decimal[tantoGoukei.Count(), 2, 13];
                    for (int cnt = 0; cnt < tantoGoukei.Count(); cnt++)
                    {
                        decKingakuTanto[cnt, 0, 0]  = tantoGoukei.ElementAt(cnt).zenUriage1;
                        decKingakuTanto[cnt, 0, 1]  = tantoGoukei.ElementAt(cnt).zenUriage2;
                        decKingakuTanto[cnt, 0, 2]  = tantoGoukei.ElementAt(cnt).zenUriage3;
                        decKingakuTanto[cnt, 0, 3]  = tantoGoukei.ElementAt(cnt).zenUriage4;
                        decKingakuTanto[cnt, 0, 4]  = tantoGoukei.ElementAt(cnt).zenUriage5;
                        decKingakuTanto[cnt, 0, 5]  = tantoGoukei.ElementAt(cnt).zenUriage6;
                        decKingakuTanto[cnt, 0, 6]  = tantoGoukei.ElementAt(cnt).zenUriage7;
                        decKingakuTanto[cnt, 0, 7]  = tantoGoukei.ElementAt(cnt).zenUriage8;
                        decKingakuTanto[cnt, 0, 8]  = tantoGoukei.ElementAt(cnt).zenUriage9;
                        decKingakuTanto[cnt, 0, 9]  = tantoGoukei.ElementAt(cnt).zenUriage10;
                        decKingakuTanto[cnt, 0, 10] = tantoGoukei.ElementAt(cnt).zenUriage11;
                        decKingakuTanto[cnt, 0, 11] = tantoGoukei.ElementAt(cnt).zenUriage12;
                        decKingakuTanto[cnt, 0, 12] = tantoGoukei.ElementAt(cnt).zenUriageGoukei;
                        decKingakuTanto[cnt, 1, 0]  = tantoGoukei.ElementAt(cnt).honUriage1;
                        decKingakuTanto[cnt, 1, 1]  = tantoGoukei.ElementAt(cnt).honUriage2;
                        decKingakuTanto[cnt, 1, 2]  = tantoGoukei.ElementAt(cnt).honUriage3;
                        decKingakuTanto[cnt, 1, 3]  = tantoGoukei.ElementAt(cnt).honUriage4;
                        decKingakuTanto[cnt, 1, 4]  = tantoGoukei.ElementAt(cnt).honUriage5;
                        decKingakuTanto[cnt, 1, 5]  = tantoGoukei.ElementAt(cnt).honUriage6;
                        decKingakuTanto[cnt, 1, 6]  = tantoGoukei.ElementAt(cnt).honUriage7;
                        decKingakuTanto[cnt, 1, 7]  = tantoGoukei.ElementAt(cnt).honUriage8;
                        decKingakuTanto[cnt, 1, 8]  = tantoGoukei.ElementAt(cnt).honUriage9;
                        decKingakuTanto[cnt, 1, 9]  = tantoGoukei.ElementAt(cnt).honUriage10;
                        decKingakuTanto[cnt, 1, 10] = tantoGoukei.ElementAt(cnt).honUriage11;
                        decKingakuTanto[cnt, 1, 11] = tantoGoukei.ElementAt(cnt).honUriage12;
                        decKingakuTanto[cnt, 1, 12] = tantoGoukei.ElementAt(cnt).honUriageGoukei;
                    }

                    // リストをデータテーブルに変換
                    DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                    int maxRowCnt = (dtChkList.Rows.Count + tantoGoukei.Count() + 1) * 3;
                    int maxColCnt = dtChkList.Columns.Count;
                    int pageCnt   = 0; // ページ(シート枚数)カウント
                    int rowCnt    = 1; // datatable処理行カウント
                    int xlsRowCnt = 4; // Excel出力行カウント(開始は出力行)
                    maxPage = 0;       // 最大ページ数

                    // ページ数計算
                    double page        = 1.0 * maxRowCnt / 33;
                    double decimalpart = page % 1;
                    if (decimalpart != 0)
                    {
                        // 小数点以下が0でない場合、+1
                        maxPage = (int)Math.Floor(page) + 1;
                    }
                    else
                    {
                        maxPage = (int)page;
                    }

                    // 期間の月数を計算
                    int intMonthFrom = int.Parse(lstItem[0].Substring(5, 2));
                    int intMonthTo   = int.Parse(lstItem[1].Substring(5, 2));
                    if (intMonthFrom > intMonthTo)
                    {
                        intMonthTo += 12;
                    }
                    int intMonthDiff = intMonthTo - intMonthFrom;

                    Boolean blnDiff = false;

                    // 最後のリストに格納されているデータテーブルの場合、かつ、期間の開始から終了までの差が11カ月未満の場合
                    if (listCnt + 1 == lstDtSuiihyo.Count && intMonthDiff < 11)
                    {
                        blnDiff = true;
                    }

                    if (blnDiff)
                    {
                        // 担当者計の処理
                        for (int cnt = 0; cnt < tantoGoukei.Count(); cnt++)
                        {
                            decKingakuTanto[cnt, 0, 12] = 0;
                            decKingakuTanto[cnt, 1, 12] = 0;
                            for (int column = 0; column < 12; column++)
                            {
                                // 期間終了月の翌月以降の場合、0をセット
                                if (intMonthDiff < column)
                                {
                                    decKingakuTanto[cnt, 0, column] = 0;
                                    decKingakuTanto[cnt, 1, column] = 0;
                                }
                                else
                                {
                                    decKingakuTanto[cnt, 0, 12] += decKingakuTanto[cnt, 0, column];
                                    decKingakuTanto[cnt, 1, 12] += decKingakuTanto[cnt, 1, column];
                                }
                            }
                        }

                        // 合計の処理
                        decKingaku[0, 12] = 0;
                        decKingaku[1, 12] = 0;
                        for (int column = 0; column < 12; column++)
                        {
                            // 期間終了月の翌月以降の場合、0をセット
                            if (intMonthDiff < column)
                            {
                                decKingaku[0, column] = 0;
                                decKingaku[1, column] = 0;
                            }
                            else
                            {
                                decKingaku[0, 12] += decKingaku[0, column];
                                decKingaku[1, 12] += decKingaku[1, column];
                            }
                        }
                    }

                    int tantoCnt    = 0;
                    int tantoRowCnt = 0;

                    // ClosedXMLで1行ずつExcelに出力
                    foreach (DataRow drSuiihyo in dtChkList.Rows)
                    {
                        // 1ページ目のシート作成
                        if (rowCnt == 1)
                        {
                            DateTime dtYmdFrom = DateTime.Parse(lstItem[0]);
                            pageCnt++;

                            // Headerページのみの場合
                            if (workbook.Worksheets.Count == 1)
                            {
                                // タイトル出力(中央揃え、セル結合)
                                IXLCell titleCell = headersheet.Cell("A1");

                                // 出力先の選択が得意先別売上推移表の場合
                                if (lstItem[7].Equals("0"))
                                {
                                    titleCell.Value = "得意先別売上推移表";
                                }
                                else
                                {
                                    titleCell.Value = "得意先別粗利推移表";
                                }
                                titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                                titleCell.Style.Font.FontSize        = 14;
                                headersheet.Range("A1", "P1").Merge();

                                // 単位出力(P2のセル、右揃え)
                                IXLCell unitCell = headersheet.Cell("P2");
                                unitCell.Value = "(単位:千円)";
                                unitCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                                // ヘッダー出力(3行目のセル)
                                headersheet.Cell("A3").Value = "コード";
                                headersheet.Cell("B3").Value = "得意先名";
                                headersheet.Range("B3", "C3").Merge();
                                headersheet.Cell("D3").Value = dtYmdFrom.AddMonths(0);
                                headersheet.Cell("E3").Value = dtYmdFrom.AddMonths(1);
                                headersheet.Cell("F3").Value = dtYmdFrom.AddMonths(2);
                                headersheet.Cell("G3").Value = dtYmdFrom.AddMonths(3);
                                headersheet.Cell("H3").Value = dtYmdFrom.AddMonths(4);
                                headersheet.Cell("I3").Value = dtYmdFrom.AddMonths(5);
                                headersheet.Cell("J3").Value = dtYmdFrom.AddMonths(6);
                                headersheet.Cell("K3").Value = dtYmdFrom.AddMonths(7);
                                headersheet.Cell("L3").Value = dtYmdFrom.AddMonths(8);
                                headersheet.Cell("M3").Value = dtYmdFrom.AddMonths(9);
                                headersheet.Cell("N3").Value = dtYmdFrom.AddMonths(10);
                                headersheet.Cell("O3").Value = dtYmdFrom.AddMonths(11);
                                headersheet.Cell("P3").Value = "合計";

                                // 各月
                                headersheet.Cell("D3").Style.DateFormat.Format        = "yyyy年M月";
                                headersheet.Range("E3", "O3").Style.DateFormat.Format = "M月";

                                // ヘッダー列
                                headersheet.Range("A3", "P3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                                // セルの周囲に罫線を引く
                                headersheet.Range("A3", "P3").Style
                                .Border.SetTopBorder(XLBorderStyleValues.Thin)
                                .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                                .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                                .Border.SetRightBorder(XLBorderStyleValues.Thin);

                                // 列幅の指定
                                headersheet.Column(1).Width = 6;
                                headersheet.Column(2).Width = 28;
                                headersheet.Column(3).Width = 6;
                                for (int cnt = 4; cnt < 15; cnt++)
                                {
                                    headersheet.Column(cnt).Width = 9;
                                }
                                headersheet.Column(16).Width = 10;

                                // 印刷体裁(B4横、印刷範囲)
                                headersheet.PageSetup.PaperSize       = XLPaperSize.B4Paper;
                                headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                                // ヘッダー部の指定(番号)
                                headersheet.PageSetup.Header.Left.AddText("(№53)");

                                // ヘッダーシートのコピー
                                pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count);
                            }
                            else
                            {
                                // 開始年を変更
                                dtYmdFrom = DateTime.Parse(lstItem[0]);
                                headersheet.Cell("D3").Value = dtYmdFrom.AddYears(listCnt);

                                // ヘッダーシートのコピー
                                pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count);
                            }
                        }

                        // 得意先コードを出力
                        currentsheet.Cell(xlsRowCnt, 1).Value = drSuiihyo[2].ToString();
                        currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;

                        // 得意先名を出力
                        currentsheet.Cell(xlsRowCnt, 2).Value = drSuiihyo[3].ToString();
                        currentsheet.Cell(xlsRowCnt, 2).Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;
                        currentsheet.Cell(xlsRowCnt, 2).Style.Alignment.WrapText = true;

                        // セルの結合
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt + 2, 1).Merge();
                        currentsheet.Range(xlsRowCnt, 2, xlsRowCnt + 2, 2).Merge();

                        // 行タイトル(前年、本年、達成率)を出力
                        currentsheet.Cell(xlsRowCnt, 3).Value     = "前年";
                        currentsheet.Cell(xlsRowCnt + 1, 3).Value = "本年";
                        currentsheet.Cell(xlsRowCnt + 2, 3).Value = "達成率";

                        // 期間の開始から終了までの差が11カ月未満の場合
                        if (blnDiff)
                        {
                            drSuiihyo[16] = 0;
                            drSuiihyo[29] = 0;
                        }

                        // 1セルずつデータ出力
                        for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                        {
                            string str = drSuiihyo[colCnt - 1].ToString();

                            // 前売上1~12セルの処理
                            if (colCnt >= 5 && colCnt <= 16)
                            {
                                // 3桁毎に","を挿入する
                                currentsheet.Cell(xlsRowCnt, colCnt - 1).Style.NumberFormat.SetFormat("#,##0");
                                currentsheet.Cell(xlsRowCnt, colCnt - 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                                // 期間終了月の翌月以降の場合、0をセット
                                if (blnDiff && intMonthDiff < (colCnt - 5))
                                {
                                    currentsheet.Cell(xlsRowCnt, colCnt - 1).Value = 0;
                                }
                                else
                                {
                                    currentsheet.Cell(xlsRowCnt, colCnt - 1).Value = str;

                                    // 期間の開始から終了までの差が11カ月未満の場合
                                    if (blnDiff)
                                    {
                                        drSuiihyo[16] = (decimal)drSuiihyo[16] + (decimal)drSuiihyo[colCnt - 1];
                                    }
                                }
                            }

                            // 前売上合計セルの処理
                            if (colCnt == 17)
                            {
                                // 3桁毎に","を挿入する
                                currentsheet.Cell(xlsRowCnt, colCnt - 1).Style.NumberFormat.SetFormat("#,##0");
                                currentsheet.Cell(xlsRowCnt, colCnt - 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                currentsheet.Cell(xlsRowCnt, colCnt - 1).Value = str;
                            }

                            // 本売上1~12セルの処理
                            if (colCnt >= 18 && colCnt <= 29)
                            {
                                // 3桁毎に","を挿入する
                                currentsheet.Cell(xlsRowCnt + 1, colCnt - 14).Style.NumberFormat.SetFormat("#,##0");
                                currentsheet.Cell(xlsRowCnt + 1, colCnt - 14).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                                // 期間終了月の翌月以降の場合、0をセット
                                if (blnDiff && intMonthDiff < (colCnt - 18))
                                {
                                    currentsheet.Cell(xlsRowCnt + 1, colCnt - 14).Value = 0;
                                }
                                else
                                {
                                    currentsheet.Cell(xlsRowCnt + 1, colCnt - 14).Value = str;

                                    // 期間の開始から終了までの差が11カ月未満の場合
                                    if (blnDiff)
                                    {
                                        drSuiihyo[29] = (decimal)drSuiihyo[29] + (decimal)drSuiihyo[colCnt - 1];
                                    }
                                }
                            }

                            // 本売上合計セルの処理
                            if (colCnt == 30)
                            {
                                // 3桁毎に","を挿入する
                                currentsheet.Cell(xlsRowCnt + 1, colCnt - 14).Style.NumberFormat.SetFormat("#,##0");
                                currentsheet.Cell(xlsRowCnt + 1, colCnt - 14).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                currentsheet.Cell(xlsRowCnt + 1, colCnt - 14).Value = str;
                            }
                        }

                        // 達成率の計算、出力
                        for (int column = 0; column < 12; column++)
                        {
                            decimal decZennen = 0;
                            decimal decHonnen = 0;
                            double  dblRitsu;

                            for (int cnt = 0; cnt <= column; cnt++)
                            {
                                // 期間の開始から終了までの差が11カ月未満でない場合、or
                                // 期間の開始から終了までの差が11カ月未満の場合、かつ、月数の差が列数以下の場合
                                if (!blnDiff || blnDiff && intMonthDiff >= column)
                                {
                                    decZennen += decimal.Parse(drSuiihyo[cnt + 4].ToString());
                                    decHonnen += decimal.Parse(drSuiihyo[cnt + 17].ToString());
                                }
                            }

                            if (decZennen == 0 || decHonnen == 0)
                            {
                                dblRitsu = 0;
                            }
                            else
                            {
                                dblRitsu = ((double)decHonnen / (double)decZennen) * 100;
                            }

                            // 3桁毎に","を挿入する、小数点第2位まで
                            currentsheet.Cell(xlsRowCnt + 2, column + 4).Style.NumberFormat.SetFormat("#,##0.00");
                            currentsheet.Cell(xlsRowCnt + 2, column + 4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                            currentsheet.Cell(xlsRowCnt + 2, column + 4).Value = dblRitsu.ToString();
                        }

                        // 達成率の合計出力
                        // 3桁毎に","を挿入する、小数点第2位まで
                        currentsheet.Cell(xlsRowCnt + 2, 16).Style.NumberFormat.SetFormat("#,##0.00");
                        currentsheet.Cell(xlsRowCnt + 2, 16).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        currentsheet.Cell(xlsRowCnt + 2, 16).Value = currentsheet.Cell(xlsRowCnt + 2, intMonthDiff + 4).Value;

                        // 3行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt + 2, 16).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // 33行毎(ヘッダーを除いた行数)にシート作成
                        if (xlsRowCnt == 37)
                        {
                            pageCnt++;
                            if (pageCnt <= maxPage)
                            {
                                xlsRowCnt = 1;

                                // ヘッダーシートのコピー
                                pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count);
                            }
                        }

                        // 担当者計を出力
                        tantoRowCnt++;
                        if (tantoGoukei.ElementAt(tantoCnt).count == tantoRowCnt)
                        {
                            xlsRowCnt += 3;

                            // 縦中央
                            IXLCell tantocell = currentsheet.Cell(xlsRowCnt, 1);
                            tantocell.Value = drSuiihyo[1].ToString();
                            tantocell.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;

                            // セル結合、セルの背景色
                            IXLRange tantorange = currentsheet.Range(xlsRowCnt, 1, xlsRowCnt + 2, 2);
                            tantorange.Merge();
                            tantorange.Style.Fill.BackgroundColor = XLColor.LightGray;

                            // 行タイトル(前年、本年、達成率)を出力
                            currentsheet.Cell(xlsRowCnt, 3).Value     = "前年";
                            currentsheet.Cell(xlsRowCnt + 1, 3).Value = "本年";
                            currentsheet.Cell(xlsRowCnt + 2, 3).Value = "達成率";

                            // 前年、本年、達成率セルの処理
                            for (int column = 0; column < 13; column++)
                            {
                                // 前年と本年を出力
                                for (int cnt = 0; cnt < 2; cnt++)
                                {
                                    // 3桁毎に","を挿入する
                                    IXLCell kingakuCell = currentsheet.Cell(xlsRowCnt + cnt, column + 4);
                                    kingakuCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                    kingakuCell.Style.NumberFormat.SetFormat("#,##0");
                                    kingakuCell.Value = decKingakuTanto[tantoCnt, cnt, column].ToString();
                                }

                                // 達成率の計算、出力
                                double dblRitsu;

                                if (decKingakuTanto[tantoCnt, 0, column] == 0 || decKingakuTanto[tantoCnt, 1, column] == 0)
                                {
                                    dblRitsu = 0;
                                }
                                else
                                {
                                    dblRitsu = ((double)decKingakuTanto[tantoCnt, 1, column] / (double)decKingakuTanto[tantoCnt, 0, column]) * 100;
                                }

                                // 3桁毎に","を挿入する、小数点第2位まで
                                currentsheet.Cell(xlsRowCnt + 2, column + 4).Style.NumberFormat.SetFormat("#,##0.00");
                                currentsheet.Cell(xlsRowCnt + 2, column + 4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                currentsheet.Cell(xlsRowCnt + 2, column + 4).Value = dblRitsu.ToString();
                            }

                            // 3行分のセルの周囲に罫線を引く
                            currentsheet.Range(xlsRowCnt, 1, xlsRowCnt + 2, 16).Style
                            .Border.SetTopBorder(XLBorderStyleValues.Thin)
                            .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                            .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                            .Border.SetRightBorder(XLBorderStyleValues.Thin);

                            tantoCnt++;
                            tantoRowCnt = 0;
                        }

                        // 33行毎(ヘッダーを除いた行数)にシート作成
                        if (xlsRowCnt == 37)
                        {
                            pageCnt++;
                            if (pageCnt <= maxPage)
                            {
                                xlsRowCnt = 1;

                                // ヘッダーシートのコピー
                                pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count);
                            }
                        }

                        rowCnt++;
                        xlsRowCnt += 3;
                    }

                    // 最終行を出力した後、合計行を出力
                    if (dtChkList.Rows.Count > 0)
                    {
                        // 前年と本年の合計を出力
                        for (int row = 0; row < 2; row++)
                        {
                            for (int column = 0; column < 13; column++)
                            {
                                // 3桁毎に","を挿入する
                                IXLCell kingakuCell = currentsheet.Cell(xlsRowCnt + row, 4 + column);
                                kingakuCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                kingakuCell.Style.NumberFormat.SetFormat("#,##0");
                                kingakuCell.Value = decKingaku[row, column].ToString();
                            }
                        }

                        // 合計タイトルを出力
                        currentsheet.Cell(xlsRowCnt, 1).Value = "■■ 合  計 ■■";
                        currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Vertical   = XLAlignmentVerticalValues.Center;
                        currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの結合
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt + 2, 2).Merge();

                        // 行タイトル(前年、本年、達成率)を出力
                        currentsheet.Cell(xlsRowCnt, 3).Value     = "前年";
                        currentsheet.Cell(xlsRowCnt + 1, 3).Value = "本年";
                        currentsheet.Cell(xlsRowCnt + 2, 3).Value = "達成率";

                        // 達成率の計算、出力
                        for (int column = 0; column < 13; column++)
                        {
                            double dblRitsu;

                            if (decKingaku[0, column] == 0 || decKingaku[1, column] == 0)
                            {
                                dblRitsu = 0;
                            }
                            else
                            {
                                dblRitsu = ((double)decKingaku[1, column] / (double)decKingaku[0, column]) * 100;
                            }

                            // 3桁毎に","を挿入する、小数点第2位まで
                            currentsheet.Cell(xlsRowCnt + 2, column + 4).Style.NumberFormat.SetFormat("#,##0.00");
                            currentsheet.Cell(xlsRowCnt + 2, column + 4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                            currentsheet.Cell(xlsRowCnt + 2, column + 4).Value = dblRitsu.ToString();
                        }

                        // 3行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt + 2, 16).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);
                    }
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // 各ページのヘッダー部を指定
                maxPage = workbook.Worksheets.Count;
                for (int pageCnt = 1; pageCnt <= maxPage; pageCnt++)
                {
                    // ヘッダー部に指定する情報を取得
                    string strHeader = pdf.getHeader(pageCnt, maxPage, strNow);

                    // ヘッダー部の指定(コンピュータ名、日付、ページ数を出力)
                    workbook.Worksheet(pageCnt).PageSetup.Header.Right.AddText(strHeader);
                }

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #8
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSetCd_B_Input">
        ///     MOの印刷データテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSetCd_B_Input, List <string> lstPrintHeader)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS ゴシック";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;


                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                // Linqで必要なデータをselect
                var outDataAll = dtSetCd_B_Input.AsEnumerable()
                                 .Select(dat => new
                {
                    MOHin         = dat["品名規格"],
                    MOSu          = dat["数量"],
                    MOHachuTanka  = dat["発注単価"],
                    MONoki        = dat["納期"],
                    MOShimukesaki = dat["仕向け先"],
                    MOChuban      = dat["注番"],
                }).ToList();

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 5;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                double page        = 1.0 * maxRowCnt / 47;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    //小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSiireCheak in dtChkList.Rows)
                {
                    //1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "MOリスト";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "H1").Merge();

                        // ヘッダー出力(表ヘッダー上)
                        headersheet.Cell("A3").Value = lstPrintHeader[0];   //年月度
                        headersheet.Cell("B3").Value = lstPrintHeader[1];   //仕向け元名

                        // ヘッダー出力(表ヘッダー)
                        headersheet.Cell("A4").Value = "品   名   ・   規   格";
                        headersheet.Cell("D4").Value = "数 量";
                        headersheet.Cell("E4").Value = "発注単価";
                        headersheet.Cell("F4").Value = "納 期";
                        headersheet.Cell("G4").Value = "仕 向 け 先";
                        headersheet.Cell("H4").Value = "注 番";

                        headersheet.Range("A4", "C4").Merge();

                        // ヘッダー列
                        headersheet.Range("A3", "B3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        headersheet.Range("A4", "H4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // 列幅の指定
                        headersheet.Column(1).Width = 20;
                        headersheet.Column(2).Width = 20;
                        headersheet.Column(3).Width = 20;
                        headersheet.Column(4).Width = 10;
                        headersheet.Column(5).Width = 15;
                        headersheet.Column(6).Width = 11;
                        headersheet.Column(7).Width = 50;
                        headersheet.Column(8).Width = 11;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A4", "H4").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        //背景を灰色にする
                        headersheet.Range("A4", "H4").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 印刷体裁(A4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№26)");

                        //ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        //マージ
                        currentsheet.Range("A" + xlsRowCnt, "C" + xlsRowCnt).Merge();

                        string str = drSiireCheak[colCnt - 1].ToString();

                        //行の高さ指定
                        currentsheet.Row(xlsRowCnt).Height = 20;

                        //品名・規格の場合
                        if (colCnt == 1)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }
                        //数量、発注単価の場合
                        else if (colCnt == 2 || colCnt == 3)
                        {
                            //小数点以下第二位まで表示
                            currentsheet.Cell(xlsRowCnt, colCnt + 2).Style.NumberFormat.Format = "#,0.00";

                            //マージされた分をずらす
                            currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt + 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }
                        //納期、仕向け先、注番の場合
                        else
                        {
                            //マージされた分をずらす
                            currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt + 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 8).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 24行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 24)
                    {
                        pageCnt++;

                        xlsRowCnt = 4;

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #9
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// DataTableをもとにxlsxファイルを作成し、PDFファイルを作成
        /// </summary>
        /// <param name="dtHachu">発注のデータテーブル</param>
        /// <returns>結合PDFファイル</returns>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtShukoShonin)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS ゴシック";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                //Linqで必要なデータをselect
                var outDataAll = dtShukoShonin.AsEnumerable()
                                 .Select(dat => new
                {
                    ShuhoShohinName    = dat["商品名"],
                    ShukoSu            = dat["数量"],
                    ShukoTokuisakiName = dat["得意先名"],
                    ShukoNoki          = dat["納期"],
                    ShukoJuchusha      = dat["受注者"]
                }).ToList();

                //リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                //ページ数計算
                double page        = 1.0 * maxRowCnt / 22;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    //小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                //ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSiireCheak in dtChkList.Rows)
                {
                    //1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        //タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "出庫指示書 (依頼分)";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "C1").Merge();

                        //ヘッダー出力(表ヘッダー)
                        headersheet.Cell("A3").Value = "品  名  ・  型  番";
                        headersheet.Cell("B3").Value = "数  量";
                        headersheet.Cell("C3").Value = "仕  向  け  先";
                        headersheet.Cell("D3").Value = "承認日";
                        headersheet.Cell("E3").Value = "受注者";

                        //ヘッダー列
                        headersheet.Range("A3", "E3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        //背景を灰色にする
                        headersheet.Range("A3", "E3").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 列幅の指定
                        headersheet.Column(1).Width = 65;
                        headersheet.Column(2).Width = 11;
                        headersheet.Column(3).Width = 50;
                        headersheet.Column(4).Width = 11;
                        headersheet.Column(5).Width = 20;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "E3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // 印刷体裁(A4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№17)");

                        //ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drSiireCheak[colCnt - 1].ToString();

                        currentsheet.Cell(xlsRowCnt, colCnt).Value = str;

                        //縦の中央に寄せる
                        currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;

                        //数量の場合
                        if (colCnt == 2)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.Format = "#,0";
                        }
                    }

                    //行の高さ指定
                    currentsheet.Row(xlsRowCnt).Height = 20;

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 5).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 22行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 22)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // ロゴ貼り付け処理
                int[] topRow     = { 1 };
                int[] leftColumn = { 4 };
                pdf.logoPaste(strOutXlsFile, topRow, leftColumn, 0, 0, 57);

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #10
0
        public string printReport(DataTable dt, string stJuchusha, string stTokui, string stFrom,
                                  string stTo, string stKata, string stChuban, int sKind)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strFilePath = "./Template/D0360_JuchuzanKakunin.xlsx";
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");

            try
            {
                // excelのインスタンス生成
                #region
                XLWorkbook   workbook       = new XLWorkbook(strFilePath, XLEventTracking.Disabled);
                IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート
                IXLWorksheet currentsheet   = null;                  // 処理中シート

                int pageCnt   = 0;                                   // ページ(シート枚数)カウント
                int xlsRowCnt = 7;                                   // Excel出力行カウント(開始は出力行)

                templatesheet1.CopyTo("Page" + pageCnt.ToString());
                currentsheet = workbook.Worksheet(workbook.Worksheets.Count);
                #endregion

                // 4行目記載文字列作成
                #region
                string sPrm = "受注者:";
                if (sKind == 1)
                {
                    sPrm = "発注者:";
                }

                if (!string.IsNullOrWhiteSpace(stJuchusha))
                {
                    sPrm += stJuchusha;
                }
                if (sKind == 1)
                {
                    sPrm += " 仕入先:";
                }
                else
                {
                    sPrm += " 得意先:";
                }

                if (!string.IsNullOrWhiteSpace(stTokui))
                {
                    sPrm += stTokui;
                }
                sPrm += " 納期範囲:";

                if (!string.IsNullOrWhiteSpace(stFrom))
                {
                    sPrm += stFrom;
                }
                sPrm += "~";

                if (!string.IsNullOrWhiteSpace(stTo))
                {
                    sPrm += stTo;
                }
                sPrm += " 品名・型番:";

                if (!string.IsNullOrWhiteSpace(stKata))
                {
                    sPrm += stKata;
                }
                sPrm += " 注番:";

                if (!string.IsNullOrWhiteSpace(stKata))
                {
                    sPrm += stChuban;
                }
                #endregion

                currentsheet.Cell(4, "A").Value = sPrm;

                if (sKind == 1)
                {
                    currentsheet.Cell(6, "A").Value = "発注日";
                    currentsheet.Cell(6, "K").Value = "仕入済";
                }

                // ClosedXMLで1行ずつExcelに出力
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (xlsRowCnt >= 67)
                    {
                        pageCnt++;
                        xlsRowCnt = 7;

                        // テンプレートシートからコピー
                        templatesheet1.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);
                        currentsheet.Cell(4, "A").Value = sPrm;

                        if (sKind == 1)
                        {
                            currentsheet.Cell(6, "A").Value = "発注日";
                            currentsheet.Cell(6, "K").Value = "仕入済";
                        }
                    }

                    if (sKind != 1)
                    {
                        currentsheet.Cell(xlsRowCnt, "A").Value     = "'" + dt.Rows[i]["受注日"].ToString().Substring(2, 8);
                        currentsheet.Cell(xlsRowCnt, "B").Value     = "'" + dt.Rows[i]["納期"].ToString().Substring(2, 8);
                        currentsheet.Cell(xlsRowCnt, "C").Value     = "'" + dt.Rows[i]["注番"];
                        currentsheet.Cell(xlsRowCnt, "D").Value     = dt.Rows[i]["メーカー"];
                        currentsheet.Cell(xlsRowCnt, "E").Value     = "'" + dt.Rows[i]["品名"];
                        currentsheet.Cell(xlsRowCnt, "F").Value     = dt.Rows[i]["受注数"];
                        currentsheet.Cell(xlsRowCnt, "G").Value     = dt.Rows[i]["売上単価"];
                        currentsheet.Cell(xlsRowCnt, "H").Value     = dt.Rows[i]["売上金額"];
                        currentsheet.Cell(xlsRowCnt, "I").Value     = dt.Rows[i]["仕入単価"];
                        currentsheet.Cell(xlsRowCnt, "J").Value     = dt.Rows[i]["仕入金額"];
                        currentsheet.Cell(xlsRowCnt, "K").Value     = dt.Rows[i]["売上済"];
                        currentsheet.Cell(xlsRowCnt, "L").Value     = dt.Rows[i]["状態"];
                        currentsheet.Cell(xlsRowCnt, "M").Value     = dt.Rows[i]["受注番号"];
                        currentsheet.Cell(xlsRowCnt, "N").Value     = dt.Rows[i]["得意先名"];
                        currentsheet.Cell(xlsRowCnt + 1, "N").Value = dt.Rows[i]["仕入先名"];
                        currentsheet.Cell(xlsRowCnt, "O").Value     = dt.Rows[i]["受注者"];
                    }
                    else
                    {
                        currentsheet.Cell(xlsRowCnt, "A").Value     = "'" + dt.Rows[i]["発注日"].ToString().Substring(2, 8);
                        currentsheet.Cell(xlsRowCnt, "B").Value     = "'" + dt.Rows[i]["納期"].ToString().Substring(2, 8);
                        currentsheet.Cell(xlsRowCnt, "C").Value     = "'" + dt.Rows[i]["注番"];
                        currentsheet.Cell(xlsRowCnt, "D").Value     = dt.Rows[i]["メーカー"];
                        currentsheet.Cell(xlsRowCnt, "E").Value     = "'" + dt.Rows[i]["品名"];
                        currentsheet.Cell(xlsRowCnt, "F").Value     = dt.Rows[i]["受注数"];
                        currentsheet.Cell(xlsRowCnt, "G").Value     = dt.Rows[i]["売上単価"];
                        currentsheet.Cell(xlsRowCnt, "H").Value     = dt.Rows[i]["売上金額"];
                        currentsheet.Cell(xlsRowCnt, "I").Value     = dt.Rows[i]["仕入単価"];
                        currentsheet.Cell(xlsRowCnt, "J").Value     = dt.Rows[i]["仕入金額"];
                        currentsheet.Cell(xlsRowCnt, "K").Value     = dt.Rows[i]["仕入済"];
                        currentsheet.Cell(xlsRowCnt, "L").Value     = dt.Rows[i]["状態"];
                        currentsheet.Cell(xlsRowCnt, "M").Value     = dt.Rows[i]["受注番号"];
                        currentsheet.Cell(xlsRowCnt, "N").Value     = dt.Rows[i]["得意先名"];
                        currentsheet.Cell(xlsRowCnt + 1, "N").Value = dt.Rows[i]["仕入先名"];
                        currentsheet.Cell(xlsRowCnt, "O").Value     = dt.Rows[i]["発注者"];
                    }

                    xlsRowCnt = xlsRowCnt + 2;
                }

                for (int i = xlsRowCnt; i < 67; i++)
                {
                    currentsheet.Row(xlsRowCnt).Clear();
                    currentsheet.Row(xlsRowCnt).Delete();
                }

                currentsheet.Row(xlsRowCnt).InsertRowsAbove(1);

                //currentsheet.Cell(xlsRowCnt, "A").Style.Border.SetTopBorder(XLBorderStyleValues.Thin);
                //currentsheet.Cell(xlsRowCnt, "A").Style.Border.SetLeftBorder(XLBorderStyleValues.Thin);
                //currentsheet.Cell(xlsRowCnt, "A").Style.Border.SetRightBorder(XLBorderStyleValues.Thin);
                //currentsheet.Cell(xlsRowCnt, "A").Style.Border.SetBottomBorder(XLBorderStyleValues.Thin);

                currentsheet.Cell(xlsRowCnt, "H").Value = (dt.Compute("Sum(売上金額)", null)).ToString();
                currentsheet.Cell(xlsRowCnt, "J").Value = (dt.Compute("Sum(仕入金額)", null)).ToString();

                // テンプレートシート削除
                templatesheet1.Delete();

                // ページ数設定
                for (pageCnt = 1; pageCnt <= workbook.Worksheets.Count; pageCnt++)
                {
                    string s = "'" + pageCnt.ToString() + "/" + (workbook.Worksheets.Count).ToString();
                    workbook.Worksheet(pageCnt).Cell("O1").Value = s;      // No.
                }

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // ロゴ貼り付け処理
                // PDF化の処理
                CreatePdf pdf = new CreatePdf();
                return(pdf.createPdf(strOutXlsFile, strDateTime, 0));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #11
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化と取引先経理情報DBへの追加</summary>
        /// <param name="dtSetCd_B_Input">
        ///     売掛金残高一覧確認の印刷データテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSetCd_B_Input, List <string> lstlstTorihiki)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            //合計値の確保用
            decimal decUriYM          = 0;
            decimal decZenUrikakeZan  = 0;
            decimal decNyukinGenkin   = 0;
            decimal decNyukinKogitte  = 0;
            decimal decNyukinHurikomi = 0;
            decimal decNyukinTegata   = 0;
            decimal decNyukinSosai    = 0;
            decimal decNyukinTesuryo  = 0;
            decimal decNyukinSonota   = 0;
            decimal decKurikoshiZan   = 0;
            decimal decTogetuUriage   = 0;
            decimal decTogetuShohizei = 0;
            decimal decTogetuZan      = 0;

            //締め日用(月の最終日)
            DateTime dateYMDLastDay = new DateTime();

            //締め日用(その月の日数)
            int intDays = 0;

            //SQLファイルのパスとファイル名を入れる用
            List <string> lstSQL = new List <string>();

            //SQLファイルのパス用(フォーマット後)
            string strSQLInput = "";

            //SQLファイルのパスとファイル名を追加
            lstSQL.Add("C0500_UrikakekinZandakaIchiranKakunin");
            lstSQL.Add("C0500_UrikakekinZan_DELETE_INSERT");

            //SQL接続
            OpenSQL opensql = new OpenSQL();

            //接続用クラスのインスタンス作成
            DBConnective dbconnective = new DBConnective();

            //トランザクション開始
            dbconnective.BeginTrans();
            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 8;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                // Linqで必要なデータをselect
                var outDataAll = dtSetCd_B_Input.AsEnumerable()
                                 .Select(dat => new
                {
                    UriCd             = dat["コード"],
                    UriTokuiName      = dat["得意先名"],
                    UriYM             = dat["年月"],
                    UriZenUrikakeZan  = dat["前月売掛残"],
                    UriNyukinGenkin   = dat["入金現金"],
                    UriNyukinKogitte  = dat["入金小切手"],
                    UriNyukinHurikomi = dat["入金振込"],
                    UriNyukinTegata   = dat["入金手形"],
                    UriNyukinSosai    = dat["入金相殺"],
                    UriNyukinTesuryo  = dat["入金手数料"],
                    UriNyukinSonota   = dat["入金その他"],
                    UriKurikoshiZan   = dat["繰越残高"],
                    UriTogetuUriage   = dat["当月売上高"],
                    UriTogetuShohizei = dat["当月消費税"],
                    UriTogetuZan      = dat["当月残高"],
                    UriZeiku          = dat["税区"],
                }).ToList();

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                double page        = 1.0 * maxRowCnt / 37;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    //小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drTokuisakiCheak in dtChkList.Rows)
                {
                    //1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "売掛金残高一覧表";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "P1").Merge();

                        // ヘッダー出力(表ヘッダー)
                        headersheet.Cell("A3").Value = "コード";
                        headersheet.Cell("B3").Value = "得意先名";
                        headersheet.Cell("C3").Value = "年月";
                        headersheet.Cell("D3").Value = "前月売掛残";
                        headersheet.Cell("E3").Value = "入金現金";

                        headersheet.Cell("F3").Value = "入金小切手";
                        headersheet.Cell("G3").Value = "入金振込";
                        headersheet.Cell("H3").Value = "入金手形";
                        headersheet.Cell("I3").Value = "入金相殺";
                        headersheet.Cell("J3").Value = "入金手数料";

                        headersheet.Cell("K3").Value = "入金その他";
                        headersheet.Cell("L3").Value = "繰越残高";
                        headersheet.Cell("M3").Value = "当月売上高";
                        headersheet.Cell("N3").Value = "当月消費税";
                        headersheet.Cell("O3").Value = "当月残高";

                        headersheet.Cell("P3").Value = "税区";

                        //列幅の指定
                        headersheet.Column(1).Width  = 5;  //コード
                        headersheet.Column(2).Width  = 25; //得意先名
                        headersheet.Column(3).Width  = 7;  //年月
                        headersheet.Column(4).Width  = 10; //前月売掛残
                        headersheet.Column(5).Width  = 10; //入金現金
                        headersheet.Column(6).Width  = 10; //入金小切手
                        headersheet.Column(7).Width  = 10; //入金振込
                        headersheet.Column(8).Width  = 10; //入金手形
                        headersheet.Column(9).Width  = 10; //入金相殺
                        headersheet.Column(10).Width = 10; //入金手数料
                        headersheet.Column(11).Width = 10; //入金その他
                        headersheet.Column(12).Width = 10; //繰越残高
                        headersheet.Column(13).Width = 10; //当月売上高
                        headersheet.Column(14).Width = 10; //当月消費税
                        headersheet.Column(15).Width = 10; //当月残高
                        headersheet.Column(16).Width = 7;  //税区

                        //ヘッダー文字位置の指定
                        headersheet.Column(1).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //コード
                        headersheet.Column(2).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //得意先名
                        headersheet.Column(3).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //年月
                        headersheet.Column(4).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //前月売掛残
                        headersheet.Column(5).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //入金現金
                        headersheet.Column(6).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //入金小切手
                        headersheet.Column(7).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //入金振込
                        headersheet.Column(8).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //入金手形
                        headersheet.Column(9).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Center;  //入金相殺
                        headersheet.Column(10).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //入金手数料
                        headersheet.Column(11).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //入金その他
                        headersheet.Column(12).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //繰越残高
                        headersheet.Column(13).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //当月売上高
                        headersheet.Column(14).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //当月消費税
                        headersheet.Column(15).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //当月残高
                        headersheet.Column(16).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  //税区

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "P3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        //背景を灰色にする
                        headersheet.Range("A3", "P3").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 印刷体裁(A4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№50)");

                        headersheet.PageSetup.Margins.Left  = 0.3;
                        headersheet.PageSetup.Margins.Right = 0.3;

                        //ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drTokuisakiCheak[colCnt - 1].ToString();

                        //行の高さ指定
                        currentsheet.Row(xlsRowCnt).Height = 12;

                        //年月の場合
                        if (colCnt == 3)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.DateFormat.Format = "yyyy/MM";
                            currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }
                        else if (colCnt == 4 ||     //前月売掛残
                                 colCnt == 5 ||     //入金現金
                                 colCnt == 6 ||     //入金小切手
                                 colCnt == 7 ||     //入金振込
                                 colCnt == 8 ||     //入金手形
                                 colCnt == 9 ||     //入金相殺
                                 colCnt == 10 ||    //入金手数料
                                 colCnt == 11 ||    //入金その他
                                 colCnt == 12 ||    //繰越残高
                                 colCnt == 13 ||    //当月売上高
                                 colCnt == 14 ||    //当月消費税
                                 colCnt == 15)      //当月残高
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Value = str;

                            //カンマ処理
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.Format  = "#,0";
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 16).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 40行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 40)
                    {
                        pageCnt++;

                        xlsRowCnt = 3;

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    //各合計値を入れる
                    decZenUrikakeZan  = decZenUrikakeZan + decimal.Parse(drTokuisakiCheak[3].ToString());
                    decNyukinGenkin   = decNyukinGenkin + decimal.Parse(drTokuisakiCheak[4].ToString());
                    decNyukinKogitte  = decNyukinKogitte + decimal.Parse(drTokuisakiCheak[5].ToString());
                    decNyukinHurikomi = decNyukinHurikomi + decimal.Parse(drTokuisakiCheak[6].ToString());
                    decNyukinTegata   = decNyukinTegata + decimal.Parse(drTokuisakiCheak[7].ToString());
                    decNyukinSosai    = decNyukinSosai + decimal.Parse(drTokuisakiCheak[8].ToString());
                    decNyukinTesuryo  = decNyukinTesuryo + decimal.Parse(drTokuisakiCheak[9].ToString());
                    decNyukinSonota   = decNyukinSonota + decimal.Parse(drTokuisakiCheak[10].ToString());
                    decKurikoshiZan   = decKurikoshiZan + decimal.Parse(drTokuisakiCheak[11].ToString());
                    decTogetuUriage   = decTogetuUriage + decimal.Parse(drTokuisakiCheak[12].ToString());
                    decTogetuShohizei = decTogetuShohizei + decimal.Parse(drTokuisakiCheak[13].ToString());
                    decTogetuZan      = decTogetuZan + decimal.Parse(drTokuisakiCheak[14].ToString());

                    //SQLファイルのパス取得
                    strSQLInput = opensql.setOpenSQL(lstSQL);

                    //パスがなければ返す
                    if (strSQLInput == "")
                    {
                        return("");
                    }

                    //その月の日数を作成
                    intDays = DateTime.DaysInMonth(DateTime.Parse(drTokuisakiCheak[2].ToString()).Year,
                                                   DateTime.Parse(drTokuisakiCheak[2].ToString()).Month);
                    //その月の最終日を作成
                    dateYMDLastDay = new DateTime(DateTime.Parse(drTokuisakiCheak[2].ToString()).Year,
                                                  DateTime.Parse(drTokuisakiCheak[2].ToString()).Month,
                                                  intDays);

                    //SQLファイルと該当コードでフォーマット
                    strSQLInput = string.Format(strSQLInput,
                                                dateYMDLastDay,                                 //年月日[0]
                                                drTokuisakiCheak[0].ToString(),                 //コード[1]
                                                drTokuisakiCheak[14].ToString(),                //残高[2]
                                                drTokuisakiCheak[12].ToString(),                //金額1[3]
                                                drTokuisakiCheak[13].ToString(),                //金額2[4]
                                                decimal.Parse(drTokuisakiCheak[4].ToString()) +
                                                decimal.Parse(drTokuisakiCheak[5].ToString()) +
                                                decimal.Parse(drTokuisakiCheak[6].ToString()) +
                                                decimal.Parse(drTokuisakiCheak[7].ToString()) +
                                                decimal.Parse(drTokuisakiCheak[8].ToString()) +
                                                decimal.Parse(drTokuisakiCheak[9].ToString()) +
                                                decimal.Parse(drTokuisakiCheak[10].ToString()), //金額3[5]
                                                lstlstTorihiki[0],                              //登録日、更新日[6]
                                                lstlstTorihiki[1]                               //登録ユーザー名、更新ユーザー名[7]
                                                );

                    //SQL接続、追加
                    dbconnective.RunSql(strSQLInput);

                    rowCnt++;
                    xlsRowCnt++;

                    //最終行の場合
                    if (rowCnt > dtChkList.Rows.Count)
                    {
                        //マージ
                        currentsheet.Range("A" + xlsRowCnt, "B" + xlsRowCnt).Merge();

                        currentsheet.Cell(xlsRowCnt, 1).Value = "◆◆◆ 合 計 ◆◆◆";
                        currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        currentsheet.Cell(xlsRowCnt, 3).Value  = decUriYM.ToString();           //年月(必然的に0)
                        currentsheet.Cell(xlsRowCnt, 4).Value  = decZenUrikakeZan.ToString();   //前月売掛残
                        currentsheet.Cell(xlsRowCnt, 5).Value  = decNyukinGenkin.ToString();    //入金現金
                        currentsheet.Cell(xlsRowCnt, 6).Value  = decNyukinKogitte.ToString();   //入金小切手
                        currentsheet.Cell(xlsRowCnt, 7).Value  = decNyukinHurikomi.ToString();  //入金振込
                        currentsheet.Cell(xlsRowCnt, 8).Value  = decNyukinTegata.ToString();    //入金手形
                        currentsheet.Cell(xlsRowCnt, 9).Value  = decNyukinSosai.ToString();     //入金相殺
                        currentsheet.Cell(xlsRowCnt, 10).Value = decNyukinTesuryo.ToString();   //入金手数料
                        currentsheet.Cell(xlsRowCnt, 11).Value = decNyukinSonota.ToString();    //入金その他
                        currentsheet.Cell(xlsRowCnt, 12).Value = decKurikoshiZan.ToString();    //繰越残高
                        currentsheet.Cell(xlsRowCnt, 13).Value = decTogetuUriage.ToString();    //当月売上高
                        currentsheet.Cell(xlsRowCnt, 14).Value = decTogetuShohizei.ToString();  //当月消費税
                        currentsheet.Cell(xlsRowCnt, 15).Value = decTogetuZan.ToString();       //当月残高

                        //最終行、各項目のカンマ処理と文字寄せ
                        for (int intCnt = 3; intCnt < 16; intCnt++)
                        {
                            currentsheet.Cell(xlsRowCnt, intCnt).Style.NumberFormat.Format  = "#,0";
                            currentsheet.Cell(xlsRowCnt, intCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 1行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 16).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);
                    }
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch (Exception ex)
            {
                //ロールバック開始
                dbconnective.Rollback();
                throw (ex);
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }

                //コミット開始
                dbconnective.Commit();
            }
        }
예제 #12
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtUriageJisseki">
        ///     売上実績確認のデータテーブル</param>
        /// <param name="lstItem">
        ///     検索条件List
        ///     lstItem[0]  伝票年月日Start,
        ///     lstItem[1]  伝票年月日End,
        ///     lstItem[2]  受注者コード,
        ///     lstItem[3]  営業担当者コード,
        ///     lstItem[4]  担当者コード,
        ///     lstItem[5]  仕入先コード,
        ///     lstItem[6]  大分類,
        ///     lstItem[7]  中分類,
        ///     lstItem[8]  品名・型番,
        ///     lstItem[9]  備考,
        ///     lstItem[10] 得意先,
        ///     lstItem[11] メーカー,
        ///     lstItem[12] 受注番号,
        ///     lstItem[13] 発注番号
        /// </param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtUriageJisseki, List <string> lstItem)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート


                //Linqで必要なデータをselect
                var outDataAll = dtUriageJisseki.AsEnumerable()
                                 .Select(dat => new
                {
                    denpyoYMD       = dat["伝票年月日"],
                    denpyoNo        = dat["伝票番号"],
                    maker           = dat["メーカー"],
                    sinameikatasiki = dat["品名型式"],
                    suuryo          = dat["数量"],
                    tanaka          = (decimal)dat["単価"],
                    uriagekingaku   = (decimal)dat["売上金額"],
                    genka           = (decimal)dat["原価"],
                    genkakingaku    = (decimal)dat["原価金額"],
                    ararigaku       = (decimal)dat["粗利額"],
                    untin           = (decimal)dat["運賃"],
                    bikou           = dat["備考"],
                    siiresakimei    = dat["仕入先名"],
                    tokuisakimei    = dat["得意先名"],
                    juchuNo         = dat["受注番号"],
                    tantousyamei    = dat["受注担当"]   //グリッドビューの表記は担当者
                }).ToList();

                // linqで売上合計、原価合計、粗利額合計、運賃合計を算出する。
                decimal[] decKingaku = new decimal[13];
                decKingaku[0] = outDataAll.Select(gokei => gokei.uriagekingaku).Sum();
                decKingaku[1] = outDataAll.Select(gokei => gokei.genkakingaku).Sum();
                decKingaku[2] = outDataAll.Select(gokei => gokei.ararigaku).Sum();
                decKingaku[3] = outDataAll.Select(gokei => gokei.untin).Sum();

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                double page        = 1.0 * maxRowCnt / 38;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    // 小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drUriageCheckList in dtChkList.Rows)
                {
                    // 1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "売 上 実 績 確 認 表";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "O1").Merge();

                        // 入力日、伝票年月日出力(A2のセル)
                        IXLCell unitCell = headersheet.Cell("A2");
                        unitCell.Value = "  担当者:" + lstItem[2]
                                         + " 得意先: " + lstItem[10]
                                         + "伝票年月日:"
                                         + string.Format(lstItem[0], "yyyy年MM月dd日") + " ~ "
                                         + string.Format(lstItem[1], "yyyy年MM月dd日")
                                         + " 大分類 :" + lstItem[6]
                                         + " 中分類 :" + lstItem[7]
                                         + " 品名・型番:" + lstItem[8]
                                         + " 備考:" + lstItem[9];
                        unitCell.Style.Font.FontSize = 10;

                        // ヘッダー出力(3行目のセル)
                        headersheet.Cell("A3").Value = "売上日";
                        headersheet.Cell("B3").Value = "伝票番号";
                        headersheet.Cell("C3").Value = "メーカー";
                        headersheet.Cell("D3").Value = "品名・型式";
                        headersheet.Cell("E3").Value = "数量";
                        headersheet.Cell("F3").Value = "単価";
                        headersheet.Cell("G3").Value = "売上金額";
                        headersheet.Cell("H3").Value = "原価";
                        headersheet.Cell("I3").Value = "原価金額";
                        headersheet.Cell("J3").Value = "粗利額";
                        headersheet.Cell("K3").Value = "運賃";
                        headersheet.Cell("L3").Value = "備考";
                        headersheet.Cell("M3").Value = "得意先名/仕入先名";
                        headersheet.Cell("N3").Value = "受注番号";
                        headersheet.Cell("O3").Value = "担当者名";

                        // ヘッダー列
                        headersheet.Range("A3", "O3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "O3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // セルの背景色
                        headersheet.Range("A3", "O3").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 列幅の指定
                        headersheet.Column(1).Width  = 10;
                        headersheet.Column(2).Width  = 10;
                        headersheet.Column(3).Width  = 10;
                        headersheet.Column(4).Width  = 30;
                        headersheet.Column(5).Width  = 5;
                        headersheet.Column(6).Width  = 12;
                        headersheet.Column(7).Width  = 10;
                        headersheet.Column(8).Width  = 10;
                        headersheet.Column(9).Width  = 10;
                        headersheet.Column(10).Width = 10;
                        headersheet.Column(11).Width = 10;
                        headersheet.Column(12).Width = 30;
                        headersheet.Column(13).Width = 24;
                        headersheet.Column(14).Width = 10;
                        headersheet.Column(15).Width = 11;

                        // 行の高さの指定
                        headersheet.Rows(4, 41).Height = 18;

                        // フォントサイズ変更
                        headersheet.Range("D4:D41").Style.Font.FontSize = 6;
                        headersheet.Range("L4:L41").Style.Font.FontSize = 6;
                        headersheet.Range("M4:M41").Style.Font.FontSize = 6;

                        // 印刷体裁(A3横、印刷範囲、余白)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A3Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;
                        headersheet.PageSetup.Margins.Left    = 0.5;
                        headersheet.PageSetup.Margins.Right   = 0.5;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№31)");

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drUriageCheckList[colCnt - 1].ToString();
                        //基本は左詰め
                        currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;

                        // 伝票番号の場合
                        if (colCnt == 2)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 金額セルの処理
                        if (colCnt == 5 || colCnt >= 7 && colCnt <= 11)
                        {
                            // 3桁毎に","を挿入する
                            str = string.Format("{0:#,0}", decimal.Parse(str));
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 単価セルの処理
                        if (colCnt == 6)
                        {
                            // 3桁毎に","を挿入する、小数点第2位まで
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0.00");
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 備考の場合
                        if (colCnt == 12)
                        {
                            currentsheet.Cell(xlsRowCnt, 12).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }

                        // 仕入先名の場合
                        if (colCnt == 13)
                        {
                            //得意先名/仕入先名とする。
                            str = drUriageCheckList[13].ToString() + "\r\n-----------------------------------------\r\n" +
                                  drUriageCheckList[12].ToString();
                            currentsheet.Cell(xlsRowCnt, 13).Style.Alignment.Vertical   = XLAlignmentVerticalValues.Top;
                            currentsheet.Cell(xlsRowCnt, 13).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }

                        // 受注番号の場合
                        if (colCnt == 15)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt - 1).Value = str;
                            currentsheet.Cell(xlsRowCnt, colCnt - 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }
                        // 担当者名の場合
                        else if (colCnt == 16)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt - 1).Value = str;
                        }
                        // 得意先名の場合、仕入先名の処理で行っているため何もしない
                        else if (colCnt == 14)
                        {
                        }
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                        }
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 15).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 38行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 41)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // 最終行を出力した後、合計行を出力
                if (dtChkList.Rows.Count > 0)
                {
                    // セル結合
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 6).Merge();
                    currentsheet.Range(xlsRowCnt, 12, xlsRowCnt, 15).Merge();

                    //合計金額設定
                    currentsheet.Cell(xlsRowCnt, 7).Value  = string.Format("{0,14:#,0}", decKingaku[0]);
                    currentsheet.Cell(xlsRowCnt, 8).Value  = "";
                    currentsheet.Cell(xlsRowCnt, 9).Value  = string.Format("{0,14:#,0}", decKingaku[1]);
                    currentsheet.Cell(xlsRowCnt, 10).Value = string.Format("{0,14:#,0}", decKingaku[2]);
                    currentsheet.Cell(xlsRowCnt, 11).Value = string.Format("{0,14:#,0}", decKingaku[3]);

                    //文字を右詰め
                    currentsheet.Cell(xlsRowCnt, 7).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Right;
                    currentsheet.Cell(xlsRowCnt, 9).Style.Alignment.Horizontal  = XLAlignmentHorizontalValues.Right;
                    currentsheet.Cell(xlsRowCnt, 10).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                    currentsheet.Cell(xlsRowCnt, 11).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 15).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #13
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSeikyuMeisai">
        ///     請求明細書のデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSeikyuMeisai)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strFilePath = "./Template/B0420_SeikyuMeisaishoPrint.xlsx";
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");

            try
            {
                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled);

                IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート
                IXLWorksheet templatesheet2 = workbook.Worksheet(2); // テンプレートシート(明細行のみ)
                IXLWorksheet currentsheet   = null;                  // 処理中シート

                int     pageCnt        = 0;                          // ページ(シート枚数)カウント
                int     xlsRowCnt      = 21;                         // Excel出力行カウント(開始は出力行)
                Boolean blnSheetCreate = false;
                string  strTokuisakiCd = "";

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSeikyuMeisai in dtSeikyuMeisai.Rows)
                {
                    // 得意先コードが前行と同じ場合、かつ、43行目になった場合、テンプレートシート(明細行のみ)作成
                    if (strTokuisakiCd.Equals(drSeikyuMeisai[0].ToString()) && xlsRowCnt == 43)
                    {
                        pageCnt++;
                        xlsRowCnt      = 15;
                        blnSheetCreate = true;

                        // テンプレートシート(明細行のみ)からコピー
                        templatesheet2.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);
                    }

                    // 得意先コードが前行と違う場合、テンプレートシート作成
                    if (!strTokuisakiCd.Equals(drSeikyuMeisai[0].ToString()))
                    {
                        strTokuisakiCd = drSeikyuMeisai[0].ToString();
                        pageCnt++;
                        xlsRowCnt      = 21;
                        blnSheetCreate = true;

                        // テンプレートシートからコピー
                        templatesheet1.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);

                        currentsheet.Cell("A18").Value = drSeikyuMeisai[7].ToString();      // 前月御請求額
                        currentsheet.Cell("C18").Value = drSeikyuMeisai[8].ToString();      // 当月入金額
                        currentsheet.Cell("F18").Value = drSeikyuMeisai[9].ToString();      // 御支払残高
                        currentsheet.Cell("G18").Value = drSeikyuMeisai[10].ToString();     // 当月御買上額
                        currentsheet.Cell("H17").Value = drSeikyuMeisai[11].ToString();     // 内税
                        currentsheet.Cell("H18").Value = drSeikyuMeisai[12].ToString();     // 消費税額
                        currentsheet.Cell("I18").Value = drSeikyuMeisai[13].ToString();     // 当月御請求額
                    }

                    // 最初の明細行の場合
                    if (blnSheetCreate)
                    {
                        blnSheetCreate = false;

                        currentsheet.Cell("B4").Value  = drSeikyuMeisai[2].ToString();      // 郵便番号
                        currentsheet.Cell("B6").Value  = drSeikyuMeisai[3].ToString();      // 住所1
                        currentsheet.Cell("B8").Value  = drSeikyuMeisai[4].ToString();      // 住所2
                        currentsheet.Cell("B10").Value = drSeikyuMeisai[1].ToString();      // 顧客名
                        currentsheet.Cell("H6").Value  = drSeikyuMeisai[5].ToString();      // 請求年月日
                    }

                    //

                    currentsheet.Cell(xlsRowCnt, "A").Value = drSeikyuMeisai[14].ToString();       // 日付
                    currentsheet.Cell(xlsRowCnt, "B").Value = drSeikyuMeisai[15].ToString();       // 伝票No.
                    currentsheet.Cell(xlsRowCnt, "D").Value = drSeikyuMeisai[18].ToString();       // 取区
                    currentsheet.Cell(xlsRowCnt, "E").Value = drSeikyuMeisai[19].ToString();       // 商品名
                    currentsheet.Cell(xlsRowCnt, "J").Value = drSeikyuMeisai[20].ToString();       // 数量
                    currentsheet.Cell(xlsRowCnt, "K").Value = drSeikyuMeisai[21].ToString();       // 単価
                    currentsheet.Cell(xlsRowCnt, "N").Value = drSeikyuMeisai[22].ToString();       // 金額
                    currentsheet.Cell(xlsRowCnt, "P").Value = drSeikyuMeisai[23].ToString();       // 入金金額
                    currentsheet.Cell(xlsRowCnt, "Q").Value = "'" + drSeikyuMeisai[24].ToString(); // 備考

                    xlsRowCnt++;
                }

                // テンプレートシート削除
                templatesheet1.Delete();
                templatesheet2.Delete();

                // ページ数設定
                for (pageCnt = 1; pageCnt <= workbook.Worksheets.Count; pageCnt++)
                {
                    workbook.Worksheet(pageCnt).Cell("R2").Value = pageCnt.ToString();      // No.
                }

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // ロゴ貼り付け処理
                CreatePdf pdf        = new CreatePdf();
                int[]     topRow     = { 5 };
                int[]     leftColumn = { 15 };
                pdf.logoPaste(strOutXlsFile, topRow, leftColumn, 200, 850, 57);

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 0));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #14
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSetCd_B_Input">
        ///     グループのデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSetCd_B_Input)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS ゴシック";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                //Linqで必要なデータをselect
                var outDataAll = dtSetCd_B_Input.AsEnumerable()
                                 .Select(dat => new
                {
                    tokuisakiCd   = dat["グループコード"],
                    tokuisakiName = dat["グループ名"],
                }).ToList();

                //リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                //ページ数計算
                double page        = 1.0 * maxRowCnt / 44;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    //小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                //ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSiireCheak in dtChkList.Rows)
                {
                    //1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        //タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "グループマスタリスト";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "B1").Merge();

                        //ヘッダー出力(表ヘッダー)
                        headersheet.Cell("A3").Value = "コード";
                        headersheet.Cell("B3").Value = "グループ名";

                        //ヘッダー列
                        headersheet.Range("A3", "E3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // 列幅の指定
                        headersheet.Column(1).Width = 10;
                        headersheet.Column(2).Width = 45;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "B3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // 印刷体裁(A4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Default;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№120)");

                        //ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drSiireCheak[colCnt - 1].ToString();

                        //コードの場合
                        if (colCnt == 1)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }

                        currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 2).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 47行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 47)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSiireJisseki">
        ///     仕入実績確認のデータテーブル</param>
        /// <param name="lstItem">
        ///     検索条件List
        ///     lstItem[0]  伝票年月日Start,
        ///     lstItem[1]  伝票年月日End,
        ///     lstItem[2]  営業担当者名,
        ///     lstItem[3]  発注者名,
        ///     lstItem[4]  受注者名,
        ///     lstItem[5]  仕入先名称,
        ///     lstItem[6]  大分類名称,
        ///     lstItem[7]  中分類名称,
        ///     lstItem[8]  品名・型番1,
        ///     lstItem[9]  品名・型番2,
        ///     lstItem[10] 品名・型番3,
        ///     lstItem[11] 備考,
        ///     lstItem[12] 得意先名称
        /// </param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSiireJisseki, List <string> lstItem)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート


                //Linqで必要なデータをselect
                var outDataAll = dtSiireJisseki.AsEnumerable()
                                 .Select(dat => new
                {
                    denpyoYmd  = dat["伝票年月日"],
                    denpyoNo   = dat["伝票番号"],
                    maker      = dat["メーカー"],
                    tantoName  = dat["品名型式"],
                    suuryo     = (decimal)dat["数量"],
                    tanka      = (decimal)dat["仕入単価"],
                    kingaku    = (decimal)dat["仕入金額"],
                    bikou      = dat["備考"],
                    syukaName  = dat["出荷先名"],
                    siireName  = dat["仕入先名"],
                    hachuNo    = dat["発注番号"],
                    hachuTanto = dat["発注担当"],
                    siireTanto = dat["仕入担当"],
                    juchuNo    = dat["受注番号"]
                }).ToList();

                // linqで仕入金額の合計算出
                decimal decKingaku = outDataAll.Select(gokei => gokei.kingaku).Sum();

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                double page        = 1.0 * maxRowCnt / 44;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    // 小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSiireCheak in dtChkList.Rows)
                {
                    // 1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "仕 入 実 績 確 認 表";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "N1").Merge();

                        // 担当者名、仕入先名、伝票年月日、大分類名、中分類名、品名・型番、備考出力(A2のセル)
                        IXLCell unitCell = headersheet.Cell("A2");
                        unitCell.Value = "担当者:" + lstItem[3] + " 仕入先:" + lstItem[5] +
                                         " 伝票年月日:" + lstItem[0] + "~" + lstItem[1] + " 大分類:" + lstItem[6] +
                                         " 中分類:" + lstItem[7] + " 品名・型番1:" + lstItem[8] + " 品名・型番2:" + lstItem[9] + " 品名・型番3:" + lstItem[10] +
                                         " 備考:" + lstItem[11];
                        unitCell.Style.Font.FontSize = 10;

                        // ヘッダー出力(3行目のセル)
                        headersheet.Cell("A3").Value = "仕入日";
                        headersheet.Cell("B3").Value = "伝票番号";
                        headersheet.Cell("C3").Value = "メーカー";
                        headersheet.Cell("D3").Value = "品名・型式";
                        headersheet.Cell("E3").Value = "数量";
                        headersheet.Cell("F3").Value = "仕入単価";
                        headersheet.Cell("G3").Value = "仕入金額";
                        headersheet.Cell("H3").Value = "備考";
                        headersheet.Cell("I3").Value = "出荷先";
                        headersheet.Cell("J3").Value = "仕入先";
                        headersheet.Cell("K3").Value = "発注番号";
                        headersheet.Cell("L3").Value = "発注担当";
                        headersheet.Cell("M3").Value = "仕入担当";
                        headersheet.Cell("N3").Value = "受注番号";

                        // ヘッダー列
                        headersheet.Range("A3", "N3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "N3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // セルの背景色
                        headersheet.Range("A3", "N3").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 列幅の指定
                        headersheet.Column(1).Width  = 9;
                        headersheet.Column(2).Width  = 8;
                        headersheet.Column(3).Width  = 14;
                        headersheet.Column(4).Width  = 30;
                        headersheet.Column(5).Width  = 6;
                        headersheet.Column(6).Width  = 12;
                        headersheet.Column(7).Width  = 12;
                        headersheet.Column(8).Width  = 30;
                        headersheet.Column(9).Width  = 20;
                        headersheet.Column(10).Width = 20;
                        headersheet.Column(11).Width = 8;
                        headersheet.Column(12).Width = 10;
                        headersheet.Column(13).Width = 10;
                        headersheet.Column(14).Width = 8;

                        // フォントサイズ変更
                        headersheet.Range("D4:D48").Style.Font.FontSize = 6;
                        headersheet.Range("H4:H48").Style.Font.FontSize = 6;
                        headersheet.Range("I4:I48").Style.Font.FontSize = 6;
                        headersheet.Range("J4:J48").Style.Font.FontSize = 6;

                        // 印刷体裁(A3横、印刷範囲、余白)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A3Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;
                        headersheet.PageSetup.Margins.Left    = 0.7;
                        headersheet.PageSetup.Margins.Right   = 0.7;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№32)");

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drSiireCheak[colCnt - 1].ToString();

                        // 数量、金額セルの処理
                        if (colCnt == 5 || colCnt == 7)
                        {
                            // 3桁毎に","を挿入する
                            str = string.Format("{0:#,0}", decimal.Parse(str));
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 単価セルの処理
                        if (colCnt == 6)
                        {
                            // 3桁毎に","を挿入する、小数点第2位まで
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0.00");
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 伝票番号、発注番号、受注番号の場合
                        if (colCnt == 2 || colCnt == 11 || colCnt == 14)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 備考の場合
                        if (colCnt == 8)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }

                        currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 14).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 44行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 48)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // 最終行を出力した後、合計行を出力
                if (dtChkList.Rows.Count > 0)
                {
                    // 3桁毎に","を挿入する
                    IXLCell kingakuCell = currentsheet.Cell(xlsRowCnt, 7);
                    kingakuCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                    kingakuCell.Value = string.Format("{0:#,0}", decKingaku);

                    // セルの結合
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 6).Merge();
                    currentsheet.Range(xlsRowCnt, 8, xlsRowCnt, 14).Merge();

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 14).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtUriage">
        ///     売上管理表のデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtUriage, List <string> lstItem)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strFilePath = "./Template/C0140_TantouUriageArariNenkan.xlsx";
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled);

                IXLWorksheet templatesheet = workbook.Worksheet(1); // テンプレートシート
                IXLWorksheet currentsheet  = null;                  // 処理中シート

                DataTable dtChkList    = null;
                int[]     groupRowsCnt = null;
                int       groupsCnt    = 0;

                // 総合計を取得
                decimal[] decKingaku = getGoukeiKingaku(dtUriage, ref dtChkList);

                // グループ合計を取得
                decimal[,] decKingakuGroup = getGroupKingaku(dtUriage, ref groupRowsCnt, ref groupsCnt);

                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 5;  // Excel出力行カウント(開始は出力行)

                int groupCnt    = 0;
                int groupRowCnt = 0;

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drUriage in dtChkList.Rows)
                {
                    // 1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;
                        xlsRowCnt = 5;

                        // テンプレートシートからコピー
                        templatesheet.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);

                        currentsheet.Cell("A1").Value = lstItem[0].ToString() + currentsheet.Cell("A1").Value;
                    }

                    // 担当者セルのデータ出力
                    currentsheet.Cell(xlsRowCnt, 1).Value  = drUriage[1].ToString();
                    currentsheet.Cell(xlsRowCnt, 23).Value = drUriage[1].ToString();

                    // 5月~10月、上期合計セルのデータ出力
                    for (int colCnt = 2; colCnt <= 22; colCnt++)
                    {
                        currentsheet.Cell(xlsRowCnt, colCnt).Value = drUriage[colCnt].ToString();
                    }

                    // 11月~12月、翌年の1月~4月、下期合計セルのデータ出力
                    for (int colCnt = 23; colCnt <= 43; colCnt++)
                    {
                        currentsheet.Cell(xlsRowCnt, colCnt + 1).Value = drUriage[colCnt].ToString();
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 44).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);


                    // グループ計を出力
                    groupRowCnt++;
                    if (groupRowsCnt[groupCnt] == groupRowCnt)
                    {
                        xlsRowCnt++;

                        // 担当者セルの出力
                        currentsheet.Cell(xlsRowCnt, 1).Value  = drUriage[0].ToString();
                        currentsheet.Cell(xlsRowCnt, 23).Value = drUriage[0].ToString();

                        // 5月~10月、上期合計セルのデータ出力
                        for (int colCnt = 0; colCnt <= 20; colCnt++)
                        {
                            // 前年粗利額の場合
                            if (colCnt % 3 == 2)
                            {
                                decimal decHiritsu;
                                if (decKingakuGroup[groupCnt, colCnt] == 0)
                                {
                                    decHiritsu = 0;
                                }
                                else
                                {
                                    decHiritsu = decKingakuGroup[groupCnt, colCnt - 1] / decKingakuGroup[groupCnt, colCnt];
                                }
                                currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = decHiritsu.ToString();
                            }
                            else
                            {
                                currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = decKingakuGroup[groupCnt, colCnt].ToString();
                            }
                        }

                        // 11月~12月、翌年の1月~4月、下期合計セルのデータ出力
                        for (int colCnt = 21; colCnt <= 41; colCnt++)
                        {
                            // 前年粗利額の場合
                            if (colCnt % 3 == 2)
                            {
                                decimal decHiritsu;
                                if (decKingakuGroup[groupCnt, colCnt] == 0)
                                {
                                    decHiritsu = 0;
                                }
                                else
                                {
                                    decHiritsu = decKingakuGroup[groupCnt, colCnt - 1] / decKingakuGroup[groupCnt, colCnt];
                                }
                                currentsheet.Cell(xlsRowCnt, colCnt + 3).Value = decHiritsu.ToString();
                            }
                            else
                            {
                                currentsheet.Cell(xlsRowCnt, colCnt + 3).Value = decKingakuGroup[groupCnt, colCnt].ToString();
                            }
                        }

                        // 1行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 44).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        groupCnt++;
                        groupRowCnt = 0;
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // 最終行を出力した後、合計行を出力
                if (dtChkList.Rows.Count > 0)
                {
                    // 担当者セルの出力
                    currentsheet.Cell(xlsRowCnt, 1).Value  = "総合計";
                    currentsheet.Cell(xlsRowCnt, 23).Value = "総合計";

                    // 5月~10月、上期合計セルのデータ出力
                    for (int colCnt = 0; colCnt <= 20; colCnt++)
                    {
                        // 前年粗利額の場合
                        if (colCnt % 3 == 2)
                        {
                            decimal decHiritsu;
                            if (decKingaku[colCnt] == 0)
                            {
                                decHiritsu = 0;
                            }
                            else
                            {
                                decHiritsu = decKingaku[colCnt - 1] / decKingaku[colCnt];
                            }
                            currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = decHiritsu.ToString();
                        }
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = decKingaku[colCnt].ToString();
                        }
                    }

                    // 11月~12月、翌年の1月~4月、下期合計セルのデータ出力
                    for (int colCnt = 21; colCnt <= 41; colCnt++)
                    {
                        // 前年粗利額の場合
                        if (colCnt % 3 == 2)
                        {
                            decimal decHiritsu;
                            if (decKingaku[colCnt] == 0)
                            {
                                decHiritsu = 0;
                            }
                            else
                            {
                                decHiritsu = decKingaku[colCnt - 1] / decKingaku[colCnt];
                            }
                            currentsheet.Cell(xlsRowCnt, colCnt + 3).Value = decHiritsu;
                        }
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt + 3).Value = decKingaku[colCnt].ToString();
                        }
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 44).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);
                }

                // ヘッダーシート削除
                templatesheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSoukoIdou">
        ///     倉庫移動確認のデータテーブル</param>
        /// <param name="lstItem">
        ///     検索条件List
        ///     lstItem[0]  営業所,
        ///     lstItem[1]  伝票年月日Start,
        ///     lstItem[2]  伝票年月日End,
        ///     lstItem[3]  大分類名称,
        ///     lstItem[4]  品名・型番,
        ///     lstItem[5]  備考,
        /// </param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSoukoIdou, List <string> lstItem)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 10;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート


                //Linqで必要なデータをselect
                var outDataAll = dtSoukoIdou.AsEnumerable()
                                 .Select(dat => new
                {
                    denpyoYmd = dat["年月日"],
                    denpyoNo  = dat["伝票番号"],
                    syoriName = dat["処理名"],
                    syukaName = dat["区分名"],
                    maker     = dat["メーカー"],
                    kataban   = dat["品名型式"],
                    suuryo    = (decimal)dat["数量"],
                    iraiName  = dat["依頼者名"],
                    juchuNo   = dat["受注番号"]
                }).ToList();

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                double page        = 1.0 * maxRowCnt / 44;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    // 小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSiireCheak in dtChkList.Rows)
                {
                    // 1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "倉 庫 移 動 確 認 表";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "I1").Merge();

                        // 担当者名、仕入先名、伝票年月日、大分類名、中分類名、品名・型番、備考出力(A2のセル)
                        IXLCell unitCell = headersheet.Cell("A2");
                        unitCell.Value = "営業所:" + lstItem[0] + " 伝票年月日:" + lstItem[1] + "~" + lstItem[2] +
                                         " 大分類:" + lstItem[3] + " 品名・型番:" + lstItem[4] + " 備考:" + lstItem[5];
                        unitCell.Style.Font.FontSize = 10;

                        // ヘッダー出力(3行目のセル)
                        headersheet.Cell("A3").Value = "日付";
                        headersheet.Cell("B3").Value = "伝票番号";
                        headersheet.Cell("C3").Value = "処理名";
                        headersheet.Cell("D3").Value = "区分名";
                        headersheet.Cell("E3").Value = "メーカー";
                        headersheet.Cell("F3").Value = "品名・型式";
                        headersheet.Cell("G3").Value = "数量";
                        headersheet.Cell("H3").Value = "依頼者名";
                        headersheet.Cell("I3").Value = "受注番号";
                        // ヘッダー列
                        headersheet.Range("A3", "I3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "I3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // セルの背景色
                        headersheet.Range("A3", "I3").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 列幅の指定
                        headersheet.Column(1).Width = 12;         // 日付
                        headersheet.Column(2).Width = 8;          // 伝票番号
                        headersheet.Column(3).Width = 14;         // 処理名
                        headersheet.Column(4).Width = 14;         // 区分名
                        headersheet.Column(5).Width = 14;         // メーカー
                        headersheet.Column(6).Width = 40;         // 品名・型式
                        headersheet.Column(7).Width = 8;          // 数量
                        headersheet.Column(8).Width = 14;         // 依頼者名
                        headersheet.Column(9).Width = 8;          // 受注番号

                        // 印刷体裁(A3横、印刷範囲、余白)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;
                        headersheet.PageSetup.Margins.Left    = 0.7;
                        headersheet.PageSetup.Margins.Right   = 0.7;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№28)");

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drSiireCheak[colCnt - 1].ToString();

                        // 数量、金額セルの処理
                        if (colCnt == 7)
                        {
                            // 3桁毎に","を挿入する
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0.00");
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 伝票番号、発注番号、受注番号の場合
                        if (colCnt == 2 || colCnt == 9)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 9).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 44行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 48)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #18
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSetCd_B_Input">
        ///     メーカーのデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSetCd_B_Input)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                //Linqで必要なデータをselect
                var outDataAll = dtSetCd_B_Input.AsEnumerable()
                                 .Select(dat => new
                {
                    torihikiCd   = (String)dat["取引先コード"],
                    torihikiName = dat["取引先名称"],
                    torihikiKana = dat["カナ"],
                    yubin        = dat["郵便番号"],
                    jusho1       = dat["住所1"],
                    jusho2       = dat["住所2"],
                    denwa        = dat["電話番号"],
                    fax          = dat["FAX番号"],
                }).ToList();

                //リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                //各セルの縦サイズ指定
                headersheet.RowHeight = 14;

                //ページ数計算
                double page        = 1.0 * maxRowCnt / 31;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    //小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                //ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSiireCheak in dtChkList.Rows)
                {
                    //1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        //タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "取 引 先 マ ス タ リ ス ト";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "H1").Merge();

                        //ヘッダー出力(表ヘッダー)
                        headersheet.Cell("A3").Value = "コード";
                        headersheet.Cell("B3").Value = "取引先";
                        headersheet.Cell("C3").Value = "カナ";
                        headersheet.Cell("D3").Value = "郵便番号";
                        headersheet.Cell("E3").Value = "住所1";
                        headersheet.Cell("F3").Value = "住所2";
                        headersheet.Cell("G3").Value = "電話番号";
                        headersheet.Cell("H3").Value = "FAX";

                        //ヘッダー列
                        headersheet.Range("A3", "H3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "H3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // セルの背景色
                        headersheet.Range("A3", "H3").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 列幅の指定
                        headersheet.Column(1).Width = 5;
                        headersheet.Column(2).Width = 26;
                        headersheet.Column(3).Width = 16;
                        headersheet.Column(4).Width = 8;
                        headersheet.Column(5).Width = 28;
                        headersheet.Column(6).Width = 28;
                        headersheet.Column(7).Width = 11;
                        headersheet.Column(8).Width = 11;

                        // 印刷体裁(A4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№107)");

                        //ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        string str = drSiireCheak[colCnt - 1].ToString();

                        //二桁の0パディングをさせる
                        currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("0000");

                        //左に寄せる
                        currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;

                        currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 8).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 34行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 34)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #19
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// DataTableをもとにxlsxファイルを作成し、PDFファイルを作成
        /// </summary>
        /// <param name="dtHachu">発注のデータテーブル</param>
        /// <returns>結合PDFファイル</returns>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtPrintData, List <string> lstlstTorihiki)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            //型番が被った場合の判定用
            string strKatabanSub = "";

            //空白行も含めた合計行数
            int intMaxRowCnt = 0;

            //空白行を追加した印刷データ
            DataTable dtPrintDataNew = new DataTable();

            dtPrintDataNew.Columns.Add("型番");
            dtPrintDataNew.Columns.Add("単価");
            dtPrintDataNew.Columns.Add("仕向先");
            dtPrintDataNew.Columns.Add("最終仕入日");

            //空白行付きの印刷データを作成
            for (int intCnt = 0; intCnt < dtPrintData.Rows.Count; intCnt++)
            {
                //一行目の場合
                if (intCnt == 0)
                {
                    dtPrintDataNew.Rows.Add(dtPrintData.Rows[intCnt]["型番"].ToString(),
                                            dtPrintData.Rows[intCnt]["単価"].ToString(),
                                            dtPrintData.Rows[intCnt]["仕向先"].ToString(),
                                            dtPrintData.Rows[intCnt]["最終仕入日"].ToString());

                    intMaxRowCnt++;
                }
                else
                {
                    //同じ型番の場合
                    if (dtPrintDataNew.Rows[intMaxRowCnt - 1]["型番"].ToString() == dtPrintData.Rows[intCnt]["型番"].ToString())
                    {
                        dtPrintDataNew.Rows.Add(dtPrintData.Rows[intCnt]["型番"].ToString(),
                                                dtPrintData.Rows[intCnt]["単価"].ToString(),
                                                dtPrintData.Rows[intCnt]["仕向先"].ToString(),
                                                dtPrintData.Rows[intCnt]["最終仕入日"].ToString());
                        intMaxRowCnt++;
                    }
                    else
                    {
                        dtPrintDataNew.Rows.Add("",
                                                "",
                                                "",
                                                "");

                        //空白分追加
                        intMaxRowCnt++;

                        dtPrintDataNew.Rows.Add(dtPrintData.Rows[intCnt]["型番"].ToString(),
                                                dtPrintData.Rows[intCnt]["単価"].ToString(),
                                                dtPrintData.Rows[intCnt]["仕向先"].ToString(),
                                                dtPrintData.Rows[intCnt]["最終仕入日"].ToString());
                        intMaxRowCnt++;
                    }

                    //最終行の場合
                    if (intCnt == dtPrintData.Rows.Count - 1)
                    {
                        dtPrintDataNew.Rows.Add("",
                                                "",
                                                "",
                                                "");

                        intMaxRowCnt++;
                    }
                }
            }

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS ゴシック";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート

                //Linqで必要なデータをselect
                //空白行付きのdatatableを使う
                var outDataAll = dtPrintDataNew.AsEnumerable()
                                 .Select(dat => new
                {
                    TokuSakiKataban       = dat["型番"],
                    TokuSakiTanka         = dat["単価"],
                    TokuSakiShimukesaki   = dat["仕向先"],
                    TokuSakiSaishuShirebi = dat["最終仕入日"]
                }).ToList();


                //リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                //ページ数計算
                double page        = 1.0 * maxRowCnt / 57;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    //小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                //ClosedXMLで1行ずつExcelに出力
                //foreach (DataRow drTokuteCheak in dtChkList.Rows)
                for (int i = 0; i < dtChkList.Rows.Count; i++)
                {
                    DataRow drTokuteCheak = dtChkList.Rows[i];

                    //1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        //タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "特 定 向 け 先 単 価 一 覧 表";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "D1").Merge();

                        //ヘッダー出力(表ヘッダー)
                        headersheet.Cell("A3").Value = "型  番";
                        headersheet.Cell("B3").Value = "単  価";
                        headersheet.Cell("C3").Value = "仕向先";
                        headersheet.Cell("D3").Value = "最終仕入日";

                        //ヘッダー列
                        headersheet.Range("A3", "D3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        headersheet.Range("A3", "D3").Style.Alignment.Vertical   = XLAlignmentVerticalValues.Center;

                        // 列幅の指定
                        headersheet.Column(1).Width = 44;
                        headersheet.Column(2).Width = 15;
                        headersheet.Column(3).Width = 34;
                        headersheet.Column(4).Width = 12;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "D3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // 印刷体裁(A4縦、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Default;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№116)");

                        //ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt; colCnt++)
                    {
                        //型番が空の場合
                        if (drTokuteCheak[0].ToString() == "")
                        {
                            // セルの周囲に罫線を引く
                            currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 1).Style
                            .Border.SetLeftBorder(XLBorderStyleValues.Thin);
                            currentsheet.Range(xlsRowCnt, 4, xlsRowCnt, 4).Style
                            .Border.SetRightBorder(XLBorderStyleValues.Thin);
                            currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 4).Style
                            .Border.SetBottomBorder(XLBorderStyleValues.Thin);
                        }
                        //型番がある場合
                        else
                        {
                            string str = drTokuteCheak[colCnt - 1].ToString();

                            //型番の場合
                            if (colCnt == 1)
                            {
                                //型番が同じでない場合
                                if (strKatabanSub != str)
                                {
                                    // セルの左に罫線を引く
                                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 1).Style
                                    .Border.SetLeftBorder(XLBorderStyleValues.Thin);

                                    //縦の上に寄せる
                                    currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;

                                    //左寄せ
                                    currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;

                                    currentsheet.Cell(xlsRowCnt, colCnt).Value = str;

                                    strKatabanSub = str;
                                }
                                //型番が同じ場合
                                else
                                {
                                    // セルの左に罫線を引く
                                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 1).Style
                                    .Border.SetLeftBorder(XLBorderStyleValues.Thin);
                                }
                            }
                            //単価の場合
                            else if (colCnt == 2)
                            {
                                //縦の上に寄せる
                                currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;

                                currentsheet.Cell(xlsRowCnt, colCnt).Value = str;

                                //カンマ処理
                                currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.Format  = "#,0.00";
                                currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                                // セルの周囲に罫線を引く
                                currentsheet.Range(xlsRowCnt, 2, xlsRowCnt, 2).Style
                                .Border.SetTopBorder(XLBorderStyleValues.Thin)
                                .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                                .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                                .Border.SetRightBorder(XLBorderStyleValues.Thin);
                            }
                            //仕向先の場合
                            else if (colCnt == 3)
                            {
                                //縦の上に寄せる
                                currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;

                                currentsheet.Cell(xlsRowCnt, colCnt).Value = str;

                                currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;

                                // セルの周囲に罫線を引く
                                currentsheet.Range(xlsRowCnt, 3, xlsRowCnt, 3).Style
                                .Border.SetTopBorder(XLBorderStyleValues.Thin)
                                .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                                .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                                .Border.SetRightBorder(XLBorderStyleValues.Thin);
                            }
                            //最終仕入日の場合
                            else if (colCnt == 4)
                            {
                                //縦の上に寄せる
                                currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;

                                currentsheet.Cell(xlsRowCnt, colCnt).Value = str;

                                currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                                // セルの周囲に罫線を引く
                                currentsheet.Range(xlsRowCnt, 4, xlsRowCnt, 4).Style
                                .Border.SetTopBorder(XLBorderStyleValues.Thin)
                                .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                                .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                                .Border.SetRightBorder(XLBorderStyleValues.Thin);
                            }
                        }
                    }

                    //行の高さ指定
                    currentsheet.Row(xlsRowCnt).Height = 12;

                    // 60行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 60)
                    {
                        pageCnt++;

                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    //最終データの場合
                    if (i == dtChkList.Rows.Count + 1)
                    {
                        // セルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 4, xlsRowCnt, 4).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtUriageCheckList">
        ///     売上チェックリストのデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtUriageCheckList, List <string> lstItem)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート


                //Linqで必要なデータをselect
                var outDataAll = dtUriageCheckList.AsEnumerable()
                                 .Select(dat => new
                {
                    groupCd              = dat["グループコード"],
                    groupName            = dat["グループ名"],
                    tantoCd              = dat["担当者コード"],
                    tantoName            = dat["担当者名"],
                    UriageCheckCode      = dat["得意先コード"],
                    UriageCheckName      = dat["得意先名"],
                    denpyoYMD            = dat["伝票年月日"],
                    denpyoNo             = dat["伝票番号"],
                    torihikiKbnName      = dat["取引区分名"],
                    sinamei              = dat["品名"],
                    suuryo               = dat["数量"],
                    tanka                = (decimal)dat["単価"],
                    uriageKingaku        = (decimal)dat["金額"],
                    bikou                = dat["備考"],
                    zeinukiGoukeiKingaku = (decimal)dat["税抜合計金額"],
                    shouhizei            = (decimal)dat["消費税"],
                    zeikomiGoukeiKingaku = (decimal)dat["税込合計金額"]
                }).ToList();

                // linqで総合計、総税込み、総税込み計を算出する。
                decimal[] decKingaku = new decimal[13];
                decKingaku[0] = outDataAll.Select(gokei => gokei.zeinukiGoukeiKingaku).Sum();
                decKingaku[1] = outDataAll.Select(gokei => gokei.shouhizei).Sum();
                decKingaku[2] = outDataAll.Select(gokei => gokei.zeikomiGoukeiKingaku).Sum();

                //グループ合計
                var groupGoukei = from tbl in dtUriageCheckList.AsEnumerable()
                                  group tbl by tbl.Field <string>("グループコード") into g
                                  select new
                {
                    section = g.Key,
                    count   = g.Count(),
                    zeinukiGoukeiKingaku = g.Sum(p => p.Field <decimal>("税抜合計金額")),
                    shouhizei            = g.Sum(p => p.Field <decimal>("消費税")),
                    zeikomiGoukeiKingaku = g.Sum(p => p.Field <decimal>("税込合計金額")),
                };

                // グループ計の税抜合計金額、消費税、税込み合計金額の算出
                decimal[,] decKingakuGroup = new decimal[groupGoukei.Count(), 3];
                for (int cnt = 0; cnt < groupGoukei.Count(); cnt++)
                {
                    decKingakuGroup[cnt, 0] = groupGoukei.ElementAt(cnt).zeinukiGoukeiKingaku;
                    decKingakuGroup[cnt, 1] = groupGoukei.ElementAt(cnt).shouhizei;
                    decKingakuGroup[cnt, 2] = groupGoukei.ElementAt(cnt).zeikomiGoukeiKingaku;
                }


                // 担当者計
                var tantouGoukei = from tbl in dtUriageCheckList.AsEnumerable()
                                   group tbl by tbl.Field <string>("担当者コード") into g
                                   select new
                {
                    section = g.Key,
                    count   = g.Count(),
                    zeinukiGoukeiKingaku = g.Sum(p => p.Field <decimal>("税抜合計金額")),
                    shouhizei            = g.Sum(p => p.Field <decimal>("消費税")),
                    zeikomiGoukeiKingaku = g.Sum(p => p.Field <decimal>("税込合計金額")),
                };

                // 担当者計の税抜合計金額、消費税、税込み合計金額の算出
                decimal[,] decKingakuTanto = new decimal[tantouGoukei.Count(), 3];
                for (int cnt = 0; cnt < tantouGoukei.Count(); cnt++)
                {
                    decKingakuTanto[cnt, 0] = tantouGoukei.ElementAt(cnt).zeinukiGoukeiKingaku;
                    decKingakuTanto[cnt, 1] = tantouGoukei.ElementAt(cnt).shouhizei;
                    decKingakuTanto[cnt, 2] = tantouGoukei.ElementAt(cnt).zeikomiGoukeiKingaku;
                }

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                maxRowCnt += groupGoukei.Count() * 2 + tantouGoukei.Count() * 2 + 1;
                double page        = 1.0 * maxRowCnt / 35;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    // 小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }


                int    tantouCnt    = 0;
                int    tantouRowCnt = 0;
                int    groupCnt     = 0;
                int    groupRowCnt  = 0;
                string strDenpyoNo  = "";

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drUriageCheckList in dtChkList.Rows)
                {
                    // 1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "売上チェックリスト";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "M1").Merge();

                        // 入力日、伝票年月日出力(A2のセル)
                        IXLCell unitCell = headersheet.Cell("A2");
                        unitCell.Value = "入力日:" +
                                         string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[0])) + " ~ " +
                                         string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[1])) + "  伝票年月日:" +
                                         string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[2])) + " ~ " +
                                         string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[3])) +
                                         " 得意先コード:" + lstItem[5] + " ~ " + lstItem[6];
                        unitCell.Style.Font.FontSize = 10;

                        // ヘッダー出力(3行目のセル)
                        headersheet.Cell("A3").Value = "コード";
                        headersheet.Cell("B3").Value = "得意先名";
                        headersheet.Cell("C3").Value = "年月日";
                        headersheet.Cell("D3").Value = "伝票番号";
                        headersheet.Cell("E3").Value = "取引区分";
                        headersheet.Cell("F3").Value = "品  名 ・ 型  番";
                        headersheet.Cell("G3").Value = "数量";
                        headersheet.Cell("H3").Value = "単価";
                        headersheet.Cell("I3").Value = "金額";
                        headersheet.Cell("J3").Value = "備  考";
                        headersheet.Cell("K3").Value = "伝票合計";
                        headersheet.Cell("L3").Value = "消費税";
                        headersheet.Cell("M3").Value = "税込み計";

                        // ヘッダー列
                        headersheet.Range("A3", "M3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "M3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // セルの背景色
                        headersheet.Range("A3", "M3").Style.Fill.BackgroundColor = XLColor.LightGray;

                        // 列幅の指定
                        headersheet.Column(1).Width  = 5;
                        headersheet.Column(2).Width  = 18;
                        headersheet.Column(3).Width  = 9;
                        headersheet.Column(4).Width  = 8;
                        headersheet.Column(5).Width  = 7;
                        headersheet.Column(6).Width  = 30;
                        headersheet.Column(7).Width  = 6;
                        headersheet.Column(8).Width  = 12;
                        headersheet.Column(9).Width  = 12;
                        headersheet.Column(10).Width = 24;
                        headersheet.Column(11).Width = 10;
                        headersheet.Column(12).Width = 8;
                        headersheet.Column(13).Width = 12;

                        // フォントサイズ変更
                        headersheet.Range("B4:B38").Style.Font.FontSize = 6;
                        headersheet.Range("F4:F38").Style.Font.FontSize = 6;
                        headersheet.Range("J4:J38").Style.Font.FontSize = 6;

                        // 印刷体裁(B4横、印刷範囲)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.B4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;

                        // ヘッダー部の指定(番号)
                        headersheet.PageSetup.Header.Left.AddText("(№15)");

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // グループ名出力
                    if (groupRowCnt == 0)
                    {
                        currentsheet.Cell(xlsRowCnt, 1).Value = drUriageCheckList[1];
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Merge();

                        // 1行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        xlsRowCnt++;
                    }

                    // 35行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 39)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 4;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    // 担当者名出力
                    if (tantouRowCnt == 0)
                    {
                        currentsheet.Cell(xlsRowCnt, 1).Value = drUriageCheckList[3];
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Merge();

                        // 1行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        xlsRowCnt++;
                    }

                    // 35行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 39)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 4;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 8; colCnt <= maxColCnt - 3; colCnt++)
                    {
                        string str = drUriageCheckList[colCnt - 1].ToString();

                        // 金額セルの処理
                        if (colCnt == 11 || colCnt == 13)
                        {
                            // 3桁毎に","を挿入する
                            str = string.Format("{0:#,0}", decimal.Parse(str));
                            currentsheet.Cell(xlsRowCnt, colCnt - 4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 単価セルの処理
                        if (colCnt == 12)
                        {
                            // 3桁毎に","を挿入する、小数点第2位まで
                            currentsheet.Cell(xlsRowCnt, colCnt - 4).Style.NumberFormat.SetFormat("#,##0.00");
                            currentsheet.Cell(xlsRowCnt, colCnt - 4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        // 備考の場合
                        if (colCnt == 14)
                        {
                            currentsheet.Cell(xlsRowCnt, 10).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                        }

                        // 伝票番号の場合
                        if (colCnt == 8)
                        {
                            // 最初の行の場合 or 前行の伝票番号が現在の伝票番号と同じでない場合
                            if (!drUriageCheckList[7].ToString().Equals(strDenpyoNo))
                            {
                                // 得意先コード、得意先名、年月日、伝票番号、取引区分名
                                for (int cnt = 0; cnt < 5; cnt++)
                                {
                                    currentsheet.Cell(xlsRowCnt, cnt + 1).Value = drUriageCheckList[cnt + 4].ToString();
                                }

                                // 税抜合計金額、消費税、税込合計金額
                                for (int cnt = 0; cnt < 3; cnt++)
                                {
                                    // 3桁毎に","を挿入する
                                    IXLCell kingakuCell = currentsheet.Cell(xlsRowCnt, colCnt + cnt + 3);
                                    kingakuCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                                    kingakuCell.Value = string.Format("{0:#,0}", decimal.Parse(drUriageCheckList[colCnt + cnt + 6].ToString()));
                                }

                                strDenpyoNo = drUriageCheckList[7].ToString();
                            }
                        }
                        // 取引区分名の場合、伝票番号の処理で行っているため何もしない
                        else if (colCnt == 9)
                        {
                        }
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt - 4).Value = str;
                        }
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 35行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 38)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    // 担当者計を出力
                    tantouRowCnt++;
                    if (tantouGoukei.ElementAt(tantouCnt).count == tantouRowCnt)
                    {
                        xlsRowCnt++;
                        string strTanto = "                                        " +
                                          "◆ 担当者計 ◆" + string.Format("{0,14:#,0}", decKingakuTanto[tantouCnt, 0]) +
                                          "        ◆消費税◆" + string.Format("{0,12:#,0}", decKingakuTanto[tantouCnt, 1]) +
                                          "        ◆税込み計◆" + string.Format("{0,14:#,0}", decKingakuTanto[tantouCnt, 2]);

                        // セル結合
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Merge();
                        currentsheet.Cell(xlsRowCnt, 1).Value = strTanto;

                        // 1行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        tantouCnt++;
                        tantouRowCnt = 0;
                    }

                    // 35行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 38)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    // グループ計を出力
                    groupRowCnt++;
                    if (groupGoukei.ElementAt(groupCnt).count == groupRowCnt)
                    {
                        xlsRowCnt++;
                        string strGroup = "                                        " +
                                          "◆グループ計◆" + string.Format("{0,14:#,0}", decKingakuGroup[groupCnt, 0]) +
                                          "        ◆消費税◆" + string.Format("{0,12:#,0}", decKingakuGroup[groupCnt, 1]) +
                                          "        ◆税込み計◆" + string.Format("{0,14:#,0}", decKingakuGroup[groupCnt, 2]);

                        // セル結合
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Merge();
                        currentsheet.Cell(xlsRowCnt, 1).Value = strGroup;

                        // 1行分のセルの周囲に罫線を引く
                        currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        groupCnt++;
                        groupRowCnt = 0;
                    }

                    // 35行毎(ヘッダーを除いた行数)にシート作成
                    if (xlsRowCnt == 38)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // 最終行を出力した後、合計行を出力
                if (dtChkList.Rows.Count > 0)
                {
                    string strKingaku = "                                        " +
                                        "◆  総合計  ◆" + string.Format("{0,14:#,0}", decKingaku[0]) +
                                        "        ◆消費税◆" + string.Format("{0,12:#,0}", decKingaku[1]) +
                                        "        ◆税込み計◆" + string.Format("{0,14:#,0}", decKingaku[2]);

                    // セル結合
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Merge();
                    currentsheet.Cell(xlsRowCnt, 1).Value = strKingaku;

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);
                }

                // ヘッダーシート削除
                headersheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 1));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
예제 #21
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSeikyuMeisai">
        ///     請求明細書のデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSetCd_B_Input, bool blNaga4)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strFilePath = "";
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");

            int intPaperSizeIndex = 0;

            if (blNaga4 == true)
            {
                strFilePath = "./Template/M0620_HushoAtenaInsatsu_Naga4.xlsx";
            }
            else
            {
                strFilePath = "./Template/M0620_HushoAtenaInsatsu_Naga3.xlsx";
            }

            try
            {
                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled);

                IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート
                IXLWorksheet currentsheet   = null;                  // 処理中シート

                int pageCnt = 0;                                     // ページ(シート枚数)カウント

                // テンプレートシートからコピー
                templatesheet1.CopyTo("Page" + pageCnt.ToString());
                currentsheet = workbook.Worksheet(workbook.Worksheets.Count);

                if (blNaga4 == true)
                {
                    currentsheet.Cell("D2").Value = dtSetCd_B_Input.Rows[0]["郵便番号"];    // 郵便番号
                    currentsheet.Cell("L4").Value = dtSetCd_B_Input.Rows[0]["住所1"];     // 住所1
                    currentsheet.Cell("L6").Value = dtSetCd_B_Input.Rows[0]["住所2"];     // 住所2
                    currentsheet.Cell("R7").Value = dtSetCd_B_Input.Rows[0]["名称"];      // 名称
                }
                else
                {
                    currentsheet.Cell("F2").Value = dtSetCd_B_Input.Rows[0]["郵便番号"];    // 郵便番号
                    currentsheet.Cell("H4").Value = dtSetCd_B_Input.Rows[0]["住所1"];     // 住所1
                    currentsheet.Cell("H5").Value = dtSetCd_B_Input.Rows[0]["住所2"];     // 住所2
                    currentsheet.Cell("I8").Value = dtSetCd_B_Input.Rows[0]["名称"];      // 名称
                }


                // テンプレートシート削除
                templatesheet1.Delete();

                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";

                //横にする
                workbook.PageOptions.PageOrientation = XLPageOrientation.Landscape;

                // workbookを保存
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                if (blNaga4 == true)
                {
                    intPaperSizeIndex = 4;
                }
                else
                {
                    intPaperSizeIndex = 3;
                }

                CreatePdf pdf = new CreatePdf();

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, intPaperSizeIndex));
                //return pdf.createPdf(strOutXlsFile, strDateTime);
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }