///<summary> /// F10:Excel出力 ///</summary> private void excelShireMotocyoKakunin() { //SQL実行時に取り出したデータを入れる用 DataTable dtPrintData = new DataTable(); //印刷対象の選択用 string strInsatsuSelect = ""; //営業所の選択用 string strEigyosho = ""; //年月日の日付フォーマット後を入れる用 string strYMDformat = ""; //得意先コードの検索開始項目のチェック if (labelSet_SiiresakiStart.codeTxt.blIsEmpty() == false || StringUtl.blIsEmpty(labelSet_SiiresakiStart.ValueLabelText) == false || labelSet_SiiresakiStart.chkTxtTorihikisaki() == true) { labelSet_SiiresakiStart.Focus(); return; } //得意先コードの終了開始項目のチェック if (labelSet_SiiresakiEnd.codeTxt.blIsEmpty() == false || StringUtl.blIsEmpty(labelSet_SiiresakiEnd.ValueLabelText) == false || labelSet_SiiresakiEnd.chkTxtTorihikisaki() == true) { //例外発生メッセージ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, "仕入先コードを範囲で指定してください。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); labelSet_SiiresakiEnd.Focus(); return; } //空文字判定(検索開始年月) if (txtYmStart.blIsEmpty() == false) { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。\r\n条件を指定してください。 ", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtYmStart.Focus(); return; } //空文字判定(検索終了年月) if (txtYmEnd.blIsEmpty() == false) { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。\r\n条件を指定してください。 ", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtYmEnd.Focus(); return; } //得意先開始チェック if (labelSet_SiiresakiStart.chkTxtTorihikisaki()) { labelSet_SiiresakiStart.Focus(); return; } //得意先終了チェック if (labelSet_SiiresakiEnd.chkTxtTorihikisaki()) { labelSet_SiiresakiEnd.Focus(); return; } //日付フォーマット生成、およびチェック strYMDformat = txtYmStart.chkDateYMDataFormat(txtYmStart.Text); //開始年月日の日付チェック if (strYMDformat == "") { // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtYmStart.Focus(); return; } else { txtYmStart.Text = strYMDformat; } //初期化 strYMDformat = ""; //日付フォーマット生成、およびチェック strYMDformat = txtYmEnd.chkDateYMDataFormat(txtYmEnd.Text); //終了年月日の日付チェック if (strYMDformat == "") { // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtYmEnd.Focus(); return; } else { txtYmEnd.Text = strYMDformat; } //印刷対象の範囲指定をする場合 if (radSet_Insatsu.radbtn1.Checked == true) { strInsatsuSelect = "0"; } else { strInsatsuSelect = "1"; } //営業所の指定をする場合 if (radSet_Eigyo.radbtn0.Checked == true) { strEigyosho = "0"; } else if (radSet_Eigyo.radbtn1.Checked == true) { strEigyosho = "1"; } else if (radSet_Eigyo.radbtn2.Checked == true) { strEigyosho = "2"; } //その月の最終日を求める(年月日検索終了項目用) int intDay = DateTime.DaysInMonth(DateTime.Parse(txtYmEnd.Text).Year, DateTime.Parse(txtYmEnd.Text).Month); //印刷用データを入れる用 List <string> lstPrintData = new List <string>(); //印刷用データを入れる lstPrintData.Add(labelSet_SiiresakiStart.CodeTxtText); lstPrintData.Add(labelSet_SiiresakiEnd.CodeTxtText); lstPrintData.Add(DateTime.Parse(txtYmStart.Text).ToString("yyyy/MM/dd")); lstPrintData.Add(DateTime.Parse(txtYmEnd.Text).ToString("yyyy/MM/") + intDay.ToString()); lstPrintData.Add(strInsatsuSelect); lstPrintData.Add(strEigyosho); //仕入先コード範囲内の取引先を取得 E0340_SiiresakiMotochouKakunin_B siireB = new E0340_SiiresakiMotochouKakunin_B(); try { //待機状態 Cursor.Current = Cursors.WaitCursor; dtPrintData = siireB.getPrintData(lstPrintData); //元に戻す Cursor.Current = Cursors.Default; BaseMessageBox basemessagebox; //取得したデータがない場合 if (dtPrintData == null || dtPrintData.Rows.Count == 0) { //例外発生メッセージ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "仕入先元帳_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; //ダイアログを表示する if (sfd.ShowDialog() == DialogResult.OK) { CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 // Linqで必要なデータをselect var outDataAll = dtPrintData.AsEnumerable() .Select(dat => new { TokuiCd = dat["仕入先コード"], //[0]ヘッダー表示のみ使用 TokuiName = dat["仕入先名"], //[1]ヘッダー表示のみ使用 TokuiYMD = dat["年月日"], //[2] Tokuikbn = dat["取引区分名"], //[3] TokuiShohinName = dat["商品名"], //[4] TokuiSu = dat["数量"], //[5] TokuiTan = dat["仕入単価"], //[6] TokuiUrikingaku = (decimal)dat["仕入金額"], //[7] TokuiNyukingaku = (decimal)dat["支払金額"], //[8] TokuiSashiZankingaku = (decimal)dat["差引残高"], //[9] TokuiBiko = dat["備考"] //[10] }).ToList(); // リストをデータテーブルに変換 DataTable dtChkList = cpdf.ConvertToDataTable(outDataAll); string[] header = { "コード", "仕入先名", "年月日", "取引区分名", "商品名", "数量", "仕入単価", "仕入金額", "支払金額", "差引残高", "備考", }; string outFile = sfd.FileName; // Excel作成処理 cpdf.DtToXls(dtChkList, "仕 入 先 元 帳", outFile, 3, 1, header); // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } catch (Exception ex) { //データロギング new CommonException(ex); //例外発生メッセージ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, CommonTeisu.LABEL_ERROR_MESSAGE, CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
///<summary> /// F10:Excel出力 ///</summary> private void excelTanaorosiKinyuuhyo() { // データ検索用 List <string> lstSearchItem = new List <string>(); // データ検索用(プロシージャ用) List <string> lstSearchItemProc = new List <string>(); // データチェック if (!blnDataCheack()) { return; } // 検索するデータをリストに格納 lstSearchItem.Add(txtYmd.Text); lstSearchItem.Add(labelSet_Eigyosho.CodeTxtText); lstSearchItem.Add(labelSet_Daibunrui.CodeTxtText); lstSearchItem.Add(labelSet_Chubunrui.CodeTxtText); lstSearchItem.Add(labelSet_Maker.CodeTxtText); lstSearchItem.Add(txtTanabanFrom.Text); lstSearchItem.Add(txtTanabanTo.Text); // 検索するデータをリストに格納(プロシージャ用) lstSearchItemProc.Add(txtYmd.Text); lstSearchItemProc.Add(labelSet_Eigyosho.CodeTxtText); lstSearchItemProc.Add(labelSet_Daibunrui.CodeTxtText); lstSearchItemProc.Add((radSort.judCheckBtn() + 1).ToString()); // ビジネス層のインスタンス生成 F0570_TanaorosiKinyuhyoPrint_B tanaorosiPrint_B = new F0570_TanaorosiKinyuhyoPrint_B(); try { BaseMessageBox basemessagebox; // 印刷するにチェックが入っていない場合 if (chkPrintOnly.Checked == false) { //待機状態 Cursor.Current = Cursors.WaitCursor; // 棚卸記入表の件数を取得 DataTable dtTanaorosiCount = tanaorosiPrint_B.getTanaorosiCount(lstSearchItem); //元に戻す Cursor.Current = Cursors.Default; // 対象データがある場合 if (dtTanaorosiCount != null && dtTanaorosiCount.Rows.Count > 0) { // 件数が1件以上の場合 if (int.Parse(dtTanaorosiCount.Rows[0][0].ToString()) > 0) { // メッセージボックスの処理(YES,NO) basemessagebox = new BaseMessageBox(this, "棚卸記入表", "既にデータが作成されています。書き換えますか?", CommonTeisu.BTN_YESNO, CommonTeisu.DIAG_QUESTION); // Noが押された場合 if (basemessagebox.ShowDialog() == DialogResult.No) { return; } } } try { //待機状態 Cursor.Current = Cursors.WaitCursor; // 棚卸記入表テーブルに追加 tanaorosiPrint_B.addTanaorosi(lstSearchItem); //元に戻す Cursor.Current = Cursors.Default; } catch (Exception ex) { //元に戻す Cursor.Current = Cursors.Default; // エラーロギング new CommonException(ex); // メッセージボックスの処理、追加失敗の場合のウィンドウ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_TOUROKU, CommonTeisu.LABEL_TOUROKU_MISS, CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } } //待機状態 Cursor.Current = Cursors.WaitCursor; // 検索実行 DataTable dtTanaorosi = tanaorosiPrint_B.getTanaorosi(lstSearchItemProc); //元に戻す Cursor.Current = Cursors.Default; // 対象データがある場合 if (dtTanaorosi != null && dtTanaorosi.Rows.Count > 0) { string strFilter = ""; // 中分類コードがある場合 if (!lstSearchItem[3].Equals("")) { strFilter += "中分類コード = '" + lstSearchItem[3] + "'"; } // メーカーコードがある場合 if (!lstSearchItem[4].Equals("")) { if (!strFilter.Equals("")) { strFilter += " AND "; } strFilter += "メーカーコード = '" + lstSearchItem[4] + "'"; } // 棚番がある場合 if (!lstSearchItem[5].Equals("") && !lstSearchItem[6].Equals("")) { if (!strFilter.Equals("")) { strFilter += " AND "; } strFilter += "棚番 >= '" + lstSearchItem[5] + "' AND 棚番 <= '" + lstSearchItem[6] + "'"; } // 対象データから更に絞り込み(中分類コード、メーカーコード、棚番) if (!strFilter.Equals("")) { DataView dvTanaorosi = new DataView(dtTanaorosi); dvTanaorosi.RowFilter = strFilter; dtTanaorosi = dvTanaorosi.ToTable(); // 対象データがない場合 if (dtTanaorosi == null || dtTanaorosi.Rows.Count == 0) { // メッセージボックスの処理、対象データがない場合のウィンドウ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "対象のデータはありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); return; } } // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "棚卸プレシート_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; //ダイアログを表示する if (sfd.ShowDialog() == DialogResult.OK) { //待機状態 Cursor.Current = Cursors.WaitCursor; CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 //Linqで必要なデータをselect var outDataAll = dtTanaorosi.AsEnumerable() .Select(dat => new { eigyo = dat["営業所名"], daibunruiName = dat["大分類名"], chubunruiName = dat["中分類名"], tanaban = dat["棚番"], maker = dat["メーカー名"], kataban = dat["品名型番"], zsuryo = (decimal)dat["指定日在庫"], suryo = (decimal)dat["棚卸数量"] }).ToList(); //リストをデータテーブルに変換 DataTable dtChkList = cpdf.ConvertToDataTable(outDataAll); string[] header = { "営業所名", "大分類名", "中分類名", "棚番", "メーカー名", "品名型番", "指定日在庫", "棚卸数量", }; string outFile = sfd.FileName; // Excel作成処理 cpdf.DtToXls(dtChkList, "業種マスタリスト", outFile, 3, 1, header); //元に戻す Cursor.Current = Cursors.Default; // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } } catch (Exception ex) { //データロギング new CommonException(ex); //例外発生メッセージ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, CommonTeisu.LABEL_ERROR_MESSAGE, CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
// 印刷用ファイル作成 public void dbToXls(DataTable dtShiharaiCheakList, List <string> lstItem, string fn) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string std = DateTime.Now.ToString("_yyyy_MM_dd_HH_mm"); 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 = 38; //headersheet.Column(3).Width = 11; //headersheet.Column(4).Width = 8; //headersheet.Column(5).Width = 10; //headersheet.Column(6).Width = 5; //headersheet.Column(7).Width = 38; //headersheet.Column(8).Width = 12; //headersheet.Column(9).Width = 11; //headersheet.Column(10).Width = 38; 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 + "支払チェックリスト" + std + ".xlsx"; string strOutXlsFile = fn; 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 { 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="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="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); } } }
///<summary> /// F10:Excel出力 ///</summary> private void exportXls() { // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "得意先売上検収入力_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; //年月日の日付フォーマット後を入れる用 string strYMDformat = ""; //待機状態 Cursor.Current = Cursors.WaitCursor; //得意先が空の場合 if (labelSet_Tokuisaki.codeTxt.blIsEmpty() == false) { BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "得意先を指定してください ", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); labelSet_Tokuisaki.Focus(); return; } //検索開始年月日に記入がある場合 if (txtDenpyoYMDStart.blIsEmpty()) { //日付フォーマット生成、およびチェック strYMDformat = txtDenpyoYMDStart.chkDateDataFormat(txtDenpyoYMDStart.Text); //検索開始年月日の日付チェック if (strYMDformat == "") { // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtDenpyoYMDStart.Focus(); return; } else { txtDenpyoYMDStart.Text = strYMDformat; } } //検索終了年月日に記入がある場合 if (txtDenpyoYMDEnd.blIsEmpty()) { //初期化 strYMDformat = ""; //日付フォーマット生成、およびチェック strYMDformat = txtDenpyoYMDEnd.chkDateDataFormat(txtDenpyoYMDEnd.Text); //検索終了年月日の日付チェック if (strYMDformat == "") { // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtDenpyoYMDEnd.Focus(); return; } else { txtDenpyoYMDEnd.Text = strYMDformat; } } //大分類チェック if (labelSet_Daibunrui.chkTxtDaibunrui()) { labelSet_Daibunrui.Focus(); return; } //中分類チェック if (labelSet_Chubunrui.chkTxtChubunrui(labelSet_Daibunrui.CodeTxtText)) { labelSet_Chubunrui.Focus(); return; } try { A0660_TokuisakiUriageKakunin_B siirekakuninB = new A0660_TokuisakiUriageKakunin_B(); // 検索文字列格納用 string[] arrSerach = new string[7]; // 出力順条件取得用 string[] arrOrder = new string[2]; // 表示条件取得用 string[] arrDisplay = new string[3]; arrSerach[0] = labelSet_Tokuisaki.CodeTxtText; // 得意先コード arrSerach[1] = txtDenpyoYMDStart.Text; // 伝票年月日start arrSerach[2] = txtDenpyoYMDEnd.Text; // 伝票年月日end arrSerach[3] = labelSet_Daibunrui.CodeTxtText; // 大分類コード arrSerach[4] = labelSet_Chubunrui.CodeTxtText; // 中分類コード arrSerach[5] = txtKataban.Text; // 品名・型番 arrSerach[6] = txtBiko.Text; // 備考 arrOrder[0] = radOutOrder.radbtn0.Checked.ToString().ToUpper(); // 出力順 日付・伝票番号順 arrOrder[1] = radOutOrder.radbtn1.Checked.ToString().ToUpper(); // 出力順 型番・日付順 arrDisplay[0] = radDisplay.radbtn0.Checked.ToString().ToUpper(); // 表示 すべて arrDisplay[1] = radDisplay.radbtn1.Checked.ToString().ToUpper(); // 表示 未検収 arrDisplay[2] = radDisplay.radbtn2.Checked.ToString().ToUpper(); // 表示 検収済 // 検索実行 DataTable dtUriagekensyu = siirekakuninB.getSiireData(arrSerach, arrOrder, arrDisplay); // カーソルをデフォルトに戻す this.Cursor = Cursors.Default; if (dtUriagekensyu.Rows.Count > 0) { //ダイアログを表示する if (sfd.ShowDialog() == DialogResult.OK) { //待機状態 Cursor.Current = Cursors.WaitCursor; CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 string[] header = { "日付", "伝No.", "メーカー", "品名・型式", "数量", "売上単価", "売上金額", "備考", "検収", }; // Linqで出力対象の項目をSelect // カラム名は以下のようにつける(カラム名でフォーマットを判断するため) // 金額関係:***kingaku // 単価関係:***tanka // 原価:***genka // 数量:***suryo var outDat = dtUriagekensyu.AsEnumerable() .Select(dat => new { denYmd = dat["伝票年月日"], denNo = dat["伝票番号"], maker = dat["メーカー"], hinmei = dat["品名型式"], suryo = dat["数量"], uriagetanka = dat["売上単価"], uriagekingaku = dat["売上金額"], biko = dat["備考"], kensyu = dat["検収状態"] }).ToList(); // listをDataTableに変換 DataTable dtUriKensyuList = cpdf.ConvertToDataTable(outDat); string outFile = sfd.FileName; cpdf.DtToXls(dtUriKensyuList, "得意先売上検収入力", outFile, 3, 1, header); this.Cursor = Cursors.Default; // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } else { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } } catch (Exception ex) { this.Cursor = Cursors.Default; // エラーロギング new CommonException(ex); // Excel出力失敗メッセージ BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excel出力に失敗しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
/// ----------------------------------------------------------------------------- /// <summary> /// DataTableをもとにxlsxファイルを作成しPDF化</summary> /// <param name="dtSiireCheakList"> /// 仕入推移表のデータテーブル</param> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtZaikoIchiran, List <string> lstItem, string p) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string strNow = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); Microsoft.Office.Interop.Excel.Application objExcel = null; Microsoft.Office.Interop.Excel.Workbooks objWorkBooks = null; Microsoft.Office.Interop.Excel.Workbook objWorkBook = null; Microsoft.Office.Interop.Excel.Worksheet objWorkSheet = null; Microsoft.Office.Interop.Excel.Range objRange = null; 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 = dtZaikoIchiran.AsEnumerable() .Select(dat => new { tanaban = dat["棚番"], maker = dat["メーカー名"], hinmei = dat["品名"], siireTanka = (decimal)dat["仕入単価"], hyokaTanka = (decimal)dat["評価単価"], tateneTanka = (decimal)dat["建値仕入単価"], zengetsu = (decimal)dat["前月在庫"], nyuko = (decimal)dat["入庫数"], syuko = (decimal)dat["出庫数"], zaiko = (decimal)dat["現在庫数"], siireKingaku = (decimal)dat["在庫仕入金額"], hyokaKingaku = (decimal)dat["在庫評価金額"], tateneKingaku = (decimal)dat["在庫建値金額"], daibunrui = dat["大分類名"], eigyoshoName = dat["営業所名"] }).ToList(); // linqで在庫仕入金額、在庫評価金額、在庫建値金額の合計算出 decimal[] decKingaku = new decimal[3]; decKingaku[0] = outDataAll.Select(gokei => gokei.siireKingaku).Sum(); decKingaku[1] = outDataAll.Select(gokei => gokei.hyokaKingaku).Sum(); decKingaku[2] = outDataAll.Select(gokei => gokei.tateneKingaku).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 / 29; double page = 1.0 * maxRowCnt / 68; double decimalpart = page % 1; if (decimalpart != 0) { // 小数点以下が0でない場合、+1 maxPage = (int)Math.Floor(page) + 1; } else { maxPage = (int)page; } // ClosedXMLで1行ずつExcelに出力 foreach (DataRow drZaiko 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のセル) // 営業所コードが空でない場合 if (lstItem[10].Equals("1")) { headersheet.Cell("A2").Value = " " + drZaiko[14].ToString(); } else { headersheet.Cell("A2").Value = " 本社、岐阜"; } // 大分類名出力(C2のセル) headersheet.Cell("C2").Value = " " + drZaiko[13].ToString(); // 在庫期間出力(M2のセル) //IXLCell kikanCell = headersheet.Cell("M2"); IXLCell kikanCell = headersheet.Cell("L2"); //kikanCell.Value = "在庫期間::" + // string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[0])) + "~" + // string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[1])); kikanCell.Value = "在庫年月日:" + string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[1])); kikanCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; // ヘッダー出力(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.Column(1).Width = 9; headersheet.Column(2).Width = 22; headersheet.Column(3).Width = 44; headersheet.Column(4).Width = 0; // 13 headersheet.Column(5).Width = 16; headersheet.Column(6).Width = 0; // 13 headersheet.Column(7).Width = 0; // 9 headersheet.Column(8).Width = 0; // 7 headersheet.Column(9).Width = 0; // 7 headersheet.Column(10).Width = 11; headersheet.Column(11).Width = 0; // 13 headersheet.Column(12).Width = 17; headersheet.Column(13).Width = 0; // 13 headersheet.Column(4).Hide(); headersheet.Column(6).Hide(); headersheet.Column(7).Hide(); headersheet.Column(8).Hide(); headersheet.Column(9).Hide(); headersheet.Column(11).Hide(); headersheet.Column(13).Hide(); // フォントサイズ変更 headersheet.Range("B4:C71").Style.Font.FontSize = 6; // 印刷体裁(A4横、印刷範囲、余白) headersheet.PageSetup.PaperSize = XLPaperSize.A4Paper; headersheet.PageSetup.PageOrientation = XLPageOrientation.Portrait; headersheet.PageSetup.Margins.Left = 0.2; headersheet.PageSetup.Margins.Right = 0.2; // ヘッダー部の指定(番号) //headersheet.PageSetup.Header.Left.AddText("(№30)"); // ヘッダーシートのコピー、ヘッダー部の指定 pdf.sheetCopy2(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow); } // 1セルずつデータ出力 for (int colCnt = 1; colCnt <= maxColCnt - 2; colCnt++) { string str = drZaiko[colCnt - 1].ToString(); //// 数値、金額セルの処理 //if (colCnt >= 7 && colCnt <= 13) //{ // // 3桁毎に","を挿入する // //str = string.Format("{0:#,0}", decimal.Parse(str)); // currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0"); // currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; //} //// 単価セルの処理 //if (colCnt >= 4 && colCnt <= 6) //{ // // 3桁毎に","を挿入する、小数点第2位まで // currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0.00"); // currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; //} if (colCnt == 5) { currentsheet.Cell(xlsRowCnt, 10).Style.NumberFormat.SetFormat("#,##0.00"); currentsheet.Cell(xlsRowCnt, 10).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } else if (colCnt == 10) { currentsheet.Cell(xlsRowCnt, 5).Style.NumberFormat.SetFormat("#,##0"); currentsheet.Cell(xlsRowCnt, 5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } else if (colCnt == 12) { currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0"); currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } if (colCnt == 5) { currentsheet.Cell(xlsRowCnt, 10).Value = str; } else if (colCnt == 10) { currentsheet.Cell(xlsRowCnt, 5).Value = str; } else { currentsheet.Cell(xlsRowCnt, colCnt).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); // 29行毎(ヘッダーを除いた行数)にシート作成 //if (xlsRowCnt == 32) if (xlsRowCnt == 71) { pageCnt++; if (pageCnt <= maxPage) { xlsRowCnt = 3; // ヘッダーシートのコピー、ヘッダー部の指定 pdf.sheetCopy2(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow); } } rowCnt++; xlsRowCnt++; } // 最終行を出力した後、合計行を出力 if (dtChkList.Rows.Count > 0) { for (int cnt = 0; cnt < 3; cnt++) { // 3桁毎に","を挿入する currentsheet.Cell(xlsRowCnt, 11 + cnt).Value = string.Format("{0:#,0}", decKingaku[cnt]); currentsheet.Cell(xlsRowCnt, 11 + cnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } // セル結合 currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 10).Merge(); currentsheet.Cell(xlsRowCnt, 1).Value = "合計金額:"; currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; // 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(); objExcel = new Microsoft.Office.Interop.Excel.Application(); objExcel.Visible = false; if (p != null) { objExcel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMinimized; } else { objExcel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMaximized; } objExcel.DisplayAlerts = false; objWorkBooks = objExcel.Workbooks; String strP = System.IO.Path.GetFullPath(strOutXlsFile); objWorkBook = objWorkBooks.Open(strP, //_xslFile, // FileName:ファイル名 Type.Missing, // UpdateLinks:ファイル内の外部参照の更新方法 Type.Missing, // ReadOnly:ReadOnlyにするかどうか Type.Missing, // Format: テキストファイルを開く場合に区切り文字を指定する Type.Missing, // Password:開く際にパスワードがある場合にパスワードを入力 Type.Missing, // WriteResPassword:書き込む際にパスワードがある場合にパスワードを入力 Type.Missing, // IgnoreReadOnlyRecommended:[読み取り専用を推奨する]チェックがオンの場合でも[読み取り専用を推奨する]メッセージを非表示 Type.Missing, // Origin:テキストファイルの場合、プラットフォームを指定 Type.Missing, // Delimiter:テキストファイルで且つ引数Formatが6の場合に区切り文字を指定 Type.Missing, // Editable:Excel4.0アドインの場合、アドインウィンドウを出すか指定 Type.Missing, // Notify:ファイルが読み取りor書き込みモードで開けない場合に通知リストに追加するか指定 Type.Missing, // Converter:ファイルを開くときに最初に使用するファイルコンバーターのインデックス番号を指定 Type.Missing, // AddToMru:最近使用したファイルの一覧にブックを追加するか指定 Type.Missing, // Local:Excel言語設定に合わせてファイルを保存するか指定 Type.Missing // CorruptLoad:使用できる定数は[xlNormalLoad][xlRepairFile][xlExtractData]。指定がない場合のは[xlNormalLoad]になりOMを通じて開始するときに回復は行われません。 ); if (p != null) { objWorkBook.PrintOut(Type.Missing, // From:印刷開始のページ番号 Type.Missing, // To:印刷終了のページ番号 1, // Copies:印刷部数 Type.Missing, // Preview:印刷プレビューをするか指定 p, // ActivePrinter:プリンターの名称 Type.Missing, // PrintToFile:ファイル出力をするか指定 true, // Collate:部単位で印刷するか指定 Type.Missing // PrToFileName :出力先ファイルの名前を指定するかどうか ); } else { objWorkBook.PrintOut(Type.Missing, // From:印刷開始のページ番号 Type.Missing, // To:印刷終了のページ番号 1, // Copies:印刷部数 true, // Preview:印刷プレビューをするか指定 p, // ActivePrinter:プリンターの名称 Type.Missing, // PrintToFile:ファイル出力をするか指定 true, // Collate:部単位で印刷するか指定 Type.Missing // PrToFileName :出力先ファイルの名前を指定するかどうか ); objExcel.Visible = true; objWorkBook.Activate(); } // PDF化の処理 //return pdf.createPdf(strOutXlsFile, strDateTime, 1); } catch { throw; } finally { // EXCEL終了処理 if (objWorkSheet != null) { Marshal.ReleaseComObject(objWorkSheet); // オブジェクト参照を解放 objWorkSheet = null; // オブジェクト解放 } if (objWorkBook != null) { objWorkBook.Close(false, Type.Missing, Type.Missing); //ファイルを閉じる Marshal.ReleaseComObject(objWorkBook); // オブジェクト参照を解放 objWorkBook = null; // オブジェクト解放 } if (objWorkBooks != null) { Marshal.ReleaseComObject(objWorkBooks); // オブジェクト参照を解放 objWorkBooks = null; // オブジェクト解放 } if (objExcel != null) { objExcel.Quit(); // EXCELを閉じる Marshal.ReleaseComObject(objExcel); // オブジェクト参照を解放 objExcel = null; // オブジェクト解放 } System.GC.Collect(); // オブジェクトを確実に削除 } try { string ret = ""; return(ret); } catch (Exception ex) { // エラーロギング new CommonException(ex); throw; } finally { // EXCEL終了処理 if (objWorkSheet != null) { Marshal.ReleaseComObject(objWorkSheet); // オブジェクト参照を解放 objWorkSheet = null; // オブジェクト解放 } if (objWorkBook != null) { objWorkBook.Close(false, Type.Missing, Type.Missing); //ファイルを閉じる Marshal.ReleaseComObject(objWorkBook); // オブジェクト参照を解放 objWorkBook = null; // オブジェクト解放 } if (objWorkBooks != null) { Marshal.ReleaseComObject(objWorkBooks); // オブジェクト参照を解放 objWorkBooks = null; // オブジェクト解放 } if (objExcel != null) { objExcel.Quit(); // EXCELを閉じる Marshal.ReleaseComObject(objExcel); // オブジェクト参照を解放 objExcel = null; // オブジェクト解放 } System.GC.Collect(); // オブジェクトを確実に削除 // Workフォルダの全ファイルを取得 string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories); // Workフォルダ内のファイル削除 foreach (string filepath in files) { //File.Delete(filepath); } } }
/// ----------------------------------------------------------------------------- /// <summary> /// DataTableをもとにxlsxファイルを作成し、PDFファイルを作成 /// </summary> /// <param name="dtHachu">発注のデータテーブル</param> /// <returns>結合PDFファイル</returns> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtShukoShonin) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string strNow = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); try { CreatePdf pdf = new CreatePdf(); // ワークブックのデフォルトフォント、フォントサイズの指定 XLWorkbook.DefaultStyle.Font.FontName = "MS ゴシック"; XLWorkbook.DefaultStyle.Font.FontSize = 9; // excelのインスタンス生成 XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled); IXLWorksheet worksheet = workbook.Worksheets.Add("Header"); IXLWorksheet headersheet = worksheet; // ヘッダーシート IXLWorksheet currentsheet = worksheet; // 処理中シート //Linqで必要なデータをselect var outDataAll = dtShukoShonin.AsEnumerable() .Select(dat => new { ShuhoShohinName = dat["商品名"], ShukoSu = dat["数量"], ShukoTokuisakiName = dat["得意先名"], ShukoNoki = dat["納期"], ShukoJuchusha = dat["受注者"] }).ToList(); //リストをデータテーブルに変換 DataTable dtChkList = pdf.ConvertToDataTable(outDataAll); int maxRowCnt = dtChkList.Rows.Count + 1; int maxColCnt = dtChkList.Columns.Count; int pageCnt = 0; // ページ(シート枚数)カウント int rowCnt = 1; // datatable処理行カウント int xlsRowCnt = 4; // Excel出力行カウント(開始は出力行) int maxPage = 0; // 最大ページ数 //ページ数計算 double page = 1.0 * maxRowCnt / 22; double decimalpart = page % 1; if (decimalpart != 0) { //小数点以下が0でない場合、+1 maxPage = (int)Math.Floor(page) + 1; } else { maxPage = (int)page; } //ClosedXMLで1行ずつExcelに出力 foreach (DataRow drSiireCheak in dtChkList.Rows) { //1ページ目のシート作成 if (rowCnt == 1) { pageCnt++; //タイトル出力(中央揃え、セル結合) IXLCell titleCell = headersheet.Cell("A1"); titleCell.Value = "出庫指示書 (依頼分)"; titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; titleCell.Style.Font.FontSize = 16; headersheet.Range("A1", "C1").Merge(); //ヘッダー出力(表ヘッダー) headersheet.Cell("A3").Value = "品 名 ・ 型 番"; headersheet.Cell("B3").Value = "数 量"; headersheet.Cell("C3").Value = "仕 向 け 先"; headersheet.Cell("D3").Value = "承認日"; headersheet.Cell("E3").Value = "受注者"; //ヘッダー列 headersheet.Range("A3", "E3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; //背景を灰色にする headersheet.Range("A3", "E3").Style.Fill.BackgroundColor = XLColor.LightGray; // 列幅の指定 headersheet.Column(1).Width = 65; headersheet.Column(2).Width = 11; headersheet.Column(3).Width = 50; headersheet.Column(4).Width = 11; headersheet.Column(5).Width = 20; // セルの周囲に罫線を引く headersheet.Range("A3", "E3").Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); // 印刷体裁(A4横、印刷範囲) headersheet.PageSetup.PaperSize = XLPaperSize.A4Paper; headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape; // ヘッダー部の指定(番号) headersheet.PageSetup.Header.Left.AddText("(№17)"); //ヘッダーシートのコピー、ヘッダー部の指定 pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow); } // 1セルずつデータ出力 for (int colCnt = 1; colCnt <= maxColCnt; colCnt++) { string str = drSiireCheak[colCnt - 1].ToString(); currentsheet.Cell(xlsRowCnt, colCnt).Value = str; //縦の中央に寄せる currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center; //数量の場合 if (colCnt == 2) { currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.Format = "#,0"; } } //行の高さ指定 currentsheet.Row(xlsRowCnt).Height = 20; // 1行分のセルの周囲に罫線を引く currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 5).Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); // 22行毎(ヘッダーを除いた行数)にシート作成 if (xlsRowCnt == 22) { pageCnt++; if (pageCnt <= maxPage) { xlsRowCnt = 3; // ヘッダーシートのコピー、ヘッダー部の指定 pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow); } } rowCnt++; xlsRowCnt++; } // ヘッダーシート削除 headersheet.Delete(); // workbookを保存 string strOutXlsFile = strWorkPath + strDateTime + ".xlsx"; workbook.SaveAs(strOutXlsFile); // workbookを解放 workbook.Dispose(); // ロゴ貼り付け処理 int[] topRow = { 1 }; int[] leftColumn = { 4 }; pdf.logoPaste(strOutXlsFile, topRow, leftColumn, 0, 0, 57); // PDF化の処理 return(pdf.createPdf(strOutXlsFile, strDateTime, 1)); } catch (Exception ex) { throw; } finally { // Workフォルダの全ファイルを取得 string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories); // Workフォルダ内のファイル削除 foreach (string filepath in files) { //File.Delete(filepath); } } }
///<summary> /// F10:Excel出力 ///</summary> private void exportXls() { // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "仕入チェックリスト_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; try { // データ検索用 List <string> lstSearchItem = new List <string>(); //年月日の日付フォーマット後を入れる用 string strYMDformat = ""; //待機状態 Cursor.Current = Cursors.WaitCursor; // 空文字判定(入力年月日(開始)) if (txtInputYMDStart.blIsEmpty() == false) { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。日付を入力してください。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtInputYMDStart.Focus(); return; } // 空文字判定(入力年月日(終了)) if (txtInputYMDEnd.blIsEmpty() == false) { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。日付を入力してください。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtInputYMDEnd.Focus(); return; } // 空文字判定(伝票年月日(開始)) if (txtDenpyoYMDStart.blIsEmpty() == false) { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。日付を入力してください。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtDenpyoYMDStart.Focus(); return; } // 空文字判定(伝票年月日(終了)) if (txtDenpyoYMDEnd.blIsEmpty() == false) { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。日付を入力してください。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtDenpyoYMDEnd.Focus(); return; } //日付フォーマット生成、およびチェック strYMDformat = txtInputYMDStart.chkDateDataFormat(txtInputYMDStart.Text); //開始入力年月日の日付チェック if (strYMDformat == "") { // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtInputYMDStart.Focus(); return; } else { txtInputYMDStart.Text = strYMDformat; } //初期化 strYMDformat = ""; //日付フォーマット生成、およびチェック strYMDformat = txtInputYMDEnd.chkDateDataFormat(txtInputYMDEnd.Text); //終了入力年月日の日付チェック if (strYMDformat == "") { // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtInputYMDEnd.Focus(); return; } else { txtInputYMDEnd.Text = strYMDformat; } //初期化 strYMDformat = ""; //日付フォーマット生成、およびチェック strYMDformat = txtDenpyoYMDStart.chkDateDataFormat(txtDenpyoYMDStart.Text); //開始伝票年月日の日付チェック if (strYMDformat == "") { // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtDenpyoYMDStart.Focus(); return; } else { txtDenpyoYMDStart.Text = strYMDformat; } //初期化 strYMDformat = ""; //日付フォーマット生成、およびチェック strYMDformat = txtDenpyoYMDEnd.chkDateDataFormat(txtDenpyoYMDEnd.Text); //終了伝票年月日の日付チェック if (strYMDformat == "") { // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtDenpyoYMDEnd.Focus(); return; } else { txtDenpyoYMDEnd.Text = strYMDformat; } // ビジネス層のインスタンス生成 A0090_SiireCheckPrint_B checkPrintB = new A0090_SiireCheckPrint_B(); // 検索するデータをリストに格納 lstSearchItem.Add(txtInputYMDStart.Text); lstSearchItem.Add(txtInputYMDEnd.Text); lstSearchItem.Add(txtDenpyoYMDStart.Text); lstSearchItem.Add(txtDenpyoYMDEnd.Text); lstSearchItem.Add(txtUserId.Text); lstSearchItem.Add(labelSet_SiiresakiCdFrom.CodeTxtText); lstSearchItem.Add(labelSet_SiiresakiCdTo.CodeTxtText); // 検索実行 DataTable dtSiireCheckList = checkPrintB.getSiireCheckList(lstSearchItem); // カーソルをデフォルトに戻す this.Cursor = Cursors.Default; if (dtSiireCheckList.Rows.Count > 0) { if (sfd.ShowDialog() == DialogResult.OK) { //待機状態 Cursor.Current = Cursors.WaitCursor; CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 string[] header = { "コード", "仕入先名", "年月日", "伝票番号", "取引区分", "品名・型番", "数量", "単価", "金額", "備考", "伝票合計", "消費税", "税込み計", }; // Linqで出力対象の項目をSelect // カラム名は以下のようにつける(カラム名でフォーマットを判断するため) // 金額関係:***kingaku // 単価関係:***tanka // 原価:***genka // 数量:***suryo var outDat = dtSiireCheckList.AsEnumerable() .Select(dat => new { code = dat["仕入先コード"], siiresakiName = dat["仕入先名"], denYmd = dat["伝票年月日"], denNo = dat["伝票番号"], torihikiKbn = dat["取引区分名"], hinmei = dat["品名"], suryo = dat["数量"], siireTanka = dat["仕入単価"], siireKingaku = dat["仕入金額"], biko = dat["備考"], zeinukiGokeiKingaku = dat["税抜合計金額"], zeiKingaku = dat["消費税"], zeikomiGokeiKingaku = dat["税込合計金額"], }).ToList(); // listをDataTableに変換 DataTable dtSiireChk = cpdf.ConvertToDataTable(outDat); string outFile = sfd.FileName; cpdf.DtToXls(dtSiireChk, "仕入チェックリスト", outFile, 3, 1, header); this.Cursor = Cursors.Default; // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } else { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } } catch (Exception ex) { this.Cursor = Cursors.Default; // エラーロギング new CommonException(ex); // Excel出力失敗メッセージ BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excel出力に失敗しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
/// <summary> /// F10:Excel出力 /// </summary> private void exportXls() { // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "商品群別売上仕入管理表_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; try { // データチェック処理 if (!dataCheack()) { return; } // データ検索用 List <string> lstSearchItem = new List <string>(); this.Cursor = Cursors.WaitCursor; // ビジネス層のインスタンス生成 C0650_SyohingunUriageSiirePrint_B syohingunuriagesiireprintB = new C0650_SyohingunUriageSiirePrint_B(); // 検索するデータをリストに格納 lstSearchItem.Add(txtKamikiYMDopen.Text); //[0] lstSearchItem.Add(txtKamikiYMDclose.Text); //[1] lstSearchItem.Add(txtSimokiYMDopen.Text); //[2] lstSearchItem.Add(txtSimokiYMDclose.Text); //[3] lstSearchItem.Add(labelSet_Torihikisaki.CodeTxtText); //[4] lstSearchItem.Add(labelSet_Tantousha.CodeTxtText); //[5] lstSearchItem.Add(labelSet_Daibunrui.CodeTxtText); //[6] lstSearchItem.Add(labelSet_Chubunrui.CodeTxtText); //[7] lstSearchItem.Add(labelSet_Maker.CodeTxtText); //[8] // 検索実行 DataTable dtSyohingunUriageSiire = syohingunuriagesiireprintB.getSyohingunUriageSiireItiran(lstSearchItem); this.Cursor = Cursors.Default; if (dtSyohingunUriageSiire.Rows.Count > 0) { // ダイアログ表示 if (sfd.ShowDialog() == DialogResult.OK) { //待機状態 Cursor.Current = Cursors.WaitCursor; CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 string[] header = { "大分類名", "中分類名", "上期売上高", "上期仕入高", "下期売上高", "下期仕入高", "合計売上高", "合計仕入高", }; // Linqで出力対象の項目をSelect // カラム名は以下のようにつける(カラム名でフォーマットを判断するため) // 金額関係:***kingaku // 単価関係:***tanka // 原価:***genka // 数量:***suryo var outDat = dtSyohingunUriageSiire.AsEnumerable() .Select(dat => new { daiName = dat["大分類名"], chuName = dat["中分類名"], kamiUriKingaku = dat["上期売上額"], kamiSiireKingaku = dat["上期仕入額"], simoUriKingaku = dat["下期売上額"], simoSiireKingaku = dat["下期仕入額"], uriKeiKingaku = dat["合計売上額"], siireKeiKingaku = dat["合計仕入額"], }).ToList(); // listをDataTableに変換 DataTable dtShohin = cpdf.ConvertToDataTable(outDat); string outFile = sfd.FileName; cpdf.DtToXls(dtShohin, "商品群別売上仕入管理表", outFile, 3, 1, header); this.Cursor = Cursors.Default; // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } else { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } } catch (Exception ex) { this.Cursor = Cursors.Default; // エラーロギング new CommonException(ex); // Excel出力失敗メッセージ BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excel出力に失敗しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
/// ----------------------------------------------------------------------------- /// <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> ///// judTanaData ///// 棚卸データの取得、判定 ///// </summary> //public int judTanaData(string strYMD) //{ // //本社データ確認用 // string strSQLHonSel = ""; // //本社データ確認用 // string strSQLGifuSel = ""; // //取り出したデータの確保用 // DataTable dtGetData = new DataTable(); // DBConnective dbconnective = new DBConnective(); // try // { // strSQLHonSel = "SELECT COUNT(*) FROM 棚卸記入表 "; // strSQLHonSel = strSQLHonSel + " WHERE 営業所コード='0001' "; // strSQLHonSel = strSQLHonSel + " AND 棚卸年月日='" + strYMD + "' "; // // 本社棚卸データの検索を実行 // dtGetData = dbconnective.ReadSql(strSQLHonSel); // //本社棚卸データがない場合 // if (dtGetData.Rows[0][0].ToString() == "0") // { // return (1); // } // strSQLGifuSel = "SELECT COUNT(*) FROM 棚卸記入表 "; // strSQLGifuSel = strSQLGifuSel + " WHERE 営業所コード='0002' "; // strSQLGifuSel = strSQLGifuSel + " AND 棚卸年月日='" + strYMD + "' "; // // 本社棚卸データの検索を実行 // dtGetData = dbconnective.ReadSql(strSQLGifuSel); // //本社棚卸データがない場合 // if (dtGetData.Rows[0][0].ToString() == "0") // { // return (2); // } // return (3); // } // catch // { // throw; // } // finally // { // dbconnective.DB_Disconnect(); // } //} ///// <summary> ///// updTanaData ///// 棚卸データの更新 ///// </summary> //public void updTanaData(string strYMD, string strUser) //{ // DBConnective dbconnective = new DBConnective(); // try // { // // トランザクション開始 // dbconnective.BeginTrans(); // // 棚卸更新_PROC(本社)を実行 // dbconnective.RunSql("棚卸更新_PROC '" + strYMD + "','" + // "0001" + "','" + // strUser + "'"); // // 棚卸更新_PROC(岐阜)を実行 // dbconnective.RunSql("棚卸更新_PROC '" + strYMD + "','" + // "0002" + "','" + // strUser + "'"); // // 棚卸更新_補足追加_PROCを実行 // dbconnective.RunSql("棚卸更新_補足追加_PROC '" + strYMD + "','" + // strUser + "'"); // // コミット // dbconnective.Commit(); // } // catch (Exception ex) // { // // ロールバック処理 // dbconnective.Rollback(); // throw (ex); // } // finally // { // dbconnective.DB_Disconnect(); // } //} /// ----------------------------------------------------------------------------- /// <summary> /// DataTableをもとにxlsxファイルを作成しPDF化</summary> /// <param name="dtTanaorosi"> /// 棚卸記入表のデータテーブル</param> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtTanaorosi, List <string> lstItem, string p) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strFilePath = "./Template/F0570_TanaoroshiPreSheet.xlsx"; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string strNow = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); Microsoft.Office.Interop.Excel.Application objExcel = null; Microsoft.Office.Interop.Excel.Workbooks objWorkBooks = null; Microsoft.Office.Interop.Excel.Workbook objWorkBook = null; Microsoft.Office.Interop.Excel.Worksheet objWorkSheet = null; Microsoft.Office.Interop.Excel.Range objRange = null; string strOutXlsFile = ""; CreatePdf pdf = null; try { pdf = new CreatePdf(); //Linqで必要なデータをselect var outDataAll = dtTanaorosi.AsEnumerable() .Select(dat => new { tanaban = dat["棚番"], maker = dat["メーカー名"], kataban = dat["品名型番"], zaiko = (decimal)dat["指定日在庫"], suryo = (decimal)dat["棚卸数量"], daibunruiCd = dat["大分類コード"], eigyo = dat["営業所名"], daibunruiName = dat["大分類名"], chubunruiName = dat["中分類名"] }).ToList(); // リストをデータテーブルに変換 DataTable dtChkList = pdf.ConvertToDataTable(outDataAll); // excelのインスタンス生成 XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled); IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート IXLWorksheet currentsheet = null; // 処理中シート int pageCnt = 0; // ページ(シート枚数)カウント int xlsRowCnt = 6; // Excel出力行カウント(開始は出力行) templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); currentsheet.Cell(2, "A").Value = "棚卸プレシート"; currentsheet.Cell(4, "A").Value = " " + dtChkList.Rows[0][6].ToString() + " " + dtChkList.Rows[0][7].ToString().Trim(); currentsheet.Cell(4, "E").Value = "棚卸日:" + string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[0])); string strDaibunruiCd = ""; foreach (DataRow drTanaorosi in dtChkList.Rows) { // 大分類コードが違う場合 //if (!string.IsNullOrWhiteSpace(strDaibunruiCd) && !strDaibunruiCd.Equals(drTanaorosi[5].ToString())) if (!string.IsNullOrWhiteSpace(strDaibunruiCd) && !strDaibunruiCd.Equals(drTanaorosi[0].ToString())) { pageCnt++; xlsRowCnt = 6; //strDaibunruiCd = drTanaorosi[5].ToString(); // テンプレートシートからコピー templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); currentsheet.Cell(2, "A").Value = "棚卸プレシート"; currentsheet.Cell(4, "A").Value = " " + drTanaorosi[6].ToString() + " " + drTanaorosi[7].ToString().Trim(); currentsheet.Cell(4, "E").Value = "棚卸日:" + string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[0])); } if (xlsRowCnt >= 51) { pageCnt++; xlsRowCnt = 6; //strDaibunruiCd = drTanaorosi[5].ToString(); // テンプレートシートからコピー templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); currentsheet.Cell(2, "A").Value = "棚卸プレシート"; currentsheet.Cell(4, "A").Value = " " + drTanaorosi[6].ToString() + " " + drTanaorosi[7].ToString().Trim(); currentsheet.Cell(4, "E").Value = "棚卸日:" + string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[0])); } strDaibunruiCd = drTanaorosi[5].ToString(); strDaibunruiCd = drTanaorosi[0].ToString(); currentsheet.Cell(xlsRowCnt, "A").Value = drTanaorosi[0].ToString(); currentsheet.Cell(xlsRowCnt, "B").Value = drTanaorosi[1].ToString(); currentsheet.Cell(xlsRowCnt, "C").Value = drTanaorosi[2].ToString(); currentsheet.Cell(xlsRowCnt, "D").Value = drTanaorosi[3].ToString(); currentsheet.Cell(xlsRowCnt, "E").Value = drTanaorosi[4].ToString(); xlsRowCnt++; } // テンプレートシート削除 templatesheet1.Delete(); // ページ数設定 for (pageCnt = 1; pageCnt <= workbook.Worksheets.Count; pageCnt++) { string s = "'" + pageCnt.ToString() + "/" + (workbook.Worksheets.Count).ToString(); workbook.Worksheet(pageCnt).Cell("E1").Value = s; // No. } // workbookを保存 strOutXlsFile = strWorkPath + strDateTime + ".xlsx"; workbook.SaveAs(strOutXlsFile); // workbookを解放 workbook.Dispose(); objExcel = new Microsoft.Office.Interop.Excel.Application(); objExcel.Visible = false; if (p != null) { objExcel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMinimized; } else { objExcel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMaximized; } objExcel.DisplayAlerts = false; objWorkBooks = objExcel.Workbooks; String strP = System.IO.Path.GetFullPath(strOutXlsFile); objWorkBook = objWorkBooks.Open(strP, //_xslFile, // FileName:ファイル名 Type.Missing, // UpdateLinks:ファイル内の外部参照の更新方法 Type.Missing, // ReadOnly:ReadOnlyにするかどうか Type.Missing, // Format: テキストファイルを開く場合に区切り文字を指定する Type.Missing, // Password:開く際にパスワードがある場合にパスワードを入力 Type.Missing, // WriteResPassword:書き込む際にパスワードがある場合にパスワードを入力 Type.Missing, // IgnoreReadOnlyRecommended:[読み取り専用を推奨する]チェックがオンの場合でも[読み取り専用を推奨する]メッセージを非表示 Type.Missing, // Origin:テキストファイルの場合、プラットフォームを指定 Type.Missing, // Delimiter:テキストファイルで且つ引数Formatが6の場合に区切り文字を指定 Type.Missing, // Editable:Excel4.0アドインの場合、アドインウィンドウを出すか指定 Type.Missing, // Notify:ファイルが読み取りor書き込みモードで開けない場合に通知リストに追加するか指定 Type.Missing, // Converter:ファイルを開くときに最初に使用するファイルコンバーターのインデックス番号を指定 Type.Missing, // AddToMru:最近使用したファイルの一覧にブックを追加するか指定 Type.Missing, // Local:Excel言語設定に合わせてファイルを保存するか指定 Type.Missing // CorruptLoad:使用できる定数は[xlNormalLoad][xlRepairFile][xlExtractData]。指定がない場合のは[xlNormalLoad]になりOMを通じて開始するときに回復は行われません。 ); if (p != null) { objWorkBook.PrintOut(Type.Missing, // From:印刷開始のページ番号 Type.Missing, // To:印刷終了のページ番号 1, // Copies:印刷部数 Type.Missing, // Preview:印刷プレビューをするか指定 p, // ActivePrinter:プリンターの名称 Type.Missing, // PrintToFile:ファイル出力をするか指定 true, // Collate:部単位で印刷するか指定 Type.Missing // PrToFileName :出力先ファイルの名前を指定するかどうか ); } else { objWorkBook.PrintOut(Type.Missing, // From:印刷開始のページ番号 Type.Missing, // To:印刷終了のページ番号 1, // Copies:印刷部数 true, // Preview:印刷プレビューをするか指定 p, // ActivePrinter:プリンターの名称 Type.Missing, // PrintToFile:ファイル出力をするか指定 true, // Collate:部単位で印刷するか指定 Type.Missing // PrToFileName :出力先ファイルの名前を指定するかどうか ); objExcel.Visible = true; objWorkBook.Activate(); } } catch (Exception ex) { // エラーロギング new CommonException(ex); throw; } finally { // EXCEL終了処理 if (objWorkSheet != null) { Marshal.ReleaseComObject(objWorkSheet); // オブジェクト参照を解放 objWorkSheet = null; // オブジェクト解放 } if (objWorkBook != null) { objWorkBook.Close(false, Type.Missing, Type.Missing); //ファイルを閉じる Marshal.ReleaseComObject(objWorkBook); // オブジェクト参照を解放 objWorkBook = null; // オブジェクト解放 } if (objWorkBooks != null) { Marshal.ReleaseComObject(objWorkBooks); // オブジェクト参照を解放 objWorkBooks = null; // オブジェクト解放 } if (objExcel != null) { objExcel.Quit(); // EXCELを閉じる Marshal.ReleaseComObject(objExcel); // オブジェクト参照を解放 objExcel = null; // オブジェクト解放 } System.GC.Collect(); // オブジェクトを確実に削除 } //for (int i = 0; i < objWorkBook.Sheets.Count; i++) //{ // objWorkSheet = objWorkBook.Sheets[i + 1]; // if (p != null) // { // objWorkSheet.PrintOut(Type.Missing, // From:印刷開始のページ番号 // Type.Missing, // To:印刷終了のページ番号 // 1, // Copies:印刷部数 // Type.Missing, // Preview:印刷プレビューをするか指定 // p, // ActivePrinter:プリンターの名称 // Type.Missing, // PrintToFile:ファイル出力をするか指定 // true, // Collate:部単位で印刷するか指定 // Type.Missing // PrToFileName :出力先ファイルの名前を指定するかどうか // ); // } //} try { string ret = ""; // PDF化の処理 //if (p == null) //{ // ret = pdf.createPdf(strOutXlsFile, strDateTime, 0); //} //return pdf.createPdf(strOutXlsFile, strDateTime, 0); return(ret); } catch (Exception ex) { // エラーロギング new CommonException(ex); throw; } finally { // EXCEL終了処理 if (objWorkSheet != null) { Marshal.ReleaseComObject(objWorkSheet); // オブジェクト参照を解放 objWorkSheet = null; // オブジェクト解放 } if (objWorkBook != null) { objWorkBook.Close(false, Type.Missing, Type.Missing); //ファイルを閉じる Marshal.ReleaseComObject(objWorkBook); // オブジェクト参照を解放 objWorkBook = null; // オブジェクト解放 } if (objWorkBooks != null) { Marshal.ReleaseComObject(objWorkBooks); // オブジェクト参照を解放 objWorkBooks = null; // オブジェクト解放 } if (objExcel != null) { objExcel.Quit(); // EXCELを閉じる Marshal.ReleaseComObject(objExcel); // オブジェクト参照を解放 objExcel = null; // オブジェクト解放 } System.GC.Collect(); // オブジェクトを確実に削除 // 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="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="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="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"> /// 担当者別伝票処理件数のデータテーブル</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); } } }
///<summary> /// F10:Excel出力 ///</summary> private void excelTokuteimukesakiTanka() { //SQL実行時に取り出したデータを入れる用 DataTable dtSetCd_B = new DataTable(); try { dtSetCd_B = (DataTable)gridTokuteimukesakiTanka.DataSource; BaseMessageBox basemessagebox; //取得したデータがない場合 if (dtSetCd_B == null || dtSetCd_B.Rows.Count == 0) { //例外発生メッセージ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "CBC単価マスタ_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; //ダイアログを表示する if (sfd.ShowDialog() == DialogResult.OK) { CreatePdf cpdf = new CreatePdf(); //Linqで必要なデータをselect var outDataAll = dtSetCd_B.AsEnumerable() .Select(dat => new { kataban = dat["型番"], tanka = dat["単価"], simukesaki = dat["仕向先"], saisyuSiireYMD = dat["最終仕入日"], }).ToList(); //リストをデータテーブルに変換 DataTable dtChkList = cpdf.ConvertToDataTable(outDataAll); string[] header = { "型 番", "単 価", "仕向先", "最終仕入日", }; string outFile = sfd.FileName; // Excel作成処理 cpdf.DtToXls(dtChkList, "特定向け先単価一覧表", outFile, 3, 1, header); // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } catch (Exception ex) { //データロギング new CommonException(ex); //例外発生メッセージ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, CommonTeisu.LABEL_ERROR_MESSAGE, CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
///<summary> /// F10:Excel出力 ///</summary> private void excelGyoshu() { //SQL実行時に取り出したデータを入れる用 DataTable dtSetCd_B = new DataTable(); //ビジネス層のインスタンス生成 M1060_Gyoshu_B daibunB = new M1060_Gyoshu_B(); try { dtSetCd_B = daibunB.getPrintData(); BaseMessageBox basemessagebox; //取得したデータがない場合 if (dtSetCd_B == null || dtSetCd_B.Rows.Count == 0) { //例外発生メッセージ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "業種マスタ_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; //ダイアログを表示する if (sfd.ShowDialog() == DialogResult.OK) { CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 //Linqで必要なデータをselect var outDataAll = dtSetCd_B.AsEnumerable() .Select(dat => new { gyoshuCd = (String)dat["業種コード"], gyoshuName = dat["業種名"], }).ToList(); //リストをデータテーブルに変換 DataTable dtChkList = cpdf.ConvertToDataTable(outDataAll); string[] header = { "コード", "業種名", }; string outFile = sfd.FileName; // Excel作成処理 cpdf.DtToXls(dtChkList, "業種マスタリスト", outFile, 3, 1, header); // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } catch (Exception ex) { //データロギング new CommonException(ex); //例外発生メッセージ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, CommonTeisu.LABEL_ERROR_MESSAGE, CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
/// <summary> /// F10:Excel出力 /// </summary> private void exportXls() { // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "仕入実績確認_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; try { // 検索条件格納用 List <string> lstSearchItem = new List <string>(); List <Array> lstSearchItem2 = new List <Array>(); DataTable dtSiireJisseki = new DataTable(); // データチェック if (!blnDataCheck()) { return; } // ヘッダーに条件を出力する値 lstSearchItem.Add(labelSet_Siiresaki.ValueLabelText); //仕入先名 lstSearchItem.Add(labelSet_Daibunrui.ValueLabelText); //大分類名 lstSearchItem.Add(labelSet_Chubunrui.ValueLabelText); //中分類名 // ビジネス層のインスタンス生成 D0320_SiireJissekiKakunin_B siireB = new D0320_SiireJissekiKakunin_B(); // 検索データをリストに格納 lstSearchItem = setSearchList(); lstSearchItem2 = getRadioBtn(); // 検索実行 dtSiireJisseki = siireB.getSiireJissekiList(lstSearchItem, lstSearchItem2); if (dtSiireJisseki != null && dtSiireJisseki.Rows.Count > 0) { // ダイアログ表示 if (sfd.ShowDialog() == DialogResult.OK) { //待機状態 Cursor.Current = Cursors.WaitCursor; CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 string[] header = { "仕入日", "伝票番号", "メーカー", "品名・型式", "数量", "仕入単価", "仕入金額", "備考", "出荷先", "仕入先", "発注番号", "発注担当", "仕入担当", "受注番号", }; // Linqで出力対象の項目をSelect // カラム名は以下のようにつける(カラム名でフォーマットを判断するため) // 金額関係:***kingaku // 単価関係:***tanka // 原価:***genka // 数量:***suryo var outDat = dtSiireJisseki.AsEnumerable() .Select(dat => new { denYmd = dat["伝票年月日"], denNo = dat["伝票番号"], maker = dat["メーカー"], hinkata = dat["品名型式"], suryo = dat["数量"], siireTanka = dat["仕入単価"], siireKingaku = dat["仕入金額"], biko = dat["備考"], shukaName = dat["出荷先名"], siireName = dat["仕入先名"], hachuNo = dat["発注番号"], hachuName = dat["発注担当"], siireTanto = dat["仕入担当"], juchuNo = dat["受注番号"], }).ToList(); // listをDataTableに変換 DataTable dtSiireJiseki = cpdf.ConvertToDataTable(outDat); string outFile = sfd.FileName; cpdf.DtToXls(dtSiireJiseki, "仕入実績確認", outFile, 3, 1, header); this.Cursor = Cursors.Default; // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } else { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } } catch (Exception ex) { this.Cursor = Cursors.Default; // エラーロギング new CommonException(ex); // Excel出力失敗メッセージ BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excel出力に失敗しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
/// <summary> /// F10:Excel出力 /// </summary> private void exportXls() { // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "請求一覧表_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; try { //待機状態 Cursor.Current = Cursors.WaitCursor; // データチェック処理 if (!dataCheack()) { //元に戻す Cursor.Current = Cursors.Default; return; } // データ検索用 List <string> lstSearchItem = new List <string>(); // ビジネス層のインスタンス生成 B0410_SeikyuItiranPrint_B seikyuitiranprintB = new B0410_SeikyuItiranPrint_B(); // 検索するデータをリストに格納 lstSearchItem.Add(txtSimekiriYMD.Text); lstSearchItem.Add(txtKaisiYMD.Text); lstSearchItem.Add(labelSet_TokuisakiStart.CodeTxtText); lstSearchItem.Add(labelSet_TokuisakiEnd.CodeTxtText); lstSearchItem.Add(txtSimekiribiCd.Text); if (radSetSort.judCheckBtn() == 0 || radSetSort.radbtn0.Checked) { lstSearchItem.Add("1"); } else if (radSetSort.judCheckBtn() == 1 || radSetSort.radbtn1.Checked) { lstSearchItem.Add("2"); } else { lstSearchItem.Add("3"); } lstSearchItem.Add(Environment.UserName); // 検索実行 DataTable dtSeikyuItiran = seikyuitiranprintB.getSeikyuItiran(lstSearchItem); // カーソルを戻す this.Cursor = Cursors.Default; // 検索結果にデータがあった場合 if (dtSeikyuItiran.Rows.Count > 0) { // ダイアログ表示 if (sfd.ShowDialog() == DialogResult.OK) { //待機状態 Cursor.Current = Cursors.WaitCursor; CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 string[] header = { "コード", "得意先名", "前月売掛残", "入金現金", "入金小切手", "入金振込", "入金手形", "入金相殺", "入金手数料", "入金その他", "繰越残高", "当月売上高", "当月消費税", "当月残高", "税区分", }; // Linqで出力対象の項目をSelect // カラム名は以下のようにつける(カラム名でフォーマットを判断するため) // 金額関係:***kingaku // 単価関係:***tanka // 原価:***genka // 数量:***suryo var outDat = dtSeikyuItiran.AsEnumerable() .Select(dat => new { code = dat["得意先コード"], tokuisakiName = dat["得意先名"], zenurizanKingaku = dat["前月売掛残"], genKingaku = dat["入金現金"], kogiteKingaku = dat["入金小切手"], furikomiKingaku = dat["入金振込"], teagataKingaku = dat["入金手形"], sosaiKingaku = dat["入金相殺"], tesuryoKingaku = dat["入金手数料"], sonotakingaku = dat["入金その他"], kurizanKingaku = dat["繰越残高"], uriagedataKingaku = dat["当月売上高"], zeiKingaku = dat["当月消費税"], tougetuzanKingaku = dat["当月残高"], zeiku = dat["税区"], }).ToList(); // listをDataTableに変換 DataTable dtSiireChk = cpdf.ConvertToDataTable(outDat); string outFile = sfd.FileName; cpdf.DtToXls(dtSiireChk, "請求一覧表", outFile, 3, 1, header); this.Cursor = Cursors.Default; // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } else { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); //元に戻す Cursor.Current = Cursors.Default; return; } } catch (Exception ex) { // エラーロギング new CommonException(ex); // メッセージボックスの処理、PDF作成失敗の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "印刷が失敗しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
/// ----------------------------------------------------------------------------- /// <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> /// 総合計を取得 /// </summary> /// <param name="dtUriage">売上のデータテーブル</param> /// <param name="dtList">参照型 データテーブル</param> /// ----------------------------------------------------------------------------- public decimal[] getGoukeiKingaku(DataTable dtUriage, ref DataTable dtList) { //Linqで必要なデータをselect var outDataAll = dtUriage.AsEnumerable() .Select(dat => new { groupName = dat["グループ名"], tantoName = dat["担当者名"], uriage1 = (decimal)dat["売上額1"], arari1 = (decimal)dat["粗利額1"], hiritsu1 = (decimal)dat["前年比率1"], uriage2 = (decimal)dat["売上額2"], arari2 = (decimal)dat["粗利額2"], hiritsu2 = (decimal)dat["前年比率2"], uriage3 = (decimal)dat["売上額3"], arari3 = (decimal)dat["粗利額3"], hiritsu3 = (decimal)dat["前年比率3"], uriage4 = (decimal)dat["売上額4"], arari4 = (decimal)dat["粗利額4"], hiritsu4 = (decimal)dat["前年比率4"], uriage5 = (decimal)dat["売上額5"], arari5 = (decimal)dat["粗利額5"], hiritsu5 = (decimal)dat["前年比率5"], uriage6 = (decimal)dat["売上額6"], arari6 = (decimal)dat["粗利額6"], hiritsu6 = (decimal)dat["前年比率6"], uriageKamiki = (decimal)dat["上期売上額"], arariKamiki = (decimal)dat["上期粗利額"], hiritsuKamiki = (decimal)dat["上期前年比率"], uriage7 = (decimal)dat["売上額7"], arari7 = (decimal)dat["粗利額7"], hiritsu7 = (decimal)dat["前年比率7"], uriage8 = (decimal)dat["売上額8"], arari8 = (decimal)dat["粗利額8"], hiritsu8 = (decimal)dat["前年比率8"], uriage9 = (decimal)dat["売上額9"], arari9 = (decimal)dat["粗利額9"], hiritsu9 = (decimal)dat["前年比率9"], uriage10 = (decimal)dat["売上額10"], arari10 = (decimal)dat["粗利額10"], hiritsu10 = (decimal)dat["前年比率10"], uriage11 = (decimal)dat["売上額11"], arari11 = (decimal)dat["粗利額11"], hiritsu11 = (decimal)dat["前年比率11"], uriage12 = (decimal)dat["売上額12"], arari12 = (decimal)dat["粗利額12"], hiritsu12 = (decimal)dat["前年比率12"], uriageSimoki = (decimal)dat["下期売上額"], arariSimoki = (decimal)dat["下期粗利額"], hiritsuSimoki = (decimal)dat["下期前年比率"], arariZen1 = (decimal)dat["前年粗利額1"], arariZen2 = (decimal)dat["前年粗利額2"], arariZen3 = (decimal)dat["前年粗利額3"], arariZen4 = (decimal)dat["前年粗利額4"], arariZen5 = (decimal)dat["前年粗利額5"], arariZen6 = (decimal)dat["前年粗利額6"], arariZen7 = (decimal)dat["前年粗利額7"], arariZen8 = (decimal)dat["前年粗利額8"], arariZen9 = (decimal)dat["前年粗利額9"], arariZen10 = (decimal)dat["前年粗利額10"], arariZen11 = (decimal)dat["前年粗利額11"], arariZen12 = (decimal)dat["前年粗利額12"], arariZenKamiki = (decimal)dat["上期前年粗利額"], arariZenSimoki = (decimal)dat["下期前年粗利額"] }).ToList(); // linqで合計算出 decimal[] decKingaku = new decimal[42]; decKingaku[0] = outDataAll.Select(gokei => gokei.uriage1).Sum(); decKingaku[1] = outDataAll.Select(gokei => gokei.arari1).Sum(); decKingaku[2] = outDataAll.Select(gokei => gokei.arariZen1).Sum(); decKingaku[3] = outDataAll.Select(gokei => gokei.uriage2).Sum(); decKingaku[4] = outDataAll.Select(gokei => gokei.arari2).Sum(); decKingaku[5] = outDataAll.Select(gokei => gokei.arariZen2).Sum(); decKingaku[6] = outDataAll.Select(gokei => gokei.uriage3).Sum(); decKingaku[7] = outDataAll.Select(gokei => gokei.arari3).Sum(); decKingaku[8] = outDataAll.Select(gokei => gokei.arariZen3).Sum(); decKingaku[9] = outDataAll.Select(gokei => gokei.uriage4).Sum(); decKingaku[10] = outDataAll.Select(gokei => gokei.arari4).Sum(); decKingaku[11] = outDataAll.Select(gokei => gokei.arariZen4).Sum(); decKingaku[12] = outDataAll.Select(gokei => gokei.uriage5).Sum(); decKingaku[13] = outDataAll.Select(gokei => gokei.arari5).Sum(); decKingaku[14] = outDataAll.Select(gokei => gokei.arariZen5).Sum(); decKingaku[15] = outDataAll.Select(gokei => gokei.uriage6).Sum(); decKingaku[16] = outDataAll.Select(gokei => gokei.arari6).Sum(); decKingaku[17] = outDataAll.Select(gokei => gokei.arariZen6).Sum(); decKingaku[18] = outDataAll.Select(gokei => gokei.uriageKamiki).Sum(); decKingaku[19] = outDataAll.Select(gokei => gokei.arariKamiki).Sum(); decKingaku[20] = outDataAll.Select(gokei => gokei.arariZenKamiki).Sum(); decKingaku[21] = outDataAll.Select(gokei => gokei.uriage7).Sum(); decKingaku[22] = outDataAll.Select(gokei => gokei.arari7).Sum(); decKingaku[23] = outDataAll.Select(gokei => gokei.arariZen7).Sum(); decKingaku[24] = outDataAll.Select(gokei => gokei.uriage8).Sum(); decKingaku[25] = outDataAll.Select(gokei => gokei.arari8).Sum(); decKingaku[26] = outDataAll.Select(gokei => gokei.arariZen8).Sum(); decKingaku[27] = outDataAll.Select(gokei => gokei.uriage9).Sum(); decKingaku[28] = outDataAll.Select(gokei => gokei.arari9).Sum(); decKingaku[29] = outDataAll.Select(gokei => gokei.arariZen9).Sum(); decKingaku[30] = outDataAll.Select(gokei => gokei.uriage10).Sum(); decKingaku[31] = outDataAll.Select(gokei => gokei.arari10).Sum(); decKingaku[32] = outDataAll.Select(gokei => gokei.arariZen10).Sum(); decKingaku[33] = outDataAll.Select(gokei => gokei.uriage11).Sum(); decKingaku[34] = outDataAll.Select(gokei => gokei.arari11).Sum(); decKingaku[35] = outDataAll.Select(gokei => gokei.arariZen11).Sum(); decKingaku[36] = outDataAll.Select(gokei => gokei.uriage12).Sum(); decKingaku[37] = outDataAll.Select(gokei => gokei.arari12).Sum(); decKingaku[38] = outDataAll.Select(gokei => gokei.arariZen12).Sum(); decKingaku[39] = outDataAll.Select(gokei => gokei.uriageSimoki).Sum(); decKingaku[40] = outDataAll.Select(gokei => gokei.arariSimoki).Sum(); decKingaku[41] = outDataAll.Select(gokei => gokei.arariZenSimoki).Sum(); // リストをデータテーブルに変換 CreatePdf pdf = new CreatePdf(); dtList = pdf.ConvertToDataTable(outDataAll); return(decKingaku); }
/// ----------------------------------------------------------------------------- /// <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> /// F10:Excel出力 /// </summary> private void exportXls() { // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "得意先別売上管理表_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; try { // データ検索用 List <string> lstSearchItem = new List <string>(); // データチェック if (!blnDataCheack()) { return; } //待機状態 Cursor.Current = Cursors.WaitCursor; // 検索するデータをリストに格納 lstSearchItem.Add(txtYmdFrom.Text); lstSearchItem.Add(txtYmdTo.Text); // グループコード(開始)が空の場合 if (labelSet_GroupCdFrom.CodeTxtText.Equals("")) { lstSearchItem.Add("0000"); } else { lstSearchItem.Add(labelSet_GroupCdFrom.CodeTxtText); } // グループコード(終了)が空の場合 if (labelSet_GroupCdTo.CodeTxtText.Equals("")) { lstSearchItem.Add("9999"); } else { lstSearchItem.Add(labelSet_GroupCdTo.CodeTxtText); } // 担当者コード(開始)が空の場合 if (labelSet_TantoushaCdFrom.CodeTxtText.Equals("")) { lstSearchItem.Add("0000"); } else { lstSearchItem.Add(labelSet_TantoushaCdFrom.CodeTxtText); } // 担当者コード(終了)が空の場合 if (labelSet_TantoushaCdTo.CodeTxtText.Equals("")) { lstSearchItem.Add("9999"); } else { lstSearchItem.Add(labelSet_TantoushaCdTo.CodeTxtText); } // 得意先コード(開始)が空の場合 if (labelSet_TokuisakiCdFrom.CodeTxtText.Equals("")) { lstSearchItem.Add("0000"); } else { lstSearchItem.Add(labelSet_TokuisakiCdFrom.CodeTxtText); } // 得意先コード(終了)が空の場合 if (labelSet_TokuisakiCdTo.CodeTxtText.Equals("")) { lstSearchItem.Add("9999"); } else { lstSearchItem.Add(labelSet_TokuisakiCdTo.CodeTxtText); } // 営業所コード(開始)が空の場合 if (labelSet_EigyoshoCdFrom.CodeTxtText.Equals("")) { lstSearchItem.Add("0000"); } else { lstSearchItem.Add(labelSet_EigyoshoCdFrom.CodeTxtText); } // 営業所コード(終了)が空の場合 if (labelSet_EigyoshoCdTo.CodeTxtText.Equals("")) { lstSearchItem.Add("9999"); } else { lstSearchItem.Add(labelSet_EigyoshoCdTo.CodeTxtText); } // ビジネス層のインスタンス生成 C0630_TokuisakiUriageArariPrint_B uriagePrint_B = new C0630_TokuisakiUriageArariPrint_B(); // 検索実行 DataTable dtUriage = uriagePrint_B.getUriage(lstSearchItem); // カーソルを戻す this.Cursor = Cursors.Default; // 対象データがある場合 if (dtUriage != null && dtUriage.Rows.Count > 0) { // 並べ替え(グループコード、担当者コード、得意先コード) DataView dvUriage = new DataView(dtUriage); dvUriage.Sort = "グループコード, 担当者コード, 得意先コード"; dtUriage = dvUriage.ToTable(); // ダイアログ表示 if (sfd.ShowDialog() == DialogResult.OK) { //待機状態 Cursor.Current = Cursors.WaitCursor; CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 string[] header = { "グループ名", "担当者名", "コード", "得意先名", "売上額", "粗利額", "粗利率", "指定期間内受注残金額", "指定期間内受注残粗利", "指定期間以降受注残金額", "指定期間以降受注残粗利", "月末売掛金残", "当月入金額", }; // Linqで出力対象の項目をSelect // カラム名は以下のようにつける(カラム名でフォーマットを判断するため) // 金額関係:***kingaku // 単価関係:***tanka // 原価:***genka // 数量:***suryo var outDat = dtUriage.AsEnumerable() .Select(dat => new { groupName = dat["グループ名"], tantoName = dat["担当者名"], tokuiCode = dat["得意先コード"], tokuiName = dat["得意先名"], uriageKingaku = dat["売上額"], arariKingaku = dat["粗利額"], arariritu = dat["粗利率"], getumatuJuchuzanKingaku = dat["月末迄受注残売上"], getumatuJuchuarariKingaku = dat["月末迄受注残粗利"], yokugetuJuchuzankingaku = dat["翌月以降受注残売上"], yokugetuJuchuarariKingaku = dat["翌月以降受注残粗利"], urikakezanKingaku = dat["月末売掛金残"], nyuKingaku = dat["当月入金額"], }).ToList(); // listをDataTableに変換 DataTable dtTokuiArari = cpdf.ConvertToDataTable(outDat); string outFile = sfd.FileName; cpdf.DtToXls(dtTokuiArari, "得意先別売上管理表", outFile, 3, 1, header); this.Cursor = Cursors.Default; // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } else { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "対象のデータはありません", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); //元に戻す Cursor.Current = Cursors.Default; return; } } catch (Exception ex) { this.Cursor = Cursors.Default; // エラーロギング new CommonException(ex); // Excel出力失敗メッセージ BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excel出力に失敗しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } }
/// ----------------------------------------------------------------------------- /// <summary> /// DataTableをもとにxlsxファイルを作成しPDF化</summary> /// <param name="dtUriage"> /// 売上管理表のデータテーブル</param> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtUriage, List <string> lstItem, string pr, int num) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string strNow = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); Microsoft.Office.Interop.Excel.Application objExcel = null; Microsoft.Office.Interop.Excel.Workbooks objWorkBooks = null; Microsoft.Office.Interop.Excel.Workbook objWorkBook = null; Microsoft.Office.Interop.Excel.Worksheet objWorkSheet = null; Microsoft.Office.Interop.Excel.Range objRange = null; //int pageRows = 38; int pageRows = 47; 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 = dtUriage.AsEnumerable() .Select(dat => new { groupCd = dat["グループコード"], groupName = dat["グループ名"], tantoCd = dat["担当者コード"], tantoName = dat["担当者名"], tokuisakiCd = dat["得意先コード"], tokuisakiName = dat["得意先名"], uriage = (decimal)dat["売上額"], arari = (decimal)dat["粗利額"], arariRitsu = (decimal)dat["粗利率"], getsumatsuUriage = (decimal)dat["月末迄受注残売上"], getsumatsuArari = (decimal)dat["月末迄受注残粗利"], yokugetsuUriage = (decimal)dat["翌月以降受注残売上"], yokugetsuArari = (decimal)dat["翌月以降受注残粗利"], getsumatsuUrikake = (decimal)dat["月末売掛金残"], nyukin = (decimal)dat["当月入金額"] }).ToList(); // linqで合計算出 decimal[] decKingaku = new decimal[9]; decKingaku[0] = outDataAll.Select(gokei => gokei.uriage).Sum(); decKingaku[1] = outDataAll.Select(gokei => gokei.arari).Sum(); decKingaku[2] = outDataAll.Select(gokei => gokei.arariRitsu).Sum(); decKingaku[3] = outDataAll.Select(gokei => gokei.getsumatsuUriage).Sum(); decKingaku[4] = outDataAll.Select(gokei => gokei.getsumatsuArari).Sum(); decKingaku[5] = outDataAll.Select(gokei => gokei.yokugetsuUriage).Sum(); decKingaku[6] = outDataAll.Select(gokei => gokei.yokugetsuArari).Sum(); decKingaku[7] = outDataAll.Select(gokei => gokei.getsumatsuUrikake).Sum(); decKingaku[8] = outDataAll.Select(gokei => gokei.nyukin).Sum(); // 担当者計 var tantoGoukei = from tbl in dtUriage.AsEnumerable() group tbl by tbl.Field <string>("担当者コード") into g select new { section = g.Key, count = g.Count(), uriage = g.Sum(p => p.Field <decimal>("売上額")), arari = g.Sum(p => p.Field <decimal>("粗利額")), arariRitsu = g.Sum(p => p.Field <decimal>("粗利率")), getsumatsuUriage = g.Sum(p => p.Field <decimal>("月末迄受注残売上")), getsumatsuArari = g.Sum(p => p.Field <decimal>("月末迄受注残粗利")), yokugetsuUriage = g.Sum(p => p.Field <decimal>("翌月以降受注残売上")), yokugetsuArari = g.Sum(p => p.Field <decimal>("翌月以降受注残粗利")), getsumatsuUrikake = g.Sum(p => p.Field <decimal>("月末売掛金残")), nyukin = g.Sum(p => p.Field <decimal>("当月入金額")) }; // 担当者計の合計算出 decimal[,] decKingakuTanto = new decimal[tantoGoukei.Count(), 9]; for (int cnt = 0; cnt < tantoGoukei.Count(); cnt++) { decKingakuTanto[cnt, 0] = tantoGoukei.ElementAt(cnt).uriage; decKingakuTanto[cnt, 1] = tantoGoukei.ElementAt(cnt).arari; decKingakuTanto[cnt, 2] = tantoGoukei.ElementAt(cnt).arariRitsu; decKingakuTanto[cnt, 3] = tantoGoukei.ElementAt(cnt).getsumatsuUriage; decKingakuTanto[cnt, 4] = tantoGoukei.ElementAt(cnt).getsumatsuArari; decKingakuTanto[cnt, 5] = tantoGoukei.ElementAt(cnt).yokugetsuUriage; decKingakuTanto[cnt, 6] = tantoGoukei.ElementAt(cnt).yokugetsuArari; decKingakuTanto[cnt, 7] = tantoGoukei.ElementAt(cnt).getsumatsuUrikake; decKingakuTanto[cnt, 8] = tantoGoukei.ElementAt(cnt).nyukin; } // グループ計 var groupGoukei = from tbl in dtUriage.AsEnumerable() group tbl by tbl.Field <string>("グループコード") into g select new { section = g.Key, count = g.Count(), uriage = g.Sum(p => p.Field <decimal>("売上額")), arari = g.Sum(p => p.Field <decimal>("粗利額")), arariRitsu = g.Sum(p => p.Field <decimal>("粗利率")), getsumatsuUriage = g.Sum(p => p.Field <decimal>("月末迄受注残売上")), getsumatsuArari = g.Sum(p => p.Field <decimal>("月末迄受注残粗利")), yokugetsuUriage = g.Sum(p => p.Field <decimal>("翌月以降受注残売上")), yokugetsuArari = g.Sum(p => p.Field <decimal>("翌月以降受注残粗利")), getsumatsuUrikake = g.Sum(p => p.Field <decimal>("月末売掛金残")), nyukin = g.Sum(p => p.Field <decimal>("当月入金額")) }; // グループ計の合計算出 decimal[,] decKingakuGroup = new decimal[groupGoukei.Count(), 9]; for (int cnt = 0; cnt < groupGoukei.Count(); cnt++) { decKingakuGroup[cnt, 0] = groupGoukei.ElementAt(cnt).uriage; decKingakuGroup[cnt, 1] = groupGoukei.ElementAt(cnt).arari; decKingakuGroup[cnt, 2] = groupGoukei.ElementAt(cnt).arariRitsu; decKingakuGroup[cnt, 3] = groupGoukei.ElementAt(cnt).getsumatsuUriage; decKingakuGroup[cnt, 4] = groupGoukei.ElementAt(cnt).getsumatsuArari; decKingakuGroup[cnt, 5] = groupGoukei.ElementAt(cnt).yokugetsuUriage; decKingakuGroup[cnt, 6] = groupGoukei.ElementAt(cnt).yokugetsuArari; decKingakuGroup[cnt, 7] = groupGoukei.ElementAt(cnt).getsumatsuUrikake; decKingakuGroup[cnt, 8] = groupGoukei.ElementAt(cnt).nyukin; } // リストをデータテーブルに変換 DataTable dtChkList = pdf.ConvertToDataTable(outDataAll); int maxColCnt = dtChkList.Columns.Count; int rowCnt = 1; // datatable処理行カウント int xlsRowCnt = 5; // Excel出力行カウント(開始は出力行) int tantoCnt = 0; int tantoRowCnt = 0; int groupCnt = 0; int groupRowCnt = 0; // ClosedXMLで1行ずつExcelに出力 foreach (DataRow drUriage in dtChkList.Rows) { // 1ページ目のシート作成 if (rowCnt == 1) { // タイトル出力(中央揃え、セル結合) IXLCell titleCell = headersheet.Cell("A1"); titleCell.Value = "得意先別売上管理表"; titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; titleCell.Style.Font.FontSize = 16; headersheet.Range("A1", "M1").Merge(); // 開始年月日、終了年月日出力(A3のセル) IXLCell unitCell = headersheet.Cell("A3"); unitCell.Value = "期間::" + string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[0])) + "~" + string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[1])); unitCell.Style.Font.FontSize = 10; // ヘッダー出力(3行目のセル) headersheet.Cell("H3").Value = "指定期間内受注残"; headersheet.Range("H3", "I3").Merge(); headersheet.Cell("J3").Value = "指定期間以降受注残"; headersheet.Range("J3", "K3").Merge(); // ヘッダー出力(4行目のセル) 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.Cell("J4").Value = "金 額"; headersheet.Cell("K4").Value = "粗 利"; headersheet.Cell("L4").Value = "月末売掛金残"; headersheet.Cell("M4").Value = "当月入金額"; // ヘッダー列 headersheet.Range("H3", "K3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; headersheet.Range("A4", "M4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; // セルの周囲に罫線を引く headersheet.Range("H3", "K3").Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); headersheet.Range("A4", "M4").Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); // セルの背景色 headersheet.Range("H3", "K3").Style.Fill.BackgroundColor = XLColor.LightGray; headersheet.Range("A4", "M4").Style.Fill.BackgroundColor = XLColor.LightGray; // 列幅の指定 headersheet.Column(1).Width = 10; headersheet.Column(2).Width = 10; headersheet.Column(3).Width = 5.4; headersheet.Column(4).Width = 30; headersheet.Column(5).Width = 12; headersheet.Column(6).Width = 12; headersheet.Column(7).Width = 8; for (int cnt = 8; cnt <= 13; cnt++) { headersheet.Column(cnt).Width = 12; } // 印刷体裁(A4横、印刷範囲) headersheet.PageSetup.PaperSize = XLPaperSize.A4Paper; headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape; headersheet.PageSetup.Margins.Left = 0.2; headersheet.PageSetup.Margins.Right = 0.2; // ヘッダー部の指定(番号) headersheet.PageSetup.Header.Left.AddText("(№63)"); } // グループ名出力 if (groupRowCnt == 0) { xlsRowCnt = 5; // ヘッダーシートのコピー pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count); currentsheet.Cell(xlsRowCnt, 1).Value = drUriage[1]; } // 担当者名出力 if (tantoRowCnt == 0) { currentsheet.Cell(xlsRowCnt, 2).Value = drUriage[3]; // 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 == pageRows + 1) { xlsRowCnt = 5; // ヘッダーシートのコピー pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count); } // 1セルずつデータ出力 for (int colCnt = 4; colCnt < maxColCnt; colCnt++) { string str = drUriage[colCnt].ToString(); // 金額セルの処理 if (colCnt == 6 || colCnt == 7 || colCnt >= 9 && colCnt <= 14) { // 3桁毎に","を挿入する str = string.Format("{0:#,0}", decimal.Parse(str)); currentsheet.Cell(xlsRowCnt, colCnt - 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } // 粗利率セルの処理 if (colCnt == 8) { // 3桁毎に","を挿入する、小数点第2位まで currentsheet.Cell(xlsRowCnt, colCnt - 1).Style.NumberFormat.SetFormat("#,##0.00"); currentsheet.Cell(xlsRowCnt, colCnt - 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } currentsheet.Cell(xlsRowCnt, colCnt - 1).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 == pageRows) { xlsRowCnt = 4; // ヘッダーシートのコピー pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count); } // 担当者計を出力 tantoRowCnt++; if (tantoGoukei.ElementAt(tantoCnt).count == tantoRowCnt) { xlsRowCnt++; // セル結合 currentsheet.Range(xlsRowCnt, 2, xlsRowCnt, 3).Merge(); currentsheet.Cell(xlsRowCnt, 4).Value = "◆担当者計◆"; for (int cnt = 0; cnt < 9; cnt++) { // 粗利率の場合 if (cnt == 2) { // 売上額が0でない場合 if (decKingakuTanto[tantoCnt, 0] != 0) { decKingakuTanto[tantoCnt, cnt] = decKingakuTanto[tantoCnt, 1] / decKingakuTanto[tantoCnt, 0] * 100; } else { decKingakuTanto[tantoCnt, cnt] = 0; } currentsheet.Cell(xlsRowCnt, cnt + 5).Value = decKingakuTanto[tantoCnt, cnt].ToString(); currentsheet.Cell(xlsRowCnt, cnt + 5).Style.NumberFormat.SetFormat("#,##0.00"); } else { currentsheet.Cell(xlsRowCnt, cnt + 5).Value = string.Format("{0:#,0}", decKingakuTanto[tantoCnt, cnt]); } currentsheet.Cell(xlsRowCnt, cnt + 5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } // 1行分のセルの周囲に罫線を引く currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); tantoCnt++; tantoRowCnt = 0; } // 35行毎(ヘッダーを除いた行数)にシート作成 if (xlsRowCnt == pageRows) { xlsRowCnt = 4; // ヘッダーシートのコピー pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count); } // グループ計を出力 groupRowCnt++; if (groupGoukei.ElementAt(groupCnt).count == groupRowCnt) { xlsRowCnt++; // セル結合 currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 3).Merge(); currentsheet.Cell(xlsRowCnt, 4).Value = "◆グループ計◆"; for (int cnt = 0; cnt < 9; cnt++) { // 粗利率の場合 if (cnt == 2) { // 売上額が0でない場合 if (decKingakuGroup[groupCnt, 0] != 0) { decKingakuGroup[groupCnt, cnt] = decKingakuGroup[groupCnt, 1] / decKingakuGroup[groupCnt, 0] * 100; } else { decKingakuGroup[groupCnt, cnt] = 0; } currentsheet.Cell(xlsRowCnt, cnt + 5).Value = decKingakuGroup[groupCnt, cnt].ToString(); currentsheet.Cell(xlsRowCnt, cnt + 5).Style.NumberFormat.SetFormat("#,##0.00"); } else { currentsheet.Cell(xlsRowCnt, cnt + 5).Value = string.Format("{0:#,0}", decKingakuGroup[groupCnt, cnt]); } currentsheet.Cell(xlsRowCnt, cnt + 5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } // 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 == pageRows) { xlsRowCnt = 4; // ヘッダーシートのコピー pdf.sheetCopy(ref workbook, ref headersheet, ref currentsheet, workbook.Worksheets.Count); } rowCnt++; xlsRowCnt++; } // 最終行を出力した後、合計行を出力 if (dtChkList.Rows.Count > 0) { // セル結合 currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 3).Merge(); currentsheet.Cell(xlsRowCnt, 4).Value = "◆総合計◆"; for (int cnt = 0; cnt < 9; cnt++) { // 粗利率の場合 if (cnt == 2) { // 売上額が0でない場合 if (decKingaku[0] != 0) { decKingaku[cnt] = decKingaku[1] / decKingaku[0] * 100; } else { decKingaku[cnt] = 0; } currentsheet.Cell(xlsRowCnt, cnt + 5).Value = decKingaku[cnt].ToString(); currentsheet.Cell(xlsRowCnt, cnt + 5).Style.NumberFormat.SetFormat("#,##0.00"); } else { currentsheet.Cell(xlsRowCnt, cnt + 5).Value = string.Format("{0:#,0}", decKingaku[cnt]); } currentsheet.Cell(xlsRowCnt, cnt + 5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } // 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(); // 各ページのヘッダー部を指定 int 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, 0); objExcel = new Microsoft.Office.Interop.Excel.Application(); objExcel.Visible = false; if (pr != null) { objExcel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMinimized; } else { objExcel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMaximized; } objExcel.DisplayAlerts = false; objWorkBooks = objExcel.Workbooks; String strP = System.IO.Path.GetFullPath(strOutXlsFile); objWorkBook = objWorkBooks.Open(strP, //_xslFile, // FileName:ファイル名 Type.Missing, // UpdateLinks:ファイル内の外部参照の更新方法 Type.Missing, // ReadOnly:ReadOnlyにするかどうか Type.Missing, // Format: テキストファイルを開く場合に区切り文字を指定する Type.Missing, // Password:開く際にパスワードがある場合にパスワードを入力 Type.Missing, // WriteResPassword:書き込む際にパスワードがある場合にパスワードを入力 Type.Missing, // IgnoreReadOnlyRecommended:[読み取り専用を推奨する]チェックがオンの場合でも[読み取り専用を推奨する]メッセージを非表示 Type.Missing, // Origin:テキストファイルの場合、プラットフォームを指定 Type.Missing, // Delimiter:テキストファイルで且つ引数Formatが6の場合に区切り文字を指定 Type.Missing, // Editable:Excel4.0アドインの場合、アドインウィンドウを出すか指定 Type.Missing, // Notify:ファイルが読み取りor書き込みモードで開けない場合に通知リストに追加するか指定 Type.Missing, // Converter:ファイルを開くときに最初に使用するファイルコンバーターのインデックス番号を指定 Type.Missing, // AddToMru:最近使用したファイルの一覧にブックを追加するか指定 Type.Missing, // Local:Excel言語設定に合わせてファイルを保存するか指定 Type.Missing // CorruptLoad:使用できる定数は[xlNormalLoad][xlRepairFile][xlExtractData]。指定がない場合のは[xlNormalLoad]になりOMを通じて開始するときに回復は行われません。 ); if (pr != null) { for (int ip = 0; ip < num; ip++) { objWorkBook.PrintOut(Type.Missing, // From:印刷開始のページ番号 Type.Missing, // To:印刷終了のページ番号 1, // Copies:印刷部数 Type.Missing, // Preview:印刷プレビューをするか指定 pr, // ActivePrinter:プリンターの名称 Type.Missing, // PrintToFile:ファイル出力をするか指定 true, // Collate:部単位で印刷するか指定 Type.Missing // PrToFileName :出力先ファイルの名前を指定するかどうか ); } } else { objWorkBook.PrintOut(Type.Missing, // From:印刷開始のページ番号 Type.Missing, // To:印刷終了のページ番号 1, // Copies:印刷部数 true, // Preview:印刷プレビューをするか指定 pr, // ActivePrinter:プリンターの名称 Type.Missing, // PrintToFile:ファイル出力をするか指定 true, // Collate:部単位で印刷するか指定 Type.Missing // PrToFileName :出力先ファイルの名前を指定するかどうか ); objExcel.Visible = true; objWorkBook.Activate(); } return(""); } catch { throw; } finally { // EXCEL終了処理 if (objWorkSheet != null) { Marshal.ReleaseComObject(objWorkSheet); // オブジェクト参照を解放 objWorkSheet = null; // オブジェクト解放 } if (objWorkBook != null) { objWorkBook.Close(false, Type.Missing, Type.Missing); //ファイルを閉じる Marshal.ReleaseComObject(objWorkBook); // オブジェクト参照を解放 objWorkBook = null; // オブジェクト解放 } if (objWorkBooks != null) { Marshal.ReleaseComObject(objWorkBooks); // オブジェクト参照を解放 objWorkBooks = null; // オブジェクト解放 } if (objExcel != null) { objExcel.Quit(); // EXCELを閉じる Marshal.ReleaseComObject(objExcel); // オブジェクト参照を解放 objExcel = null; // オブジェクト解放 } System.GC.Collect(); // 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> /// F10:Excel出力 ///</summary> private void exportXls() { // SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // ファイル名の指定 sfd.FileName = "買掛金残高一覧確認_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".xlsx"; // デフォルトパス取得(デスクトップ) string Init_dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //はじめに表示されるフォルダを指定する sfd.InitialDirectory = Init_dir; // ファイルフィルタの設定 sfd.Filter = "すべてのファイル(*.*)|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { // グリッドに表示されていない場合 if (gridTokuisaki.Rows.Count == 0) { return; } //データの取り出し用 DataTable dtPrintData = new DataTable(); //列情報を取得 DataGridViewColumnCollection cols = gridTokuisaki.Columns; //行情報を取得 DataGridViewRowCollection rows = gridTokuisaki.Rows; //取引先経理情報登録時の情報 List <string> lstTorihiki = new List <string>(); //年月日の日付フォーマット後を入れる用 string strYMDformat = ""; this.Cursor = Cursors.WaitCursor; //空チェック(開始得意先コード) if (StringUtl.blIsEmpty(lblsetTokuisakiCdopen.CodeTxtText) == false) { this.Cursor = Cursors.Default; // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。\r\n日付を入力してください。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); lblsetTokuisakiCdopen.Focus(); return; } //空チェック(終了得意先コード) if (StringUtl.blIsEmpty(lblsetTokuisakiCdclose.CodeTxtText) == false) { this.Cursor = Cursors.Default; // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。\r\n日付を入力してください。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); lblsetTokuisakiCdclose.Focus(); return; } //日付フォーマット生成、およびチェック strYMDformat = txtYMopen.chkDateYMDataFormat(txtYMopen.Text); //開始年月日の日付チェック if (strYMDformat == "") { this.Cursor = Cursors.Default; // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtYMopen.Focus(); return; } else { txtYMopen.Text = strYMDformat; } //初期化 strYMDformat = ""; //日付フォーマット生成、およびチェック strYMDformat = txtYMclose.chkDateYMDataFormat(txtYMclose.Text); //終了年月日の日付チェック if (strYMDformat == "") { this.Cursor = Cursors.Default; // メッセージボックスの処理、項目が日付でない場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "入力された日付が正しくありません。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtYMclose.Focus(); return; } else { txtYMclose.Text = strYMDformat; } this.Cursor = Cursors.Default; //年月日が空の場合 if (txtYMopen.blIsEmpty() == false) { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。\r\n日付を入力してください。 ", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtYMopen.Focus(); return; } //年月日が空の場合 if (txtYMclose.blIsEmpty() == false) { // メッセージボックスの処理、項目が空の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_INPUT, "項目が空です。\r\n日付を入力してください。 ", CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); txtYMclose.Focus(); return; } //検索開始得意先コードのチェック if (lblsetTokuisakiCdopen.chkTxtTorihikisaki() == true) { lblsetTokuisakiCdopen.Focus(); return; } //検索終了得意先コードのチェック if (lblsetTokuisakiCdclose.chkTxtTorihikisaki() == true) { lblsetTokuisakiCdclose.Focus(); return; } this.Cursor = Cursors.WaitCursor; DataTable dtGridViewTokusaki = new DataTable(); List <string> lstStringViewData = new List <string>(); lstStringViewData.Add(lblsetTokuisakiCdopen.CodeTxtText); lstStringViewData.Add(lblsetTokuisakiCdclose.CodeTxtText); string strShuturyoku = ""; //出力順のラジオボタン判定 if (radShuturyoku.radbtn0.Checked == true) { strShuturyoku = "Tokuisaki"; } else { strShuturyoku = "Hurigana"; } lstStringViewData.Add(DateTime.Parse(txtYMopen.Text).ToString("yyyy/MM/dd")); lstStringViewData.Add(DateTime.Parse(txtYMclose.Text).ToString("yyyy/MM/dd")); lstStringViewData.Add(strShuturyoku); C0520_KaikakekinZandakaIchiranKakunin_B kaikakekakuninB = new C0520_KaikakekinZandakaIchiranKakunin_B(); try { DataTable dtXlsData = kaikakekakuninB.getPrintData(lstStringViewData); if (dtXlsData.Rows.Count > 0) { CreatePdf cpdf = new CreatePdf(); // 出力するヘッダを設定 string[] header = { "コード", "得意先名", "年月", "前月買掛残", "支払現金", "支払小切手", "支払振込", "支払手形", "支払相殺", "支払手数料", "支払その他", "繰越残高", "当月仕入高", "当月消費税", "当月残高", "税区", }; // Linqで出力対象の項目をSelect // カラム名は以下のようにつける(カラム名でフォーマットを判断するため) // 金額関係:***kingaku // 単価関係:***tanka // 原価:***genka // 数量:***suryo var outDat = dtXlsData.AsEnumerable() .Select(dat => new { code = dat["コード"], tokuisakiName = dat["得意先名"], YM = dat["年月"], zenkaikakezanKingaku = dat["前月買掛残"], siharaiGenkinKingaku = dat["支払現金"], siharaiKogiteKingaku = dat["支払小切手"], siharaiFurikomiKingaku = dat["支払振込"], siharaiTegataKingaku = dat["支払手形"], siharaiSosaiKingaku = dat["支払相殺"], siharaiTesuryoKingaku = dat["支払手数料"], siharaiSonotaKingaku = dat["支払その他"], kurikosizanKingaku = dat["繰越残高"], togetuUriageKingaku = dat["当月仕入高"], togetuZeiKingaku = dat["当月消費税"], togetuZanKingaku = dat["当月残高"], zeiku = dat["税区"] }).ToList(); // listをDataTableに変換 DataTable dtKaikakeZan = cpdf.ConvertToDataTable(outDat); string outFile = sfd.FileName; cpdf.DtToXls(dtKaikakeZan, "買掛金残高一覧確認", outFile, 3, 1, header); this.Cursor = Cursors.Default; // メッセージボックスの処理、Excel作成完了の場合のウィンドウ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_VIEW, "Excelファイルを作成しました。", CommonTeisu.BTN_OK, CommonTeisu.DIAG_INFOMATION); basemessagebox.ShowDialog(); } } catch (Exception ex) { this.Cursor = Cursors.Default; //データロギング new CommonException(ex); //例外発生メッセージ(OK) BaseMessageBox basemessagebox = new BaseMessageBox(this, CommonTeisu.TEXT_ERROR, CommonTeisu.LABEL_ERROR_MESSAGE, CommonTeisu.BTN_OK, CommonTeisu.DIAG_ERROR); basemessagebox.ShowDialog(); return; } } }