.NET から Excel を使用して Excel ファイルを PDF に変換する

ページ更新日 :
ページ作成日 :

動作確認環境

Visual Studio
  • Visual Studio 2022
.NET
  • .NET 6.0
Windows
  • Windows 11
Excel
  • Microsoft 365

動作必須環境

Windows
  • いずれかのバージョン
Excel
  • いずれかのバージョン

Excel ファイルから PDF ファイルに変換する手順

今回のプログラムは Microsoft.Office.Interop.Excel を使用して .NET プログラムから COM を経由して Excel を操作し、開いた Excel ファイルを PDF として出力します。 そのため、実行するためには Excel を Windows にインストールする必要があります。COM は Windows の仕組みなので Mac などでは動作しません。

Visual Studio でプロジェクトを作成する際は Windows のデスクトップ上で動作するものであれば何でも構いません。 今回はコンソール アプリとして作成しています。

プロジェクトを作成したら Excel を使用するためのライブラリを参照します。 ここで紹介している方法はプログラムの見やすさを考慮してインストールされている Excel のバージョンに依存した方法で構築しています。 Excel のバージョンに依存せずに実行したい場合は以下のリンク先の方法に合わせて修正してください。 配布しているプログラムはその方法で構築しています。

「依存関係」を右クリックして「COM 参照の追加」を選択します。

開発環境に Excel がインストールされている場合、右上の検索欄に Excel と入力すると Microsoft Excel XX.0 Object Library が表示されるのでそれをチェックして「OK」ボタンをクリックします。 表示されるバージョンについてはインストールされている Excel のバージョンに依存します。

読み込む Excel ファイルを用意しておきます。 PDF にどのように出力されるかは Excel で手動で PDF に出力したときと同じなのでアプリケーションとして組み込む場合はあらかじめ確認しておいてください。

処理させたい場所に以下のコードを入力します。

// 実行プログラムの場所にある Excel ファイル
var folderPath = Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule?.FileName) ?? "";
var excelFilePath = Path.Combine(folderPath, "Sample.xlsx");

Microsoft.Office.Interop.Excel.Application? excel = null;
Microsoft.Office.Interop.Excel.Workbooks? books = null;
Microsoft.Office.Interop.Excel.Workbook? book = null;
Microsoft.Office.Interop.Excel.Sheets? sheets = null;
try
{
  // Excel アプリケーション生成
  excel = new Microsoft.Office.Interop.Excel.Application()
  {
    DisplayAlerts = false, // アラート非表示
    Visible = false,       // Excel 非表示
  };

  // ワークブック一覧を参照
  books = excel.Workbooks;

  // Excel ファイルを開く
  book = books.Open(excelFilePath);

  // シート一覧参照
  sheets = book.Worksheets;

  // 全シートを選択
  sheets.Select();

  // Excel のデータを PDF ファイルとして保存
  //   Type     : xlTypePDF=PDF, xlTypeXPS=XPS
  //   Filename : 出力ファイル名
  //   Quality  : xlQualityStandard=標準品質, xlqualityminimum=最小限の品質
  book.ExportAsFixedFormat(
      Type: Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF,
      Filename: Path.Combine(folderPath, "Sample.pdf"),
      Quality: Microsoft.Office.Interop.Excel.XlFixedFormatQuality.xlQualityStandard);

  Console.WriteLine("PDF 出力に成功しました。");
}
catch (Exception ex)
{
  Console.WriteLine("PDF 出力に失敗しました。");
  Console.WriteLine(ex.ToString());
}
finally
{
  // Excel を終了させる
  if (book != null) book.Close(SaveChanges: false);
  if (excel != null) excel.Quit();

  // 使用した Excel リソースは全て開放する
  if (sheets != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets);
  if (book != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
  if (books != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
  if (excel != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
}

ポイントは Workbook.ExportAsFixedFormat メソッドですでにエクスポート関数が用意されているのでそれを呼び出すだけです。

実行して PDF ファイルが出力されるか確認してください。