/// <summary> /// 一覧シート作成 /// </summary> /// <param name="targetBook"></param> private void CreateItiranSheet(XLWorkbook targetBook) { string templateFilePath = Directory.GetCurrentDirectory() + @"/Template/一覧.xlsx"; if (!File.Exists(templateFilePath)) { throw new FileNotFoundException("一覧テンプレートファイルなし"); } using (var book = new XLWorkbook(templateFilePath)) { IXLWorksheet sheet = book.Worksheets.Worksheet("一覧"); sheet.CopyTo(targetBook, "一覧", 0); IXLWorksheet itiranSheet = targetBook.Worksheet("一覧"); int tableCount = 0; foreach (var searchSheet in targetBook.Worksheets.Where(x => x.Name != "一覧")) { int row = ITIRAN_START_ROW + tableCount; itiranSheet.Cell(row, (int)ItiranColumn.No).Value = tableCount + 1; itiranSheet.Cell(row, (int)ItiranColumn.RonriName).Value = searchSheet.Cell(TableCell.RONRI_NAME).Value; itiranSheet.Cell(row, (int)ItiranColumn.RonriName).Hyperlink = new XLHyperlink($"'{searchSheet.Name}'!A1"); itiranSheet.Cell(row, (int)ItiranColumn.ButuriName).Value = searchSheet.Cell(TableCell.BUTURI_NAME).Value; itiranSheet.Cell(row, (int)ItiranColumn.Biko).Value = searchSheet.Cell(TableCell.BIKO).Value; tableCount++; } } }
public static void Copy(XLWorkbook wb, IXLWorksheet ws) { ws.CopyTo("Copy"); var newWb = new XLWorkbook(); wb.Worksheet(1).CopyTo(newWb, "copySheet"); newWb.SaveAs("copy.xlsx"); }
/// <summary> /// ヘッダーシートをコピーし、ヘッダー部を指定 /// <param name="workbook">参照型 ワークブック</param> /// <param name="headersheet">参照型 ヘッダーシート</param> /// <param name="currentsheet">参照型 カレントシート</param> /// <param name="pageCnt">ページ数</param> /// <param name="strHeader">コンピュータ名、日付、ページ数</param> /// </summary> private void sheetCopy(ref XLWorkbook workbook, ref IXLWorksheet headersheet, ref IXLWorksheet currentsheet, int pageCnt, string strHeader) { // ヘッダーシートからコピー headersheet.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(pageCnt + 1); // ヘッダー部の指定(コンピュータ名、日付、ページ数を出力) currentsheet.PageSetup.Header.Right.AddText(strHeader); }
public void CopyConditionalFormatsCount() { var wb = new XLWorkbook(); IXLWorksheet ws = wb.AddWorksheet("Sheet1"); ws.FirstCell().AddConditionalFormat().WhenContains("1").Fill.SetBackgroundColor(XLColor.Blue); IXLWorksheet ws2 = ws.CopyTo("Sheet2"); Assert.AreEqual(1, ws2.ConditionalFormats.Count()); }
public void sheetCopy2(ref XLWorkbook workbook, ref IXLWorksheet headersheet, ref IXLWorksheet currentsheet, int page, int maxPage, string strNow) { // ヘッダー部に指定する情報を取得 //string strHeader = this.getHeader(page, maxPage, strNow); // ヘッダーシートからコピー headersheet.CopyTo("Page" + page.ToString()); currentsheet = workbook.Worksheet(page + 1); // ヘッダー部の指定(コンピュータ名、日付、ページ数を出力) currentsheet.PageSetup.Header.Right.AddText(page.ToString() + " / " + maxPage.ToString() + " "); }
/// <summary> /// ヘッダーシートをコピー /// <param name="workbook">参照型 ワークブック</param> /// <param name="headersheet">参照型 ヘッダーシート</param> /// <param name="currentsheet">参照型 カレントシート</param> /// <param name="pageCnt">ページ数</param> /// </summary> public void sheetCopy(ref XLWorkbook workbook, ref IXLWorksheet headersheet, ref IXLWorksheet currentsheet, int pageCnt) { // ヘッダーシートからコピー headersheet.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(pageCnt + 1); }
/// ----------------------------------------------------------------------------- /// <summary> /// DataTableをもとにxlsxファイルを作成しPDF化</summary> /// <param name="dtSeikyuList"> /// 請求一覧表のデータテーブル</param> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtSeikyuList, List <string> lstItem) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); try { string strHeader = ""; string strNow = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); string strSpace = " "; string strComputerName = System.Windows.Forms.SystemInformation.ComputerName; // ワークブックのデフォルトフォント、フォントサイズの指定 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 = dtSeikyuList.AsEnumerable() .Select(dat => new { TokuisakiCd = dat["得意先コード"], TokuisakiName = dat["得意先名"], ZengetuUrikakezan = (decimal)dat["前月売掛残"], NyukinGenkin = (decimal)dat["入金現金"], NyukinKogitte = (decimal)dat["入金小切手"], NyukinHurikomi = (decimal)dat["入金振込"], NyukinTegata = (decimal)dat["入金手形"], NyukinSousatu = (decimal)dat["入金相殺"], NyukinTesuuryou = (decimal)dat["入金手数料"], Nyukinsonota = (decimal)dat["入金その他"], Kurikosizandaka = (decimal)dat["繰越残高"], TougetuUriagedaka = (decimal)dat["当月売上高"], TougetuSyohizei = (decimal)dat["当月消費税"], TougetuZandaka = (decimal)dat["当月残高"], Zeiku = dat["税区"] }).ToList(); // linqで前月売掛金、入金現金、入金小切手、入金振込、入金手形、入金相殺、入金手数料、 // 入金その他、繰越残高、当月売上高、当月消費税、当月残高の合計算出 decimal[] decKingaku = new decimal[13]; decKingaku[0] = outDataAll.Select(gokei => gokei.ZengetuUrikakezan).Sum(); decKingaku[1] = outDataAll.Select(gokei => gokei.NyukinGenkin).Sum(); decKingaku[2] = outDataAll.Select(gokei => gokei.NyukinKogitte).Sum(); decKingaku[3] = outDataAll.Select(gokei => gokei.NyukinHurikomi).Sum(); decKingaku[4] = outDataAll.Select(gokei => gokei.NyukinTegata).Sum(); decKingaku[5] = outDataAll.Select(gokei => gokei.NyukinSousatu).Sum(); decKingaku[6] = outDataAll.Select(gokei => gokei.NyukinTesuuryou).Sum(); decKingaku[7] = outDataAll.Select(gokei => gokei.Nyukinsonota).Sum(); decKingaku[8] = outDataAll.Select(gokei => gokei.Kurikosizandaka).Sum(); decKingaku[9] = outDataAll.Select(gokei => gokei.TougetuUriagedaka).Sum(); decKingaku[10] = outDataAll.Select(gokei => gokei.TougetuSyohizei).Sum(); decKingaku[11] = outDataAll.Select(gokei => gokei.TougetuZandaka).Sum(); // リストをデータテーブルに変換 DataTable dtChkList = this.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; // 最大ページ数 // ページ数計算 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 dtSeikyuItiran 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 = "締切日:" + string.Format(lstItem[0], "yyyy年MM月dd日"); 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 = 5; headersheet.Column(2).Width = 25; headersheet.Column(3).Width = 10; 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 = 7; // 印刷体裁(B4横、印刷範囲) headersheet.PageSetup.PaperSize = XLPaperSize.B4Paper; headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape; // ヘッダー部の指定(番号) headersheet.PageSetup.Header.Left.AddText("(№41)"); // ヘッダーシートからコピー headersheet.CopyTo("Page1"); currentsheet = workbook.Worksheet(2); // ヘッダー部の指定(コンピュータ名、日付、ページ数を出力) strHeader = "( " + strComputerName + " )" + strSpace + strNow + strSpace + pageCnt.ToString() + " / " + maxPage.ToString(); currentsheet.PageSetup.Header.Right.AddText(strHeader); } // ヘッダー行の場合 if (xlsRowCnt == 3) { // 出力行へ移動 xlsRowCnt++; } // 1セルずつデータ出力 for (int colCnt = 1; colCnt <= maxColCnt; colCnt++) { string str = dtSeikyuItiran[colCnt - 1].ToString(); currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left; // 金額セルの処理 if (colCnt >= 3 && colCnt <= 14) { // 3桁毎に","を挿入する str = string.Format("{0:#,0}", decimal.Parse(str)); currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; } 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); // 44行毎(ヘッダーを除いた行数)にシート作成 if (xlsRowCnt == 40) { pageCnt++; if (pageCnt <= maxPage) { xlsRowCnt = 3; // コンピュータ名、日付、ページ数を取得 strHeader = "( " + strComputerName + " )" + strSpace + strNow + strSpace + pageCnt.ToString() + " / " + maxPage.ToString(); // ヘッダーシートのコピー、ヘッダー部の指定 sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, strHeader); } } //// 44行毎(ヘッダーを除いた行数)にシート作成 //if (xlsRowCnt == 40) //{ // pageCnt++; // if (pageCnt <= maxPage) // { // xlsRowCnt = 3; // // コンピュータ名、日付、ページ数を取得 // strHeader = "( " + strComputerName + " )" + strSpace + strNow + strSpace + // pageCnt.ToString() + " / " + maxPage.ToString(); // // ヘッダーシートのコピー、ヘッダー部の指定 // sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, strHeader); // } //} // 最終行を出力した後、合計行を出力 if (maxRowCnt == rowCnt) { // セル結合 currentsheet.Range(xlsRowCnt + 1, 1, xlsRowCnt + 1, 2).Merge(); currentsheet.Cell(xlsRowCnt + 1, 1).Value = "◆◆◆ 合 計 ◆◆◆"; currentsheet.Cell(xlsRowCnt + 1, 3).Value = string.Format("{0,14:#,0}", decKingaku[0]); currentsheet.Cell(xlsRowCnt + 1, 4).Value = string.Format("{0,14:#,0}", decKingaku[1]); currentsheet.Cell(xlsRowCnt + 1, 5).Value = string.Format("{0,14:#,0}", decKingaku[2]); currentsheet.Cell(xlsRowCnt + 1, 6).Value = string.Format("{0,14:#,0}", decKingaku[3]); currentsheet.Cell(xlsRowCnt + 1, 7).Value = string.Format("{0,14:#,0}", decKingaku[4]); currentsheet.Cell(xlsRowCnt + 1, 8).Value = string.Format("{0,14:#,0}", decKingaku[5]); currentsheet.Cell(xlsRowCnt + 1, 9).Value = string.Format("{0,14:#,0}", decKingaku[6]); currentsheet.Cell(xlsRowCnt + 1, 10).Value = string.Format("{0,14:#,0}", decKingaku[7]); currentsheet.Cell(xlsRowCnt + 1, 11).Value = string.Format("{0,14:#,0}", decKingaku[8]); currentsheet.Cell(xlsRowCnt + 1, 12).Value = string.Format("{0,14:#,0}", decKingaku[9]); currentsheet.Cell(xlsRowCnt + 1, 13).Value = string.Format("{0,14:#,0}", decKingaku[10]); currentsheet.Cell(xlsRowCnt + 1, 14).Value = string.Format("{0,14:#,0}", decKingaku[11]); currentsheet.Cell(xlsRowCnt + 1, 15).Value = ""; currentsheet.Cell(xlsRowCnt + 1, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; currentsheet.Cell(xlsRowCnt + 1, 3).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 6).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 7).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 8).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 9).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 10).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 11).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 12).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 13).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; currentsheet.Cell(xlsRowCnt + 1, 14).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; // 1行分のセルの周囲に罫線を引く currentsheet.Range(xlsRowCnt + 1, 1, xlsRowCnt + 1, 15).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(createPdf(strOutXlsFile, strDateTime)); } catch { throw; } finally { // Workフォルダの全ファイルを取得 string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories); // Workフォルダ内のファイル削除 foreach (string filepath in files) { //File.Delete(filepath); } } }
private string printSakuseiList() { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strFilePath = "./Template/H0210_MitsumoriSakuseiList.xlsx"; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); try { this.Cursor = Cursors.WaitCursor; // excelのインスタンス生成 XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled); IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート //IXLWorksheet templatesheet2 = workbook.Worksheet(2); // テンプレートシート(明細行のみ) IXLWorksheet currentsheet = null; // 処理中シート int pageCnt = 0; // ページ(シート枚数)カウント int xlsRowCnt = 11; // Excel出力行カウント(開始は出力行) templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); string strKikan = ""; if (!string.IsNullOrWhiteSpace(txtFrom.Text)) { strKikan += txtFrom.Text; if (!string.IsNullOrWhiteSpace(txtTo.Text)) { strKikan += "~"; } } if (!string.IsNullOrWhiteSpace(txtTo.Text)) { strKikan += txtTo.Text; } currentsheet.Cell(8, "B").Value = strKikan; for (int i = 0; i < gridMitsu.RowCount; i++) { if (xlsRowCnt == 55) { pageCnt++; xlsRowCnt = 11; // テンプレートシート(明細行のみ)からコピー templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); } currentsheet.Cell(xlsRowCnt, "A").Value = getCellValue(gridMitsu[7, i], false); currentsheet.Cell(xlsRowCnt, "C").Value = getCellValue(gridMitsu[3, i], false); currentsheet.Cell(xlsRowCnt, "D").Value = getCellValue(gridMitsu[2, i], false); currentsheet.Cell(xlsRowCnt, "E").Value = getCellValue(gridMitsu[4, i], false); currentsheet.Cell(xlsRowCnt, "F").Value = getCellValue(gridMitsu[5, i], false); xlsRowCnt++; } // テンプレートシート削除 templatesheet1.Delete(); //templatesheet2.Delete(); // ページ数設定 for (pageCnt = 1; pageCnt <= workbook.Worksheets.Count; pageCnt++) { workbook.Worksheet(pageCnt).Cell("F3").Value = "'" + pageCnt.ToString() + "/" + (workbook.Worksheets.Count).ToString("0"); // No. } // workbookを保存 string strOutXlsFile = strWorkPath + strDateTime + ".xlsx"; //string strOutXlsFile = strWorkPath + "_" + txtMNum.Text + ".xlsx"; workbook.SaveAs(strOutXlsFile); // workbookを解放 workbook.Dispose(); // PDF化の処理 CreatePdf pdf = new CreatePdf(); return(pdf.createPdf(strOutXlsFile, strDateTime, 0)); //return pdf.createPdf(strOutXlsFile, "_" + txtMNum.Text, 0); } catch { throw; } finally { //// Workフォルダの全ファイルを取得 //string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories); //// Workフォルダ内のファイル削除 //foreach (string filepath in files) //{ // System.IO.File.Delete(filepath); //} this.Cursor = Cursors.Default; } }
public string printReport(DataTable dt, string stJuchusha, string stTokui, string stFrom, string stTo, string stKata, string stChuban, int sKind) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strFilePath = "./Template/D0360_JuchuzanKakunin.xlsx"; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); try { // excelのインスタンス生成 #region XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled); IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート IXLWorksheet currentsheet = null; // 処理中シート int pageCnt = 0; // ページ(シート枚数)カウント int xlsRowCnt = 7; // Excel出力行カウント(開始は出力行) templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); #endregion // 4行目記載文字列作成 #region string sPrm = "受注者:"; if (sKind == 1) { sPrm = "発注者:"; } if (!string.IsNullOrWhiteSpace(stJuchusha)) { sPrm += stJuchusha; } if (sKind == 1) { sPrm += " 仕入先:"; } else { sPrm += " 得意先:"; } if (!string.IsNullOrWhiteSpace(stTokui)) { sPrm += stTokui; } sPrm += " 納期範囲:"; if (!string.IsNullOrWhiteSpace(stFrom)) { sPrm += stFrom; } sPrm += "~"; if (!string.IsNullOrWhiteSpace(stTo)) { sPrm += stTo; } sPrm += " 品名・型番:"; if (!string.IsNullOrWhiteSpace(stKata)) { sPrm += stKata; } sPrm += " 注番:"; if (!string.IsNullOrWhiteSpace(stKata)) { sPrm += stChuban; } #endregion currentsheet.Cell(4, "A").Value = sPrm; if (sKind == 1) { currentsheet.Cell(6, "A").Value = "発注日"; currentsheet.Cell(6, "K").Value = "仕入済"; } // ClosedXMLで1行ずつExcelに出力 for (int i = 0; i < dt.Rows.Count; i++) { if (xlsRowCnt >= 67) { pageCnt++; xlsRowCnt = 7; // テンプレートシートからコピー templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); currentsheet.Cell(4, "A").Value = sPrm; if (sKind == 1) { currentsheet.Cell(6, "A").Value = "発注日"; currentsheet.Cell(6, "K").Value = "仕入済"; } } if (sKind != 1) { currentsheet.Cell(xlsRowCnt, "A").Value = "'" + dt.Rows[i]["受注日"].ToString().Substring(2, 8); currentsheet.Cell(xlsRowCnt, "B").Value = "'" + dt.Rows[i]["納期"].ToString().Substring(2, 8); currentsheet.Cell(xlsRowCnt, "C").Value = "'" + dt.Rows[i]["注番"]; currentsheet.Cell(xlsRowCnt, "D").Value = dt.Rows[i]["メーカー"]; currentsheet.Cell(xlsRowCnt, "E").Value = "'" + dt.Rows[i]["品名"]; currentsheet.Cell(xlsRowCnt, "F").Value = dt.Rows[i]["受注数"]; currentsheet.Cell(xlsRowCnt, "G").Value = dt.Rows[i]["売上単価"]; currentsheet.Cell(xlsRowCnt, "H").Value = dt.Rows[i]["売上金額"]; currentsheet.Cell(xlsRowCnt, "I").Value = dt.Rows[i]["仕入単価"]; currentsheet.Cell(xlsRowCnt, "J").Value = dt.Rows[i]["仕入金額"]; currentsheet.Cell(xlsRowCnt, "K").Value = dt.Rows[i]["売上済"]; currentsheet.Cell(xlsRowCnt, "L").Value = dt.Rows[i]["状態"]; currentsheet.Cell(xlsRowCnt, "M").Value = dt.Rows[i]["受注番号"]; currentsheet.Cell(xlsRowCnt, "N").Value = dt.Rows[i]["得意先名"]; currentsheet.Cell(xlsRowCnt + 1, "N").Value = dt.Rows[i]["仕入先名"]; currentsheet.Cell(xlsRowCnt, "O").Value = dt.Rows[i]["受注者"]; } else { currentsheet.Cell(xlsRowCnt, "A").Value = "'" + dt.Rows[i]["発注日"].ToString().Substring(2, 8); currentsheet.Cell(xlsRowCnt, "B").Value = "'" + dt.Rows[i]["納期"].ToString().Substring(2, 8); currentsheet.Cell(xlsRowCnt, "C").Value = "'" + dt.Rows[i]["注番"]; currentsheet.Cell(xlsRowCnt, "D").Value = dt.Rows[i]["メーカー"]; currentsheet.Cell(xlsRowCnt, "E").Value = "'" + dt.Rows[i]["品名"]; currentsheet.Cell(xlsRowCnt, "F").Value = dt.Rows[i]["受注数"]; currentsheet.Cell(xlsRowCnt, "G").Value = dt.Rows[i]["売上単価"]; currentsheet.Cell(xlsRowCnt, "H").Value = dt.Rows[i]["売上金額"]; currentsheet.Cell(xlsRowCnt, "I").Value = dt.Rows[i]["仕入単価"]; currentsheet.Cell(xlsRowCnt, "J").Value = dt.Rows[i]["仕入金額"]; currentsheet.Cell(xlsRowCnt, "K").Value = dt.Rows[i]["仕入済"]; currentsheet.Cell(xlsRowCnt, "L").Value = dt.Rows[i]["状態"]; currentsheet.Cell(xlsRowCnt, "M").Value = dt.Rows[i]["受注番号"]; currentsheet.Cell(xlsRowCnt, "N").Value = dt.Rows[i]["得意先名"]; currentsheet.Cell(xlsRowCnt + 1, "N").Value = dt.Rows[i]["仕入先名"]; currentsheet.Cell(xlsRowCnt, "O").Value = dt.Rows[i]["発注者"]; } xlsRowCnt = xlsRowCnt + 2; } for (int i = xlsRowCnt; i < 67; i++) { currentsheet.Row(xlsRowCnt).Clear(); currentsheet.Row(xlsRowCnt).Delete(); } currentsheet.Row(xlsRowCnt).InsertRowsAbove(1); //currentsheet.Cell(xlsRowCnt, "A").Style.Border.SetTopBorder(XLBorderStyleValues.Thin); //currentsheet.Cell(xlsRowCnt, "A").Style.Border.SetLeftBorder(XLBorderStyleValues.Thin); //currentsheet.Cell(xlsRowCnt, "A").Style.Border.SetRightBorder(XLBorderStyleValues.Thin); //currentsheet.Cell(xlsRowCnt, "A").Style.Border.SetBottomBorder(XLBorderStyleValues.Thin); currentsheet.Cell(xlsRowCnt, "H").Value = (dt.Compute("Sum(売上金額)", null)).ToString(); currentsheet.Cell(xlsRowCnt, "J").Value = (dt.Compute("Sum(仕入金額)", null)).ToString(); // テンプレートシート削除 templatesheet1.Delete(); // ページ数設定 for (pageCnt = 1; pageCnt <= workbook.Worksheets.Count; pageCnt++) { string s = "'" + pageCnt.ToString() + "/" + (workbook.Worksheets.Count).ToString(); workbook.Worksheet(pageCnt).Cell("O1").Value = s; // No. } // workbookを保存 string strOutXlsFile = strWorkPath + strDateTime + ".xlsx"; workbook.SaveAs(strOutXlsFile); // workbookを解放 workbook.Dispose(); // ロゴ貼り付け処理 // PDF化の処理 CreatePdf pdf = new CreatePdf(); return(pdf.createPdf(strOutXlsFile, strDateTime, 0)); } catch { throw; } finally { // Workフォルダの全ファイルを取得 string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories); // Workフォルダ内のファイル削除 foreach (string filepath in files) { //File.Delete(filepath); } } }
public void AddWorksheet(IXLWorksheet worksheet) { worksheet.CopyTo(this, worksheet.Name); }
///// <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="dtSyohingunUriageSiire"> /// 仕入推移表のデータテーブル</param> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtSyohingunUriageSiire) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); try { string strHeader = ""; string strNow = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); string strSpace = " "; string strComputerName = System.Windows.Forms.SystemInformation.ComputerName; // excelのインスタンス生成 XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled); // ワークブックのデフォルトフォント、フォントサイズの指定 XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝"; XLWorkbook.DefaultStyle.Font.FontSize = 9; IXLWorksheet worksheet = workbook.Worksheets.Add("Header"); IXLWorksheet headersheet = worksheet; // ヘッダーシート IXLWorksheet currentsheet = worksheet; // 処理中シート //Linqで必要なデータをselect var outDataAll = dtSyohingunUriageSiire.AsEnumerable() .Select(dat => new { daibunruiCd = dat["大分類コード"], daibunruiName = dat["大分類名"], chubunruiName = dat["中分類名"], kamikiUriagegaku = (decimal)dat["上期売上額"], kamikiSiiregaku = (decimal)dat["上期仕入額"], simokiUriagegaku = (decimal)dat["下期売上額"], simokiSiiregaku = (decimal)dat["下期仕入額"], goukeiUriagegaku = (decimal)dat["合計売上額"], goukeiSiiregaku = (decimal)dat["合計仕入額"], }).ToList(); // linqで売上額(上期、下期、合計)、仕入額(上期、下期、合計)を算出 decimal[] decKingaku = new decimal[13]; decKingaku[0] = outDataAll.Select(gokei => gokei.kamikiUriagegaku).Sum(); decKingaku[1] = outDataAll.Select(gokei => gokei.kamikiSiiregaku).Sum(); decKingaku[2] = outDataAll.Select(gokei => gokei.simokiUriagegaku).Sum(); decKingaku[3] = outDataAll.Select(gokei => gokei.simokiSiiregaku).Sum(); decKingaku[4] = outDataAll.Select(gokei => gokei.goukeiUriagegaku).Sum(); decKingaku[5] = outDataAll.Select(gokei => gokei.goukeiSiiregaku).Sum(); // 大分類計(小計) var daibunruiGoukei = from tbl in dtSyohingunUriageSiire.AsEnumerable() group tbl by tbl.Field <string>("大分類コード") into g select new { section = g.Key, count = g.Count(), kamikiUriagegaku = g.Sum(p => p.Field <decimal>("上期売上額")), kamikiSiiregaku = g.Sum(p => p.Field <decimal>("上期仕入額")), simokiUriagegaku = g.Sum(p => p.Field <decimal>("下期売上額")), simokiSiiregaku = g.Sum(p => p.Field <decimal>("下期仕入額")), goukeiUriagegaku = g.Sum(p => p.Field <decimal>("合計売上額")), goukeiSiiregaku = g.Sum(p => p.Field <decimal>("合計仕入額")), }; // 大分類計(小計)の売上額(上期、下期、合計)、仕入額(上期、下期、合計)を算出 decimal[,] decKingakuDaibunrui = new decimal[daibunruiGoukei.Count(), 13]; for (int cnt = 0; cnt < daibunruiGoukei.Count(); cnt++) { decKingakuDaibunrui[cnt, 0] = daibunruiGoukei.ElementAt(cnt).kamikiUriagegaku; decKingakuDaibunrui[cnt, 1] = daibunruiGoukei.ElementAt(cnt).kamikiSiiregaku; decKingakuDaibunrui[cnt, 2] = daibunruiGoukei.ElementAt(cnt).simokiUriagegaku; decKingakuDaibunrui[cnt, 3] = daibunruiGoukei.ElementAt(cnt).simokiSiiregaku; decKingakuDaibunrui[cnt, 4] = daibunruiGoukei.ElementAt(cnt).goukeiUriagegaku; decKingakuDaibunrui[cnt, 5] = daibunruiGoukei.ElementAt(cnt).goukeiSiiregaku; } // リストをデータテーブルに変換 DataTable dtChkList = this.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 += daibunruiGoukei.Count() + 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 daibunruiCnt = 0; int daibunruiRowCnt = 0; string strSiireCode = ""; // ClosedXMLで1行ずつExcelに出力 foreach (DataRow drSyohingunUriageSiire 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 = 14; headersheet.Range("A1", "H1").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.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.Column(1).Width = 20; headersheet.Column(2).Width = 20; headersheet.Column(3).Width = 20; headersheet.Column(4).Width = 20; headersheet.Column(5).Width = 20; headersheet.Column(6).Width = 20; headersheet.Column(7).Width = 20; headersheet.Column(8).Width = 20; // 印刷体裁(B4横、印刷範囲) headersheet.PageSetup.PaperSize = XLPaperSize.B4Paper; headersheet.PageSetup.PageOrientation = XLPageOrientation.Landscape; // ヘッダー部の指定(番号) headersheet.PageSetup.Header.Left.AddText("(№65)"); // ヘッダーシートからコピー headersheet.CopyTo("Page1"); currentsheet = workbook.Worksheet(2); // ヘッダー部の指定(コンピュータ名、日付、ページ数を出力) strHeader = "( " + strComputerName + " )" + strSpace + strNow + strSpace + pageCnt.ToString() + " / " + maxPage.ToString(); currentsheet.PageSetup.Header.Right.AddText(strHeader); } // 大分類名出力 if (daibunruiRowCnt == 0) { currentsheet.Cell(xlsRowCnt, 1).Value = drSyohingunUriageSiire[1]; } // 1セルずつデータ出力 for (int colCnt = 2; colCnt < maxColCnt; colCnt++) { string str = drSyohingunUriageSiire[colCnt].ToString(); // 金額セルの処理 if (colCnt >= 3 && colCnt <= 8) { // 3桁毎に","を挿入する str = string.Format("{0:#,0}", decimal.Parse(str)); IXLCell kingakuCell = currentsheet.Cell(xlsRowCnt, colCnt); kingakuCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; kingakuCell.Value = str; } 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); // 35行毎(ヘッダーを除いた行数)にシート作成 if (xlsRowCnt == 38) { pageCnt++; if (pageCnt <= maxPage) { xlsRowCnt = 3; // コンピュータ名、日付、ページ数を取得 strHeader = "( " + strComputerName + " )" + strSpace + strNow + strSpace + pageCnt.ToString() + " / " + maxPage.ToString(); // ヘッダーシートのコピー、ヘッダー部の指定 sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, strHeader); } } // 大分類計(小計)を出力 daibunruiRowCnt++; if (daibunruiGoukei.ElementAt(daibunruiCnt).count == daibunruiRowCnt) { xlsRowCnt++; // セル結合、中央揃え IXLCell tantocell = currentsheet.Cell(xlsRowCnt, 1); currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 2).Merge(); tantocell.Value = "◆ 小 計 ◆"; tantocell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left; // 金額セルの処理(3桁毎に","を挿入する) for (int cnt = 0; cnt < 6; cnt++) { IXLCell kingakuCell = currentsheet.Cell(xlsRowCnt, cnt + 3); kingakuCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; kingakuCell.Value = string.Format("{0:#,0}", decKingakuDaibunrui[daibunruiCnt, cnt]); } // 1行分のセルの周囲に罫線を引く currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 8).Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); daibunruiCnt++; daibunruiRowCnt = 0; } // 35行毎(ヘッダーを除いた行数)にシート作成 if (xlsRowCnt == 38) { pageCnt++; if (pageCnt <= maxPage) { xlsRowCnt = 3; // コンピュータ名、日付、ページ数を取得 strHeader = "( " + strComputerName + " )" + strSpace + strNow + strSpace + pageCnt.ToString() + " / " + maxPage.ToString(); // ヘッダーシートのコピー、ヘッダー部の指定 sheetCopy(ref workbook, ref headersheet, ref currentsheet, pageCnt, strHeader); } } rowCnt++; xlsRowCnt++; } // 最終行を出力した後、合計行を出力 if (dtChkList.Rows.Count > 0) { // セル結合、中央揃え IXLCell sumcell = currentsheet.Cell(xlsRowCnt, 1); currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 2).Merge(); sumcell.Value = "◆ 合 計 ◆"; sumcell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left; // 金額セルの処理(3桁毎に","を挿入する) for (int cnt = 0; cnt < 6; cnt++) { IXLCell kingakuCell = currentsheet.Cell(xlsRowCnt, cnt + 3); kingakuCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right; kingakuCell.Value = string.Format("{0:#,0}", decKingaku[cnt]); } // 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(createPdf(strOutXlsFile, strDateTime)); } catch (Exception ex) { new CommonException(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="dtSeikyuMeisai"> /// 請求明細書のデータテーブル</param> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtSeikyuMeisai) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strFilePath = "./Template/B0420_SeikyuMeisaishoPrint.xlsx"; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); try { // excelのインスタンス生成 XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled); IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート IXLWorksheet templatesheet2 = workbook.Worksheet(2); // テンプレートシート(明細行のみ) IXLWorksheet currentsheet = null; // 処理中シート int pageCnt = 0; // ページ(シート枚数)カウント int xlsRowCnt = 21; // Excel出力行カウント(開始は出力行) Boolean blnSheetCreate = false; string strTokuisakiCd = ""; // ClosedXMLで1行ずつExcelに出力 foreach (DataRow drSeikyuMeisai in dtSeikyuMeisai.Rows) { // 得意先コードが前行と同じ場合、かつ、43行目になった場合、テンプレートシート(明細行のみ)作成 if (strTokuisakiCd.Equals(drSeikyuMeisai[0].ToString()) && xlsRowCnt == 43) { pageCnt++; xlsRowCnt = 15; blnSheetCreate = true; // テンプレートシート(明細行のみ)からコピー templatesheet2.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); } // 得意先コードが前行と違う場合、テンプレートシート作成 if (!strTokuisakiCd.Equals(drSeikyuMeisai[0].ToString())) { strTokuisakiCd = drSeikyuMeisai[0].ToString(); pageCnt++; xlsRowCnt = 21; blnSheetCreate = true; // テンプレートシートからコピー templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); currentsheet.Cell("A18").Value = drSeikyuMeisai[7].ToString(); // 前月御請求額 currentsheet.Cell("C18").Value = drSeikyuMeisai[8].ToString(); // 当月入金額 currentsheet.Cell("F18").Value = drSeikyuMeisai[9].ToString(); // 御支払残高 currentsheet.Cell("G18").Value = drSeikyuMeisai[10].ToString(); // 当月御買上額 currentsheet.Cell("H17").Value = drSeikyuMeisai[11].ToString(); // 内税 currentsheet.Cell("H18").Value = drSeikyuMeisai[12].ToString(); // 消費税額 currentsheet.Cell("I18").Value = drSeikyuMeisai[13].ToString(); // 当月御請求額 } // 最初の明細行の場合 if (blnSheetCreate) { blnSheetCreate = false; currentsheet.Cell("B4").Value = drSeikyuMeisai[2].ToString(); // 郵便番号 currentsheet.Cell("B6").Value = drSeikyuMeisai[3].ToString(); // 住所1 currentsheet.Cell("B8").Value = drSeikyuMeisai[4].ToString(); // 住所2 currentsheet.Cell("B10").Value = drSeikyuMeisai[1].ToString(); // 顧客名 currentsheet.Cell("H6").Value = drSeikyuMeisai[5].ToString(); // 請求年月日 } // currentsheet.Cell(xlsRowCnt, "A").Value = drSeikyuMeisai[14].ToString(); // 日付 currentsheet.Cell(xlsRowCnt, "B").Value = drSeikyuMeisai[15].ToString(); // 伝票No. currentsheet.Cell(xlsRowCnt, "D").Value = drSeikyuMeisai[18].ToString(); // 取区 currentsheet.Cell(xlsRowCnt, "E").Value = drSeikyuMeisai[19].ToString(); // 商品名 currentsheet.Cell(xlsRowCnt, "J").Value = drSeikyuMeisai[20].ToString(); // 数量 currentsheet.Cell(xlsRowCnt, "K").Value = drSeikyuMeisai[21].ToString(); // 単価 currentsheet.Cell(xlsRowCnt, "N").Value = drSeikyuMeisai[22].ToString(); // 金額 currentsheet.Cell(xlsRowCnt, "P").Value = drSeikyuMeisai[23].ToString(); // 入金金額 currentsheet.Cell(xlsRowCnt, "Q").Value = "'" + drSeikyuMeisai[24].ToString(); // 備考 xlsRowCnt++; } // テンプレートシート削除 templatesheet1.Delete(); templatesheet2.Delete(); // ページ数設定 for (pageCnt = 1; pageCnt <= workbook.Worksheets.Count; pageCnt++) { workbook.Worksheet(pageCnt).Cell("R2").Value = pageCnt.ToString(); // No. } // workbookを保存 string strOutXlsFile = strWorkPath + strDateTime + ".xlsx"; workbook.SaveAs(strOutXlsFile); // workbookを解放 workbook.Dispose(); // ロゴ貼り付け処理 CreatePdf pdf = new CreatePdf(); int[] topRow = { 5 }; int[] leftColumn = { 15 }; pdf.logoPaste(strOutXlsFile, topRow, leftColumn, 200, 850, 57); // PDF化の処理 return(pdf.createPdf(strOutXlsFile, strDateTime, 0)); } catch { throw; } finally { // Workフォルダの全ファイルを取得 string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories); // Workフォルダ内のファイル削除 foreach (string filepath in files) { //File.Delete(filepath); } } }
/// ----------------------------------------------------------------------------- /// <summary> /// DataTableをもとにxlsxファイルを作成し、PDFファイルを作成 /// </summary> /// <param name="dtHachu">発注のデータテーブル</param> /// <returns>結合PDFファイル</returns> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtHachu) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strFilePath = "./Template/A0120_ChumonShoPrint.xlsx"; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); try { // excelのインスタンス生成 XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled); IXLWorksheet templatesheet = workbook.Worksheet(1); // テンプレートシート IXLWorksheet currentsheet = null; // 処理中シート int pageCnt = 0; // ページ(シート枚数)カウント int xlsRowCnt = 11; // Excel出力行カウント(開始は出力行) Boolean blnSheetCreate = false; string strTorihikisakiCd = ""; string strHachusha = ""; // ClosedXMLで1行ずつExcelに出力 foreach (DataRow drHachu in dtHachu.Rows) { // 取引先コードが前行と違う場合、テンプレートシート作成 if (!strTorihikisakiCd.Equals(drHachu[1].ToString())) { // 取引先コードが空でない場合 if (!strTorihikisakiCd.Equals("")) { // 明細行が17行、18行の場合 if (xlsRowCnt == 28 || xlsRowCnt == 29) { // 不要な明細行、発注者行を削除 currentsheet.Rows(xlsRowCnt, 33).Delete(); pageCnt++; xlsRowCnt = 11; // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー templatesheet.CopyTo(templatesheet.Name); } // 不要な明細行を削除 currentsheet.Rows(xlsRowCnt, 28).Delete(); // 発注者 currentsheet.Cell(xlsRowCnt + 2, "K").Value = strHachusha; currentsheet.Range(xlsRowCnt + 2, 11, xlsRowCnt + 4, 11).Merge(); } strTorihikisakiCd = drHachu[1].ToString(); // 取引先コード strHachusha = drHachu[11].ToString(); // 発注者 pageCnt++; xlsRowCnt = 11; blnSheetCreate = true; // テンプレートシートからコピー templatesheet.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); } // 明細行が19行になった場合 if (xlsRowCnt == 29) { // 発注者行を削除 currentsheet.Rows(xlsRowCnt, 33).Delete(); pageCnt++; xlsRowCnt = 11; // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー templatesheet.CopyTo(templatesheet.Name); } // 最初の明細行の場合 if (blnSheetCreate) { blnSheetCreate = false; currentsheet.Cell("A4").Value = drHachu[2].ToString(); // 取引先名 currentsheet.Cell("B6").Value = drHachu[3].ToString(); // 電話番号 currentsheet.Cell("B7").Value = drHachu[4].ToString(); // FAX currentsheet.Cell("E3").Value = drHachu[0].ToString(); // 年月日 currentsheet.Cell("K3").Value = drHachu[13].ToString(); // 営業所名 } currentsheet.Cell(xlsRowCnt, "A").Value = drHachu[5].ToString(); // 商品名 currentsheet.Cell(xlsRowCnt, "E").Value = drHachu[6].ToString(); // 数量 currentsheet.Cell(xlsRowCnt, "F").Value = drHachu[7].ToString(); // 単価 currentsheet.Cell(xlsRowCnt, "G").Value = drHachu[8].ToString(); // 金額 currentsheet.Cell(xlsRowCnt, "I").Value = drHachu[9].ToString(); // 納期 currentsheet.Cell(xlsRowCnt, "J").Value = drHachu[10].ToString(); // 注文番号 currentsheet.Cell(xlsRowCnt, "K").Value = "'" + drHachu[12].ToString(); // 備考 xlsRowCnt++; } // 発注データがある場合 if (dtHachu.Rows.Count > 0) { // 明細行が17行、18行の場合 if (xlsRowCnt == 28 || xlsRowCnt == 29) { // 不要な明細行、発注者行を削除 currentsheet.Rows(xlsRowCnt, 33).Delete(); pageCnt++; xlsRowCnt = 11; // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー templatesheet.CopyTo(templatesheet.Name); //this.sheetCopy(ref workbook, ref currentsheet, templatesheet, pageCnt); } // 不要な明細行を削除 currentsheet.Rows(xlsRowCnt, 28).Delete(); // 発注者 currentsheet.Cell(xlsRowCnt + 2, "K").Value = strHachusha; currentsheet.Range(xlsRowCnt + 2, 11, xlsRowCnt + 4, 11).Merge(); } // テンプレートシート削除 templatesheet.Delete(); // workbookを保存 string strOutXlsFile = strWorkPath + strDateTime + ".xlsx"; workbook.SaveAs(strOutXlsFile); // workbookを解放 workbook.Dispose(); // CreatePdfのインスタンス生成 CreatePdf pdf = new CreatePdf(); // ロゴ貼り付け処理 int[] topRow = { 2 }; int[] leftColumn = { 8 }; pdf.logoPaste(strOutXlsFile, topRow, leftColumn, 200, 850, 57); // PDF化の処理 return(pdf.createPdf(strOutXlsFile, strDateTime)); } catch { throw; } finally { //// Workフォルダの作成日時ファイルを取得 //string[] files = Directory.GetFiles(strWorkPath, strDateTime + "*", SearchOption.AllDirectories); //// Workフォルダ内のファイル削除 //foreach (string filepath in files) //{ // File.Delete(filepath); //} } }
public static async void CreateReport(DateTime dateStart, DateTime dateEnd, string type, string Header) { int nasosCount = type == "MNU" ? 3 : 2; string typeRunGG = "GG_RUN"; string FileNameFull = String.Format("c:/wrk/test{0}.xlsx", type); XLWorkbook wbFull = new XLWorkbook(); IXLWorksheet sheetSvodGG = null; int stepDays = 7; int[] GGArr = new int[] { 1, 3, 4, 5, 7, 2, 6, 9, 10 }; for (int ggInd = 1; ggInd <= 9; ggInd++) { int ggNum = GGArr[ggInd - 1]; string FileNameTem = String.Format("c:/wrk/template3.xlsx", nasosCount); string FileName = String.Format("c:/wrk/test{0}_GG{1}.xlsx", type, ggNum); try { File.Delete(FileName); File.Copy(FileNameTem, FileName); } catch { } XLWorkbook wb = new XLWorkbook(FileName); IXLWorksheet sheetTemp = null; bool ok = wb.TryGetWorksheet("GGTemplate", out sheetTemp); if (nasosCount == 2) { sheetTemp.Range(1, 18, 20, 30).Clear(); sheetTemp.Range(1, 4, 1, 17).Merge(); } IXLWorksheet sheet = sheetTemp.CopyTo(String.Format("GG {0}", ggNum)); if (ggInd == 1) { sheetSvodGG = sheetTemp.CopyTo(wbFull, "Свод"); sheetSvodGG.Cell(1, 1).Value = "ГГ"; sheetSvodGG.Cell(1, 4).Value = "ГГ в работе или простое"; sheetSvodGG.Range(sheetSvodGG.Cell(1, 1), sheetSvodGG.Cell(4, 100)).CopyTo(sheetSvodGG.Cell(4 + 13, 1)); sheetSvodGG.Range(sheetSvodGG.Cell(1, 1), sheetSvodGG.Cell(4, 100)).CopyTo(sheetSvodGG.Cell(8 + 25, 1)); sheetSvodGG.Cell(4 + 13, 4).Value = "ГГ в работе"; sheetSvodGG.Cell(8 + 25, 4).Value = "ГГ в простое"; } sheetTemp.Delete(); IXLWorksheet sheetSvod = wb.AddWorksheet("GG SVOD"); int RowCount = (int)((dateEnd - dateStart).TotalDays / stepDays + 7); sheet.Range(sheet.Cell(1, 1), sheet.Cell(4, 100)).CopyTo(sheet.Cell(RowCount + 1, 1)); sheet.Range(sheet.Cell(1, 1), sheet.Cell(4, 100)).CopyTo(sheet.Cell(RowCount * 2 + 1, 1)); sheet.Cell(1, 4).Value = "ГГ в работе или простое"; sheet.Cell(RowCount + 1, 4).Value = "ГГ в работе"; sheet.Cell(RowCount * 2 + 1, 4).Value = "ГГ в простое"; DateTime ds = dateStart.AddSeconds(0); int rowIndex = 0; int weekNumber = 0; while (ds < dateEnd) { DateTime de = ds.AddDays(7); if (type == "MNU" && ds.Year >= 2020) { typeRunGG = "GG_UST"; } else { typeRunGG = "GG_RUN"; } Logger.Info(String.Format("{0}: {1}", ggNum, de)); DiagNasos diag = new DiagNasos(ds, de, ggNum); diag.ReadData(type, nasosCount, typeRunGG); Logger.Info("read"); ok = wb.TryGetWorksheet("GGFullData", out sheetTemp); IXLWorksheet shFull = sheetTemp.CopyTo(String.Format("GG{0}_{1}", ggNum, ds.ToString("ddMM"))); int row = 2; foreach (PuskStopData pd in diag.FullNasosData) { row++; shFull.Cell(row, 1).Value = pd.TimeOn; shFull.Cell(row, 2).Value = pd.TimeOff; shFull.Cell(row, 3).Value = pd.TypeData; shFull.Cell(row, 4).Value = pd.ValueStart; shFull.Cell(row, 5).Value = pd.ValueEnd; if (pd.PrevRecord != null) { shFull.Cell(row, 6).Value = pd.PrevRecord.TimeOff; } /*if (pd.NextRecord != null) * shFull.Cell(row, 7).Value = pd.NextRecord.TimeOn;*/ shFull.Cell(row, 8).Value = pd.Comment; shFull.Cell(row, 9).Value = (pd.TimeOff - pd.TimeOn).TotalSeconds / 60; if (pd.PrevRecord != null) { shFull.Cell(row, 10).Value = -(pd.PrevRecord.TimeOff - pd.TimeOn).TotalSeconds / 60; } } sheetSvod.Cell(RowCount * 1 - 1, 1).Value = "ГГ в работе. время простоя насосов"; fillHorDouble(sheetSvod, RowCount * 1 + weekNumber, "неделя " + ds.ToString(), diag.NasosRunGG["SVOD"].StayInfo.sorted, 60); sheetSvod.Cell(RowCount * 2 - 1, 1).Value = "ГГ в работе. время работы насосов"; fillHorDouble(sheetSvod, RowCount * 2 + weekNumber, "неделя " + ds.ToString(), diag.NasosRunGG["SVOD"].RunInfo.sorted, 60); sheetSvod.Cell(RowCount * 3 - 1, 1).Value = "ГГ в работе. скорость набора уровня (потери давления)"; fillHorDouble(sheetSvod, RowCount * 3 + weekNumber, "неделя " + ds.ToString(), diag.NasosRunGG["SVOD"].VInfo.sorted); sheetSvod.Cell(RowCount * 4 - 1, 1).Value = "ГГ в простое. время простоя насосов"; fillHorDouble(sheetSvod, RowCount * 4 + weekNumber, "неделя " + ds.ToString(), diag.NasosStopGG["SVOD"].StayInfo.sorted, 60); sheetSvod.Cell(RowCount * 5 - 1, 1).Value = "ГГ в простое. время работы насосов"; fillHorDouble(sheetSvod, RowCount * 5 + weekNumber, "неделя " + ds.ToString(), diag.NasosStopGG["SVOD"].RunInfo.sorted, 60); sheetSvod.Cell(RowCount * 6 - 1, 1).Value = "ГГ в простое. скорость набора уровня (потери давления)"; fillHorDouble(sheetSvod, RowCount * 6 + weekNumber, "неделя " + ds.ToString(), diag.NasosStopGG["SVOD"].VInfo.sorted); for (int i = 0; i < 3; i++) { Dictionary <string, AnalizeNasosData> data = i == 0 ? diag.NasosGG : i == 1 ? diag.NasosRunGG : diag.NasosStopGG; row = 5 + RowCount * i + rowIndex; sheet.Cell(row, 1).Value = ds; sheet.Cell(row, 2).Value = diag.timeGGRun / 3600; sheet.Cell(row, 2).Style.NumberFormat.Format = "0.0"; sheet.Cell(row, 3).Value = diag.timeGGStop / 3600; sheet.Cell(row, 3).Style.NumberFormat.Format = "0.0"; sheet.Cell(row, 4).Value = getVal(data["SVOD"].RunInfo.Count); sheet.Cell(row, 4).Style.NumberFormat.Format = "0"; sheet.Cell(row, 5).Value = getVal(data["SVOD"].RunInfo.Count / data["SVOD"].sumTime * 3600); sheet.Cell(row, 5).Style.NumberFormat.Format = "0.0"; sheet.Cell(row, 6).Value = getVal(data["SVOD"].RunInfo.MathO / 60); sheet.Cell(row, 6).Style.NumberFormat.Format = "0.0"; sheet.Cell(row, 7).Value = getVal(data["SVOD"].StayInfo.MathO / 60); sheet.Cell(row, 7).Style.NumberFormat.Format = "0.0"; double sumRun = data["SVOD"].RunInfo.filtered.Sum(); double sumStay = data["SVOD"].StayInfo.filtered.Sum(); if (sumStay > 0) { sheet.Cell(row, 8).Value = getVal(sumRun / sumStay); sheet.Cell(row, 8).Style.NumberFormat.Format = "0.00"; } sheet.Cell(row, 9).Value = getVal(data["SVOD"].VInfo.MathO * 3600); sheet.Cell(row, 9).Style.NumberFormat.Format = "0.00"; int col = 9; for (int nasos = 1; nasos <= nasosCount; nasos++) { AnalizeNasosData nd = data[String.Format("{0}_{1}", type, nasos)]; sheet.Cell(row, col + 1).Value = getVal(nd.RunInfo.Count); sheet.Cell(row, col + 1).Style.NumberFormat.Format = "0"; if (data["SVOD"].RunInfo.Count > 0) { sheet.Cell(row, col + 2).Value = getVal(nd.RunInfo.Count * 100.0 / data["SVOD"].RunInfo.Count); } sheet.Cell(row, col + 2).Style.NumberFormat.Format = "0.0"; sheet.Cell(row, col + 3).Value = getVal(nd.RunInfo.MathO / 60.0); sheet.Cell(row, col + 3).Style.NumberFormat.Format = "0.0"; sumRun = nd.RunInfo.filtered.Sum(); sumStay = data["SVOD"].StayInfo.filtered.Sum() - sumRun; if (sumStay > 0) { sheet.Cell(row, col + 4).Value = getVal(sumRun / sumStay); sheet.Cell(row, col + 4).Style.NumberFormat.Format = "0.00"; } col += 4; } if (de >= dateEnd) { int rowdesc = (i + 1) * 4 + i * 12 + ggInd; sheet.Range(row, 2, row, 100).CopyTo(sheetSvodGG.Cell(rowdesc, 2)); sheetSvodGG.Cell(rowdesc, 1).Value = String.Format("ГГ-{0}", ggNum); } } ds = de.AddSeconds(0); rowIndex++; weekNumber++; } sheetTemp.Delete(); sheet.CopyTo(wbFull, sheet.Name); wb.SaveAs(FileName); } wbFull.SaveAs(FileNameFull); sendDiagData(FileNameFull, Header); }
/// ----------------------------------------------------------------------------- /// <summary> /// DataTableをもとにxlsxファイルを作成しPDF化</summary> /// <param name="dtUriage"> /// 売上管理表のデータテーブル</param> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtUriage, List <string> lstItem) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strFilePath = "./Template/C0140_TantouUriageArariNenkan.xlsx"; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string strNow = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); try { CreatePdf pdf = new CreatePdf(); // excelのインスタンス生成 XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled); IXLWorksheet templatesheet = workbook.Worksheet(1); // テンプレートシート IXLWorksheet currentsheet = null; // 処理中シート DataTable dtChkList = null; int[] groupRowsCnt = null; int groupsCnt = 0; // 総合計を取得 decimal[] decKingaku = getGoukeiKingaku(dtUriage, ref dtChkList); // グループ合計を取得 decimal[,] decKingakuGroup = getGroupKingaku(dtUriage, ref groupRowsCnt, ref groupsCnt); int pageCnt = 0; // ページ(シート枚数)カウント int rowCnt = 1; // datatable処理行カウント int xlsRowCnt = 5; // Excel出力行カウント(開始は出力行) int groupCnt = 0; int groupRowCnt = 0; // ClosedXMLで1行ずつExcelに出力 foreach (DataRow drUriage in dtChkList.Rows) { // 1ページ目のシート作成 if (rowCnt == 1) { pageCnt++; xlsRowCnt = 5; // テンプレートシートからコピー templatesheet.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); currentsheet.Cell("A1").Value = lstItem[0].ToString() + currentsheet.Cell("A1").Value; } // 担当者セルのデータ出力 currentsheet.Cell(xlsRowCnt, 1).Value = drUriage[1].ToString(); currentsheet.Cell(xlsRowCnt, 23).Value = drUriage[1].ToString(); // 5月~10月、上期合計セルのデータ出力 for (int colCnt = 2; colCnt <= 22; colCnt++) { currentsheet.Cell(xlsRowCnt, colCnt).Value = drUriage[colCnt].ToString(); } // 11月~12月、翌年の1月~4月、下期合計セルのデータ出力 for (int colCnt = 23; colCnt <= 43; colCnt++) { currentsheet.Cell(xlsRowCnt, colCnt + 1).Value = drUriage[colCnt].ToString(); } // 1行分のセルの周囲に罫線を引く currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 44).Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); // グループ計を出力 groupRowCnt++; if (groupRowsCnt[groupCnt] == groupRowCnt) { xlsRowCnt++; // 担当者セルの出力 currentsheet.Cell(xlsRowCnt, 1).Value = drUriage[0].ToString(); currentsheet.Cell(xlsRowCnt, 23).Value = drUriage[0].ToString(); // 5月~10月、上期合計セルのデータ出力 for (int colCnt = 0; colCnt <= 20; colCnt++) { // 前年粗利額の場合 if (colCnt % 3 == 2) { decimal decHiritsu; if (decKingakuGroup[groupCnt, colCnt] == 0) { decHiritsu = 0; } else { decHiritsu = decKingakuGroup[groupCnt, colCnt - 1] / decKingakuGroup[groupCnt, colCnt]; } currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = decHiritsu.ToString(); } else { currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = decKingakuGroup[groupCnt, colCnt].ToString(); } } // 11月~12月、翌年の1月~4月、下期合計セルのデータ出力 for (int colCnt = 21; colCnt <= 41; colCnt++) { // 前年粗利額の場合 if (colCnt % 3 == 2) { decimal decHiritsu; if (decKingakuGroup[groupCnt, colCnt] == 0) { decHiritsu = 0; } else { decHiritsu = decKingakuGroup[groupCnt, colCnt - 1] / decKingakuGroup[groupCnt, colCnt]; } currentsheet.Cell(xlsRowCnt, colCnt + 3).Value = decHiritsu.ToString(); } else { currentsheet.Cell(xlsRowCnt, colCnt + 3).Value = decKingakuGroup[groupCnt, colCnt].ToString(); } } // 1行分のセルの周囲に罫線を引く currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 44).Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); groupCnt++; groupRowCnt = 0; } rowCnt++; xlsRowCnt++; } // 最終行を出力した後、合計行を出力 if (dtChkList.Rows.Count > 0) { // 担当者セルの出力 currentsheet.Cell(xlsRowCnt, 1).Value = "総合計"; currentsheet.Cell(xlsRowCnt, 23).Value = "総合計"; // 5月~10月、上期合計セルのデータ出力 for (int colCnt = 0; colCnt <= 20; colCnt++) { // 前年粗利額の場合 if (colCnt % 3 == 2) { decimal decHiritsu; if (decKingaku[colCnt] == 0) { decHiritsu = 0; } else { decHiritsu = decKingaku[colCnt - 1] / decKingaku[colCnt]; } currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = decHiritsu.ToString(); } else { currentsheet.Cell(xlsRowCnt, colCnt + 2).Value = decKingaku[colCnt].ToString(); } } // 11月~12月、翌年の1月~4月、下期合計セルのデータ出力 for (int colCnt = 21; colCnt <= 41; colCnt++) { // 前年粗利額の場合 if (colCnt % 3 == 2) { decimal decHiritsu; if (decKingaku[colCnt] == 0) { decHiritsu = 0; } else { decHiritsu = decKingaku[colCnt - 1] / decKingaku[colCnt]; } currentsheet.Cell(xlsRowCnt, colCnt + 3).Value = decHiritsu; } else { currentsheet.Cell(xlsRowCnt, colCnt + 3).Value = decKingaku[colCnt].ToString(); } } // 1行分のセルの周囲に罫線を引く currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 44).Style .Border.SetTopBorder(XLBorderStyleValues.Thin) .Border.SetBottomBorder(XLBorderStyleValues.Thin) .Border.SetLeftBorder(XLBorderStyleValues.Thin) .Border.SetRightBorder(XLBorderStyleValues.Thin); } // ヘッダーシート削除 templatesheet.Delete(); // workbookを保存 string strOutXlsFile = strWorkPath + strDateTime + ".xlsx"; workbook.SaveAs(strOutXlsFile); // workbookを解放 workbook.Dispose(); // PDF化の処理 return(pdf.createPdf(strOutXlsFile, strDateTime, 1)); } catch { throw; } finally { // Workフォルダの全ファイルを取得 string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories); // Workフォルダ内のファイル削除 foreach (string filepath in files) { //File.Delete(filepath); } } }
private void GenerarDatosUnidades(SUBPROYECTO sub) { IXLWorksheet _worksheetProyecto = _xlworkbook.Worksheet("Template Dispositivo"); IXLWorksheet _worksheetSoporte = _xlworkbook.Worksheet("Soporte"); IXLWorksheet sheetUnidad = _worksheetProyecto.CopyTo(sub.nombre.Length > 31 - sub.ot.Value.ToString().Length - 3 ? sub.ot + " - " + sub.nombre.Substring(0, 31 - sub.ot.Value.ToString().Length - 3) : sub.ot + " - " + sub.nombre, _worksheetProyecto.Position); sheetUnidad.Unhide(); List <HORA_TIPO_SUBPROYECTO> _HORAS = ControladorSubproyecto.ObtenerHorasTipoUnidad(); //Formato var dataV = sheetUnidad.Range("'+" + sheetUnidad.Name + "'!C9:C68").SetDataValidation(); dataV.List(_worksheetSoporte.Range(_worksheetSoporte.Cell(2, 5), _worksheetSoporte.Cell(_HORAS.Count + 2, 5))); dataV.IgnoreBlanks = true; dataV.InCellDropdown = true; dataV.ShowInputMessage = true; dataV.ShowErrorMessage = true; dataV.ErrorStyle = ClosedXML.Excel.XLErrorStyle.Stop; sheetUnidad.Cell(1, 3).Value = sub.ot; sheetUnidad.Cell(2, 3).Value = sub.ot_cliente; sheetUnidad.Cell(3, 3).Value = sub.horas_orden_compra.HasValue ? sub.horas_orden_compra : null; int fila = 9; List <SUBPROYECTO> subproyectos = ControladorSubproyecto.ObtenerSubproyectosHijos(sub); List <Actividad_proyecto> actividades; foreach (var subproyecto in subproyectos) { sheetUnidad.Cell(fila, 1).Value = subproyecto.id_subproyecto; sheetUnidad.Cell(fila, 2).Value = subproyecto.nombre; HORA_TIPO_SUBPROYECTO hora = ControladorSubproyecto.ObtenerHoraTipoSubproyecto(subproyecto.id_hora_tipo_subproyecto); if (hora != null) { sheetUnidad.Cell(fila, 3).Value = hora.nombre; //sheetUnidad.Cell(fila, 4).Value = hora.horas; } else { sheetUnidad.Cell(fila, 3).Value = ""; sheetUnidad.Cell(fila, 4).Value = ControladorSubproyecto.CalcularHorasOrdenCompra(subproyecto); } sheetUnidad.Cell(fila, 5).Value = decimal.Round((decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(subproyecto), 2); actividades = ControladorSubproyecto.ObtenerActividades(subproyecto); int columna = 0; foreach (var acti in actividades) { switch (ControladorActividades.ObtenerActividad(acti).id_tipo_actividad) { //Concepto case 2: columna = 9; break; case 3: columna = 22; break; case 4: columna = 35; break; default: columna = -1; break; } if (columna > 0) { decimal horaConsumida = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "prod"), 2)); decimal horaAsignada = (decimal)ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * (decimal)0.85; USUARIO responsablePro = ControladorActividades.ObtenerResponsableProduccion(acti.id_actividad_proyecto); sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number; sheetUnidad.Cell(fila, columna + 1).Value = horaConsumida; sheetUnidad.Cell(fila, columna + 2).Value = decimal.Round(horaAsignada, 2); sheetUnidad.Cell(fila, columna + 3).Value = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%"; sheetUnidad.Cell(fila, columna + 4).Value = responsablePro != null ? responsablePro.nombre + " " + responsablePro.apellido : "Sin asignar"; sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents(); columna += 4; //Control horaConsumida = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "calidad"), 2)); horaAsignada = (decimal)(ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * 0.10); responsablePro = ControladorActividades.ObtenerResponsableControln(acti.id_actividad_proyecto); sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number; sheetUnidad.Cell(fila, columna + 1).Value = horaConsumida; sheetUnidad.Cell(fila, columna + 2).Value = decimal.Round(horaAsignada, 2); sheetUnidad.Cell(fila, columna + 3).Value = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%"; sheetUnidad.Cell(fila, columna + 4).Value = responsablePro != null ? responsablePro.nombre + " " + responsablePro.apellido : "Sin asignar"; sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents(); columna += 4; //Correccion horaConsumida = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "correc"), 2)); horaAsignada = (decimal)(ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * 0.05); responsablePro = ControladorActividades.ObtenerResponsableCorreccion(acti.id_actividad_proyecto); sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number; sheetUnidad.Cell(fila, columna + 1).Value = horaConsumida; sheetUnidad.Cell(fila, columna + 2).Value = decimal.Round(horaAsignada, 2); sheetUnidad.Cell(fila, columna + 3).Value = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%"; sheetUnidad.Cell(fila, columna + 4).Value = responsablePro != null ? responsablePro.nombre + " " + responsablePro.apellido : "Sin asignar"; sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents(); } } fila++; } //Otras actividades fila = 9; List <Actividad_proyecto> listaActividades = ControladorSubproyecto.ObtenerActividades(sub); foreach (Actividad_proyecto actividad in listaActividades) { sheetUnidad.Cell(fila, 7).Value = ControladorActividades.ObtenerActividad(actividad).nombre_actividad; fila++; } }
/// ----------------------------------------------------------------------------- /// <summary> /// DataTableをもとにxlsxファイルを作成しPDF化</summary> /// <param name="dtSeikyuMeisai"> /// 請求明細書のデータテーブル</param> /// ----------------------------------------------------------------------------- public string dbToPdf(DataTable dtSetCd_B_Input, bool blNaga4) { string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"]; string strFilePath = ""; string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"); int intPaperSizeIndex = 0; if (blNaga4 == true) { strFilePath = "./Template/M0620_HushoAtenaInsatsu_Naga4.xlsx"; } else { strFilePath = "./Template/M0620_HushoAtenaInsatsu_Naga3.xlsx"; } try { // excelのインスタンス生成 XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled); IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート IXLWorksheet currentsheet = null; // 処理中シート int pageCnt = 0; // ページ(シート枚数)カウント // テンプレートシートからコピー templatesheet1.CopyTo("Page" + pageCnt.ToString()); currentsheet = workbook.Worksheet(workbook.Worksheets.Count); if (blNaga4 == true) { currentsheet.Cell("D2").Value = dtSetCd_B_Input.Rows[0]["郵便番号"]; // 郵便番号 currentsheet.Cell("L4").Value = dtSetCd_B_Input.Rows[0]["住所1"]; // 住所1 currentsheet.Cell("L6").Value = dtSetCd_B_Input.Rows[0]["住所2"]; // 住所2 currentsheet.Cell("R7").Value = dtSetCd_B_Input.Rows[0]["名称"]; // 名称 } else { currentsheet.Cell("F2").Value = dtSetCd_B_Input.Rows[0]["郵便番号"]; // 郵便番号 currentsheet.Cell("H4").Value = dtSetCd_B_Input.Rows[0]["住所1"]; // 住所1 currentsheet.Cell("H5").Value = dtSetCd_B_Input.Rows[0]["住所2"]; // 住所2 currentsheet.Cell("I8").Value = dtSetCd_B_Input.Rows[0]["名称"]; // 名称 } // テンプレートシート削除 templatesheet1.Delete(); string strOutXlsFile = strWorkPath + strDateTime + ".xlsx"; //横にする workbook.PageOptions.PageOrientation = XLPageOrientation.Landscape; // workbookを保存 workbook.SaveAs(strOutXlsFile); // workbookを解放 workbook.Dispose(); if (blNaga4 == true) { intPaperSizeIndex = 4; } else { intPaperSizeIndex = 3; } CreatePdf pdf = new CreatePdf(); // PDF化の処理 return(pdf.createPdf(strOutXlsFile, strDateTime, intPaperSizeIndex)); //return pdf.createPdf(strOutXlsFile, strDateTime); } catch { throw; } finally { // Workフォルダの全ファイルを取得 string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories); // Workフォルダ内のファイル削除 foreach (string filepath in files) { //File.Delete(filepath); } } }