Пример #1
0
        /// <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++;
                }
            }
        }
Пример #2
0
        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");
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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());
        }
Пример #5
0
        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() + " ");
        }
Пример #6
0
 /// <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);
 }
Пример #7
0
        /// -----------------------------------------------------------------------------
        /// <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);
                }
            }
        }
Пример #8
0
        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;
            }
        }
Пример #9
0
        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);
                }
            }
        }
Пример #10
0
 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);
                }
            }
        }
Пример #12
0
        /// -----------------------------------------------------------------------------
        /// <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);
                }
            }
        }
Пример #13
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSeikyuMeisai">
        ///     請求明細書のデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtSeikyuMeisai)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strFilePath = "./Template/B0420_SeikyuMeisaishoPrint.xlsx";
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");

            try
            {
                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled);

                IXLWorksheet templatesheet1 = workbook.Worksheet(1); // テンプレートシート
                IXLWorksheet templatesheet2 = workbook.Worksheet(2); // テンプレートシート(明細行のみ)
                IXLWorksheet currentsheet   = null;                  // 処理中シート

                int     pageCnt        = 0;                          // ページ(シート枚数)カウント
                int     xlsRowCnt      = 21;                         // Excel出力行カウント(開始は出力行)
                Boolean blnSheetCreate = false;
                string  strTokuisakiCd = "";

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drSeikyuMeisai in dtSeikyuMeisai.Rows)
                {
                    // 得意先コードが前行と同じ場合、かつ、43行目になった場合、テンプレートシート(明細行のみ)作成
                    if (strTokuisakiCd.Equals(drSeikyuMeisai[0].ToString()) && xlsRowCnt == 43)
                    {
                        pageCnt++;
                        xlsRowCnt      = 15;
                        blnSheetCreate = true;

                        // テンプレートシート(明細行のみ)からコピー
                        templatesheet2.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);
                    }

                    // 得意先コードが前行と違う場合、テンプレートシート作成
                    if (!strTokuisakiCd.Equals(drSeikyuMeisai[0].ToString()))
                    {
                        strTokuisakiCd = drSeikyuMeisai[0].ToString();
                        pageCnt++;
                        xlsRowCnt      = 21;
                        blnSheetCreate = true;

                        // テンプレートシートからコピー
                        templatesheet1.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);

                        currentsheet.Cell("A18").Value = drSeikyuMeisai[7].ToString();      // 前月御請求額
                        currentsheet.Cell("C18").Value = drSeikyuMeisai[8].ToString();      // 当月入金額
                        currentsheet.Cell("F18").Value = drSeikyuMeisai[9].ToString();      // 御支払残高
                        currentsheet.Cell("G18").Value = drSeikyuMeisai[10].ToString();     // 当月御買上額
                        currentsheet.Cell("H17").Value = drSeikyuMeisai[11].ToString();     // 内税
                        currentsheet.Cell("H18").Value = drSeikyuMeisai[12].ToString();     // 消費税額
                        currentsheet.Cell("I18").Value = drSeikyuMeisai[13].ToString();     // 当月御請求額
                    }

                    // 最初の明細行の場合
                    if (blnSheetCreate)
                    {
                        blnSheetCreate = false;

                        currentsheet.Cell("B4").Value  = drSeikyuMeisai[2].ToString();      // 郵便番号
                        currentsheet.Cell("B6").Value  = drSeikyuMeisai[3].ToString();      // 住所1
                        currentsheet.Cell("B8").Value  = drSeikyuMeisai[4].ToString();      // 住所2
                        currentsheet.Cell("B10").Value = drSeikyuMeisai[1].ToString();      // 顧客名
                        currentsheet.Cell("H6").Value  = drSeikyuMeisai[5].ToString();      // 請求年月日
                    }

                    //

                    currentsheet.Cell(xlsRowCnt, "A").Value = drSeikyuMeisai[14].ToString();       // 日付
                    currentsheet.Cell(xlsRowCnt, "B").Value = drSeikyuMeisai[15].ToString();       // 伝票No.
                    currentsheet.Cell(xlsRowCnt, "D").Value = drSeikyuMeisai[18].ToString();       // 取区
                    currentsheet.Cell(xlsRowCnt, "E").Value = drSeikyuMeisai[19].ToString();       // 商品名
                    currentsheet.Cell(xlsRowCnt, "J").Value = drSeikyuMeisai[20].ToString();       // 数量
                    currentsheet.Cell(xlsRowCnt, "K").Value = drSeikyuMeisai[21].ToString();       // 単価
                    currentsheet.Cell(xlsRowCnt, "N").Value = drSeikyuMeisai[22].ToString();       // 金額
                    currentsheet.Cell(xlsRowCnt, "P").Value = drSeikyuMeisai[23].ToString();       // 入金金額
                    currentsheet.Cell(xlsRowCnt, "Q").Value = "'" + drSeikyuMeisai[24].ToString(); // 備考

                    xlsRowCnt++;
                }

                // テンプレートシート削除
                templatesheet1.Delete();
                templatesheet2.Delete();

                // ページ数設定
                for (pageCnt = 1; pageCnt <= workbook.Worksheets.Count; pageCnt++)
                {
                    workbook.Worksheet(pageCnt).Cell("R2").Value = pageCnt.ToString();      // No.
                }

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // ロゴ貼り付け処理
                CreatePdf pdf        = new CreatePdf();
                int[]     topRow     = { 5 };
                int[]     leftColumn = { 15 };
                pdf.logoPaste(strOutXlsFile, topRow, leftColumn, 200, 850, 57);

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime, 0));
            }
            catch
            {
                throw;
            }
            finally
            {
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }
Пример #14
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// DataTableをもとにxlsxファイルを作成し、PDFファイルを作成
        /// </summary>
        /// <param name="dtHachu">発注のデータテーブル</param>
        /// <returns>結合PDFファイル</returns>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtHachu)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strFilePath = "./Template/A0120_ChumonShoPrint.xlsx";
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");

            try
            {
                // excelのインスタンス生成
                XLWorkbook workbook = new XLWorkbook(strFilePath, XLEventTracking.Disabled);

                IXLWorksheet templatesheet = workbook.Worksheet(1); // テンプレートシート
                IXLWorksheet currentsheet  = null;                  // 処理中シート

                int     pageCnt           = 0;                      // ページ(シート枚数)カウント
                int     xlsRowCnt         = 11;                     // Excel出力行カウント(開始は出力行)
                Boolean blnSheetCreate    = false;
                string  strTorihikisakiCd = "";
                string  strHachusha       = "";

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drHachu in dtHachu.Rows)
                {
                    // 取引先コードが前行と違う場合、テンプレートシート作成
                    if (!strTorihikisakiCd.Equals(drHachu[1].ToString()))
                    {
                        // 取引先コードが空でない場合
                        if (!strTorihikisakiCd.Equals(""))
                        {
                            // 明細行が17行、18行の場合
                            if (xlsRowCnt == 28 || xlsRowCnt == 29)
                            {
                                // 不要な明細行、発注者行を削除
                                currentsheet.Rows(xlsRowCnt, 33).Delete();

                                pageCnt++;
                                xlsRowCnt = 11;

                                // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー
                                templatesheet.CopyTo(templatesheet.Name);
                            }

                            // 不要な明細行を削除
                            currentsheet.Rows(xlsRowCnt, 28).Delete();

                            // 発注者
                            currentsheet.Cell(xlsRowCnt + 2, "K").Value = strHachusha;
                            currentsheet.Range(xlsRowCnt + 2, 11, xlsRowCnt + 4, 11).Merge();
                        }

                        strTorihikisakiCd = drHachu[1].ToString();      // 取引先コード
                        strHachusha       = drHachu[11].ToString();     // 発注者
                        pageCnt++;
                        xlsRowCnt      = 11;
                        blnSheetCreate = true;

                        // テンプレートシートからコピー
                        templatesheet.CopyTo("Page" + pageCnt.ToString());
                        currentsheet = workbook.Worksheet(workbook.Worksheets.Count);
                    }

                    // 明細行が19行になった場合
                    if (xlsRowCnt == 29)
                    {
                        // 発注者行を削除
                        currentsheet.Rows(xlsRowCnt, 33).Delete();

                        pageCnt++;
                        xlsRowCnt = 11;

                        // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー
                        templatesheet.CopyTo(templatesheet.Name);
                    }

                    // 最初の明細行の場合
                    if (blnSheetCreate)
                    {
                        blnSheetCreate = false;

                        currentsheet.Cell("A4").Value = drHachu[2].ToString();       // 取引先名
                        currentsheet.Cell("B6").Value = drHachu[3].ToString();       // 電話番号
                        currentsheet.Cell("B7").Value = drHachu[4].ToString();       // FAX
                        currentsheet.Cell("E3").Value = drHachu[0].ToString();       // 年月日
                        currentsheet.Cell("K3").Value = drHachu[13].ToString();      // 営業所名
                    }

                    currentsheet.Cell(xlsRowCnt, "A").Value = drHachu[5].ToString();        // 商品名
                    currentsheet.Cell(xlsRowCnt, "E").Value = drHachu[6].ToString();        // 数量
                    currentsheet.Cell(xlsRowCnt, "F").Value = drHachu[7].ToString();        // 単価
                    currentsheet.Cell(xlsRowCnt, "G").Value = drHachu[8].ToString();        // 金額
                    currentsheet.Cell(xlsRowCnt, "I").Value = drHachu[9].ToString();        // 納期
                    currentsheet.Cell(xlsRowCnt, "J").Value = drHachu[10].ToString();       // 注文番号
                    currentsheet.Cell(xlsRowCnt, "K").Value = "'" + drHachu[12].ToString(); // 備考

                    xlsRowCnt++;
                }

                // 発注データがある場合
                if (dtHachu.Rows.Count > 0)
                {
                    // 明細行が17行、18行の場合
                    if (xlsRowCnt == 28 || xlsRowCnt == 29)
                    {
                        // 不要な明細行、発注者行を削除
                        currentsheet.Rows(xlsRowCnt, 33).Delete();

                        pageCnt++;
                        xlsRowCnt = 11;

                        // テンプレートシートをコピーし、1つ前のシートから取引先名などをコピー
                        templatesheet.CopyTo(templatesheet.Name);
                        //this.sheetCopy(ref workbook, ref currentsheet, templatesheet, pageCnt);
                    }

                    // 不要な明細行を削除
                    currentsheet.Rows(xlsRowCnt, 28).Delete();

                    // 発注者
                    currentsheet.Cell(xlsRowCnt + 2, "K").Value = strHachusha;
                    currentsheet.Range(xlsRowCnt + 2, 11, xlsRowCnt + 4, 11).Merge();
                }

                // テンプレートシート削除
                templatesheet.Delete();

                // workbookを保存
                string strOutXlsFile = strWorkPath + strDateTime + ".xlsx";
                workbook.SaveAs(strOutXlsFile);

                // workbookを解放
                workbook.Dispose();

                // CreatePdfのインスタンス生成
                CreatePdf pdf = new CreatePdf();

                // ロゴ貼り付け処理
                int[] topRow     = { 2 };
                int[] leftColumn = { 8 };
                pdf.logoPaste(strOutXlsFile, topRow, leftColumn, 200, 850, 57);

                // PDF化の処理
                return(pdf.createPdf(strOutXlsFile, strDateTime));
            }
            catch
            {
                throw;
            }
            finally
            {
                //// Workフォルダの作成日時ファイルを取得
                //string[] files = Directory.GetFiles(strWorkPath, strDateTime + "*", SearchOption.AllDirectories);
                //// Workフォルダ内のファイル削除
                //foreach (string filepath in files)
                //{
                //    File.Delete(filepath);
                //}
            }
        }
Пример #15
0
        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++;
            }
        }
Пример #18
0
 public void AddWorksheet(IXLWorksheet worksheet)
 {
     worksheet.CopyTo(this, worksheet.Name);
 }
Пример #19
0
        /// -----------------------------------------------------------------------------
        /// <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);
                }
            }
        }