LoginSignup
7
11

More than 3 years have passed since last update.

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

Posted at

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)

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11