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


1. はじめに

Microsoft® Visual Studio® Community 2019 の Visual C#®で、Excel ファイルから PDF ファイル出力する方法の忘備録になります。

2. 概要

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

3. 詳細

1) 参照設定

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

2) サンプルコード

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);
        }
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化する
ExportAsFixedFormat メソッド (Excel)