#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);
}
}
}