/// -----------------------------------------------------------------------------
        /// <summary>
        ///     DataTableをもとにxlsxファイルを作成しPDF化</summary>
        /// <param name="dtSiireCheakList">
        ///     仕入推移表のデータテーブル</param>
        /// -----------------------------------------------------------------------------
        public string dbToPdf(DataTable dtZaikoIchiran, List <string> lstItem, string p)
        {
            string strWorkPath = System.Configuration.ConfigurationManager.AppSettings["workpath"];
            string strDateTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strNow      = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            Microsoft.Office.Interop.Excel.Application objExcel     = null;
            Microsoft.Office.Interop.Excel.Workbooks   objWorkBooks = null;
            Microsoft.Office.Interop.Excel.Workbook    objWorkBook  = null;
            Microsoft.Office.Interop.Excel.Worksheet   objWorkSheet = null;
            Microsoft.Office.Interop.Excel.Range       objRange     = null;

            try
            {
                CreatePdf pdf = new CreatePdf();

                // ワークブックのデフォルトフォント、フォントサイズの指定
                XLWorkbook.DefaultStyle.Font.FontName = "MS 明朝";
                XLWorkbook.DefaultStyle.Font.FontSize = 9;

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

                IXLWorksheet worksheet    = workbook.Worksheets.Add("Header");
                IXLWorksheet headersheet  = worksheet;  // ヘッダーシート
                IXLWorksheet currentsheet = worksheet;  // 処理中シート


                //Linqで必要なデータをselect
                var outDataAll = dtZaikoIchiran.AsEnumerable()
                                 .Select(dat => new
                {
                    tanaban       = dat["棚番"],
                    maker         = dat["メーカー名"],
                    hinmei        = dat["品名"],
                    siireTanka    = (decimal)dat["仕入単価"],
                    hyokaTanka    = (decimal)dat["評価単価"],
                    tateneTanka   = (decimal)dat["建値仕入単価"],
                    zengetsu      = (decimal)dat["前月在庫"],
                    nyuko         = (decimal)dat["入庫数"],
                    syuko         = (decimal)dat["出庫数"],
                    zaiko         = (decimal)dat["現在庫数"],
                    siireKingaku  = (decimal)dat["在庫仕入金額"],
                    hyokaKingaku  = (decimal)dat["在庫評価金額"],
                    tateneKingaku = (decimal)dat["在庫建値金額"],
                    daibunrui     = dat["大分類名"],
                    eigyoshoName  = dat["営業所名"]
                }).ToList();

                // linqで在庫仕入金額、在庫評価金額、在庫建値金額の合計算出
                decimal[] decKingaku = new decimal[3];
                decKingaku[0] = outDataAll.Select(gokei => gokei.siireKingaku).Sum();
                decKingaku[1] = outDataAll.Select(gokei => gokei.hyokaKingaku).Sum();
                decKingaku[2] = outDataAll.Select(gokei => gokei.tateneKingaku).Sum();

                // リストをデータテーブルに変換
                DataTable dtChkList = pdf.ConvertToDataTable(outDataAll);

                int maxRowCnt = dtChkList.Rows.Count + 1;
                int maxColCnt = dtChkList.Columns.Count;
                int pageCnt   = 0;  // ページ(シート枚数)カウント
                int rowCnt    = 1;  // datatable処理行カウント
                int xlsRowCnt = 4;  // Excel出力行カウント(開始は出力行)
                int maxPage   = 0;  // 最大ページ数

                // ページ数計算
                //double page = 1.0 * maxRowCnt / 29;
                double page        = 1.0 * maxRowCnt / 68;
                double decimalpart = page % 1;
                if (decimalpart != 0)
                {
                    // 小数点以下が0でない場合、+1
                    maxPage = (int)Math.Floor(page) + 1;
                }
                else
                {
                    maxPage = (int)page;
                }

                // ClosedXMLで1行ずつExcelに出力
                foreach (DataRow drZaiko in dtChkList.Rows)
                {
                    // 1ページ目のシート作成
                    if (rowCnt == 1)
                    {
                        pageCnt++;

                        // タイトル出力(中央揃え、セル結合)
                        IXLCell titleCell = headersheet.Cell("A1");
                        titleCell.Value = "在 庫 一 覧 表";
                        titleCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                        titleCell.Style.Font.FontSize        = 16;
                        headersheet.Range("A1", "M1").Merge();

                        // 営業所出力(A2のセル)
                        // 営業所コードが空でない場合
                        if (lstItem[10].Equals("1"))
                        {
                            headersheet.Cell("A2").Value = " " + drZaiko[14].ToString();
                        }
                        else
                        {
                            headersheet.Cell("A2").Value = " 本社、岐阜";
                        }

                        // 大分類名出力(C2のセル)
                        headersheet.Cell("C2").Value = " " + drZaiko[13].ToString();

                        // 在庫期間出力(M2のセル)
                        //IXLCell kikanCell = headersheet.Cell("M2");
                        IXLCell kikanCell = headersheet.Cell("L2");

                        //kikanCell.Value = "在庫期間::" +
                        //    string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[0])) + "~" +
                        //    string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[1]));
                        kikanCell.Value = "在庫年月日:" +
                                          string.Format("{0:yyyy年MM月dd日}", DateTime.Parse(lstItem[1]));
                        kikanCell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                        // ヘッダー出力(3行目のセル)
                        headersheet.Cell("A3").Value = "棚番";
                        headersheet.Cell("B3").Value = "メーカー名";
                        headersheet.Cell("C3").Value = "品  名 ・ 型  番";
                        headersheet.Cell("D3").Value = "仕入単価";
                        headersheet.Cell("E3").Value = "数量";  // 評価単価
                        headersheet.Cell("F3").Value = "建値仕入単価";
                        headersheet.Cell("G3").Value = "前月在庫";
                        headersheet.Cell("H3").Value = "入庫数";
                        headersheet.Cell("I3").Value = "出庫数";
                        headersheet.Cell("J3").Value = "単価";  // 現在個数
                        headersheet.Cell("K3").Value = "在庫仕入金額";
                        headersheet.Cell("L3").Value = "金額";  // 在庫評価金額
                        headersheet.Cell("M3").Value = "在庫建値金額";

                        // ヘッダー列
                        headersheet.Range("A3", "M3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;

                        // セルの周囲に罫線を引く
                        headersheet.Range("A3", "M3").Style
                        .Border.SetTopBorder(XLBorderStyleValues.Thin)
                        .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                        .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                        .Border.SetRightBorder(XLBorderStyleValues.Thin);

                        // 列幅の指定
                        headersheet.Column(1).Width  = 9;
                        headersheet.Column(2).Width  = 22;
                        headersheet.Column(3).Width  = 44;
                        headersheet.Column(4).Width  = 0;  // 13
                        headersheet.Column(5).Width  = 16;
                        headersheet.Column(6).Width  = 0;  // 13
                        headersheet.Column(7).Width  = 0;  // 9
                        headersheet.Column(8).Width  = 0;  // 7
                        headersheet.Column(9).Width  = 0;  // 7
                        headersheet.Column(10).Width = 11;
                        headersheet.Column(11).Width = 0;  // 13
                        headersheet.Column(12).Width = 17;
                        headersheet.Column(13).Width = 0;  // 13

                        headersheet.Column(4).Hide();
                        headersheet.Column(6).Hide();
                        headersheet.Column(7).Hide();
                        headersheet.Column(8).Hide();
                        headersheet.Column(9).Hide();
                        headersheet.Column(11).Hide();
                        headersheet.Column(13).Hide();

                        // フォントサイズ変更
                        headersheet.Range("B4:C71").Style.Font.FontSize = 6;

                        // 印刷体裁(A4横、印刷範囲、余白)
                        headersheet.PageSetup.PaperSize       = XLPaperSize.A4Paper;
                        headersheet.PageSetup.PageOrientation = XLPageOrientation.Portrait;
                        headersheet.PageSetup.Margins.Left    = 0.2;
                        headersheet.PageSetup.Margins.Right   = 0.2;

                        // ヘッダー部の指定(番号)
                        //headersheet.PageSetup.Header.Left.AddText("(№30)");

                        // ヘッダーシートのコピー、ヘッダー部の指定
                        pdf.sheetCopy2(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                    }

                    // 1セルずつデータ出力
                    for (int colCnt = 1; colCnt <= maxColCnt - 2; colCnt++)
                    {
                        string str = drZaiko[colCnt - 1].ToString();

                        //// 数値、金額セルの処理
                        //if (colCnt >= 7 && colCnt <= 13)
                        //{
                        //    // 3桁毎に","を挿入する
                        //    //str = string.Format("{0:#,0}", decimal.Parse(str));
                        //    currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0");
                        //    currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        //}

                        //// 単価セルの処理
                        //if (colCnt >= 4 && colCnt <= 6)
                        //{
                        //    // 3桁毎に","を挿入する、小数点第2位まで
                        //    currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0.00");
                        //    currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        //}

                        if (colCnt == 5)
                        {
                            currentsheet.Cell(xlsRowCnt, 10).Style.NumberFormat.SetFormat("#,##0.00");
                            currentsheet.Cell(xlsRowCnt, 10).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }
                        else if (colCnt == 10)
                        {
                            currentsheet.Cell(xlsRowCnt, 5).Style.NumberFormat.SetFormat("#,##0");
                            currentsheet.Cell(xlsRowCnt, 5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }
                        else if (colCnt == 12)
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.NumberFormat.SetFormat("#,##0");
                            currentsheet.Cell(xlsRowCnt, colCnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                        }

                        if (colCnt == 5)
                        {
                            currentsheet.Cell(xlsRowCnt, 10).Value = str;
                        }
                        else if (colCnt == 10)
                        {
                            currentsheet.Cell(xlsRowCnt, 5).Value = str;
                        }
                        else
                        {
                            currentsheet.Cell(xlsRowCnt, colCnt).Value = str;
                        }
                    }

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);

                    // 29行毎(ヘッダーを除いた行数)にシート作成
                    //if (xlsRowCnt == 32)
                    if (xlsRowCnt == 71)
                    {
                        pageCnt++;
                        if (pageCnt <= maxPage)
                        {
                            xlsRowCnt = 3;

                            // ヘッダーシートのコピー、ヘッダー部の指定
                            pdf.sheetCopy2(ref workbook, ref headersheet, ref currentsheet, pageCnt, maxPage, strNow);
                        }
                    }

                    rowCnt++;
                    xlsRowCnt++;
                }

                // 最終行を出力した後、合計行を出力
                if (dtChkList.Rows.Count > 0)
                {
                    for (int cnt = 0; cnt < 3; cnt++)
                    {
                        // 3桁毎に","を挿入する
                        currentsheet.Cell(xlsRowCnt, 11 + cnt).Value = string.Format("{0:#,0}", decKingaku[cnt]);
                        currentsheet.Cell(xlsRowCnt, 11 + cnt).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                    }

                    // セル結合
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 10).Merge();
                    currentsheet.Cell(xlsRowCnt, 1).Value = "合計金額:";
                    currentsheet.Cell(xlsRowCnt, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;

                    // 1行分のセルの周囲に罫線を引く
                    currentsheet.Range(xlsRowCnt, 1, xlsRowCnt, 13).Style
                    .Border.SetTopBorder(XLBorderStyleValues.Thin)
                    .Border.SetBottomBorder(XLBorderStyleValues.Thin)
                    .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                    .Border.SetRightBorder(XLBorderStyleValues.Thin);
                }

                // ヘッダーシート削除
                headersheet.Delete();

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

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

                objExcel         = new Microsoft.Office.Interop.Excel.Application();
                objExcel.Visible = false;

                if (p != null)
                {
                    objExcel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMinimized;
                }
                else
                {
                    objExcel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMaximized;
                }

                objExcel.DisplayAlerts = false;

                objWorkBooks = objExcel.Workbooks;

                String strP = System.IO.Path.GetFullPath(strOutXlsFile);

                objWorkBook = objWorkBooks.Open(strP,         //_xslFile,     // FileName:ファイル名
                                                Type.Missing, // UpdateLinks:ファイル内の外部参照の更新方法
                                                Type.Missing, // ReadOnly:ReadOnlyにするかどうか
                                                Type.Missing, // Format: テキストファイルを開く場合に区切り文字を指定する
                                                Type.Missing, // Password:開く際にパスワードがある場合にパスワードを入力
                                                Type.Missing, // WriteResPassword:書き込む際にパスワードがある場合にパスワードを入力
                                                Type.Missing, // IgnoreReadOnlyRecommended:[読み取り専用を推奨する]チェックがオンの場合でも[読み取り専用を推奨する]メッセージを非表示
                                                Type.Missing, // Origin:テキストファイルの場合、プラットフォームを指定
                                                Type.Missing, // Delimiter:テキストファイルで且つ引数Formatが6の場合に区切り文字を指定
                                                Type.Missing, // Editable:Excel4.0アドインの場合、アドインウィンドウを出すか指定
                                                Type.Missing, // Notify:ファイルが読み取りor書き込みモードで開けない場合に通知リストに追加するか指定
                                                Type.Missing, // Converter:ファイルを開くときに最初に使用するファイルコンバーターのインデックス番号を指定
                                                Type.Missing, // AddToMru:最近使用したファイルの一覧にブックを追加するか指定
                                                Type.Missing, // Local:Excel言語設定に合わせてファイルを保存するか指定
                                                Type.Missing  // CorruptLoad:使用できる定数は[xlNormalLoad][xlRepairFile][xlExtractData]。指定がない場合のは[xlNormalLoad]になりOMを通じて開始するときに回復は行われません。
                                                );

                if (p != null)
                {
                    objWorkBook.PrintOut(Type.Missing, // From:印刷開始のページ番号
                                         Type.Missing, // To:印刷終了のページ番号
                                         1,            // Copies:印刷部数
                                         Type.Missing, // Preview:印刷プレビューをするか指定
                                         p,            // ActivePrinter:プリンターの名称
                                         Type.Missing, // PrintToFile:ファイル出力をするか指定
                                         true,         // Collate:部単位で印刷するか指定
                                         Type.Missing  // PrToFileName	:出力先ファイルの名前を指定するかどうか
                                         );
                }
                else
                {
                    objWorkBook.PrintOut(Type.Missing, // From:印刷開始のページ番号
                                         Type.Missing, // To:印刷終了のページ番号
                                         1,            // Copies:印刷部数
                                         true,         // Preview:印刷プレビューをするか指定
                                         p,            // ActivePrinter:プリンターの名称
                                         Type.Missing, // PrintToFile:ファイル出力をするか指定
                                         true,         // Collate:部単位で印刷するか指定
                                         Type.Missing  // PrToFileName	:出力先ファイルの名前を指定するかどうか
                                         );
                    objExcel.Visible = true;
                    objWorkBook.Activate();
                }

                // PDF化の処理
                //return pdf.createPdf(strOutXlsFile, strDateTime, 1);
            }
            catch
            {
                throw;
            }
            finally
            {
                // EXCEL終了処理
                if (objWorkSheet != null)
                {
                    Marshal.ReleaseComObject(objWorkSheet);     // オブジェクト参照を解放
                    objWorkSheet = null;                        // オブジェクト解放
                }

                if (objWorkBook != null)
                {
                    objWorkBook.Close(false,
                                      Type.Missing, Type.Missing); //ファイルを閉じる
                    Marshal.ReleaseComObject(objWorkBook);         // オブジェクト参照を解放
                    objWorkBook = null;                            // オブジェクト解放
                }

                if (objWorkBooks != null)
                {
                    Marshal.ReleaseComObject(objWorkBooks);     // オブジェクト参照を解放
                    objWorkBooks = null;                        // オブジェクト解放
                }
                if (objExcel != null)
                {
                    objExcel.Quit();                            // EXCELを閉じる

                    Marshal.ReleaseComObject(objExcel);         // オブジェクト参照を解放
                    objExcel = null;                            // オブジェクト解放
                }

                System.GC.Collect();                            // オブジェクトを確実に削除
            }

            try
            {
                string ret = "";

                return(ret);
            }
            catch (Exception ex)
            {
                // エラーロギング
                new CommonException(ex);
                throw;
            }
            finally
            {
                // EXCEL終了処理
                if (objWorkSheet != null)
                {
                    Marshal.ReleaseComObject(objWorkSheet);     // オブジェクト参照を解放
                    objWorkSheet = null;                        // オブジェクト解放
                }

                if (objWorkBook != null)
                {
                    objWorkBook.Close(false,
                                      Type.Missing, Type.Missing); //ファイルを閉じる
                    Marshal.ReleaseComObject(objWorkBook);         // オブジェクト参照を解放
                    objWorkBook = null;                            // オブジェクト解放
                }

                if (objWorkBooks != null)
                {
                    Marshal.ReleaseComObject(objWorkBooks);     // オブジェクト参照を解放
                    objWorkBooks = null;                        // オブジェクト解放
                }
                if (objExcel != null)
                {
                    objExcel.Quit();                            // EXCELを閉じる

                    Marshal.ReleaseComObject(objExcel);         // オブジェクト参照を解放
                    objExcel = null;                            // オブジェクト解放
                }

                System.GC.Collect();                            // オブジェクトを確実に削除
                // Workフォルダの全ファイルを取得
                string[] files = System.IO.Directory.GetFiles(strWorkPath, "*", System.IO.SearchOption.AllDirectories);
                // Workフォルダ内のファイル削除
                foreach (string filepath in files)
                {
                    //File.Delete(filepath);
                }
            }
        }