/// ----------------------------------------------------------------------------- /// <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); } } }
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); } } }
/// ----------------------------------------------------------------------------- /// <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); } } }
// 印刷用ファイル作成 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); } } }
/// ----------------------------------------------------------------------------- /// <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); } } }
/// ----------------------------------------------------------------------------- /// <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); } } }
/// ----------------------------------------------------------------------------- /// <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); } } }
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); } } }
/// ----------------------------------------------------------------------------- /// <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(); } }
/// ----------------------------------------------------------------------------- /// <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); } } }
/// ----------------------------------------------------------------------------- /// <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="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); } } }
/// ----------------------------------------------------------------------------- /// <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); } } }
/// ----------------------------------------------------------------------------- /// <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); } } }
/// ----------------------------------------------------------------------------- /// <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); } } }