/// ----------------------------------------------------------------------------- /// <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); } } }
/// ----------------------------------------------------------------------------- /// <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); } } }
/// ----------------------------------------------------------------------------- /// <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); //} } }