Esempio n. 1
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);
                }
            }
        }
Esempio n. 2
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);
                }
            }
        }
Esempio n. 3
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);
                //}
            }
        }