[C#]ExcelファイルからPDFファイル出力

#1. はじめに
Microsoft&reg; Visual Studio&reg; Community 2019 の Visual C#&reg;で、Excel ファイルから PDF ファイル出力する方法の忘備録になります。

#2. 概要

```Microsoft.Office.Interop.Excel``` の ExportAsFixedFormat メソッドを利用して、 オープンした Excel ファイルを、PDF ファイル形式で出力します。

#3. 詳細

##1) 参照設定
Visual Studio の [プロジェクト] メニューの [参照の追加] で [参照 マネージャー] を表示して、[COM] - [Microsoft Excel 16.0 Object Library] にチェックして [OK] を押下します。

##2) サンプルコード

```C#:ExcelManager.cs
using System;
using Microsoft.Office.Interop.Excel;

    class ExcelManager: IDisposable
    {
        private Application _application = null;
        private Workbook _workbook = null;
        private bool disposedValue = false;

        /// <summary>
        /// Excelワークブックを開く
        /// </summary>
        public void Open()
        {
            // Excelアプリケーション生成
            _application  = new Application()
            {
                // 非表示
                Visible = false,
            };

            // Bookを開く
            _workbook = _application .Workbooks.Open(@"e:\book1.xlsx");
        }

        /// <summary>
        /// Excelワークブックをファイル名を指定してPDF形式で保存する
        /// </summary>
        /// <returns>true:正常終了、false:保存失敗</returns>
        public bool SaveAsPDF()
        {
            try
            {
                // 全シートを選択する
                _workbook.Worksheets.Select();

                // ファイル名を指定してPDF形式で保存する
                // ExportAsFixedFormatメソッド: ブックを PDF または XPS 形式に発行する
                //  Type    : タイプ   : XlFixedFormatType xlTypePDF=PDF, xlTypeXPS=XPS
                //  Filename: 出力ファイル名
                //  Quality : 種t力品質: XlFixedFormatQuality xlQualityStandard=標準品質, xlqualityminimum=最小限の品質

                _workbook.ExportAsFixedFormat(
                    Type: XlFixedFormatType.xlTypePDF,
                    Filename: @"e:\book1.pdf",
                    Quality: XlFixedFormatQuality.xlQualityStandard);
            }
            catch
            {
                return false;
            }

            return true;
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: Managed Objectの破棄
                }

                if (_workbook != null)
                {
                    _workbook.Close();
                    Marshal.ReleaseComObject(_workbook);
                    _workbook = null;
                }

                if (_application != null)
                {
                    _application.Quit();
                    Marshal.ReleaseComObject(_application);
                    _application = null;
                }

                disposedValue = true;
            }
        }

        ~ExcelManager()
        {
            Dispose(false);
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
```

```C#:test.cs
using System;
using System.Windows.Forms;

    public partial class test: Form
    {
        public test()
        {
            InitializeComponent();
        }

        private void Btn1_Click(object sender, EventArgs e)
        {
            // for Microsoft.Office.Interop.Excel

            using (var excel = new ExcelManager())
            {
                excel.Open();
                if (excel.SaveAsPDF() == false)
                    MessageBox.Show("ファイルが既に開かれています。\n閉じてから、再試行してください。",
                        "エラー",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error);
            }
        }
    }
```

##参考
[【C#】ExcelファイルをPDF化する](https://www.milkmemo.com/entry/csharp_excel_pdf_output)
[ExportAsFixedFormat メソッド (Excel)](https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook.exportasfixedformat)