C#でExcelをPDFに変換する方法|Office不要・Interop・無料ライブラリまで実装例で徹底比較

はじめに

C#でExcelファイルをPDFに変換したい場面は、請求書、見積書、帳票、レポート、申請書、管理資料など、業務システムでは非常に多くあります。

一見すると「ExcelをPDFにするだけ」と思われがちですが、実装方法によって必要な環境、変換精度、ライセンス、サーバー運用のしやすさが大きく変わります。

特にC#では、Microsoft Office Interopを使う方法、Office不要のライブラリを使う方法、LibreOfficeなどの外部ツールを呼び出す方法が代表的です。それぞれにメリット・デメリットがあり、ローカルPCで使うのか、ASP.NET CoreなどのWebアプリで使うのか、商用システムで安定運用するのかによって最適解は異なります。

この記事では、C#でExcelをPDFに変換する方法を、Office不要、Interop、無料ライブラリ、有料ライブラリ、LibreOfficeの観点から比較し、実装例付きで解説します。

1. C#でExcelをPDFに変換する方法の全体像

C#でExcelをPDFに変換する方法はいくつかありますが、大きく分けると「Excel本体を操作してPDF出力する方法」と「Excelファイルを直接読み込めるライブラリでPDF化する方法」と「外部ツールをコマンド実行する方法」に分類できます。

どの方法を選ぶべきかは、実行環境、コスト、変換精度、ライセンス、保守性によって決まります。

1-1. この記事で比較する変換方法

この記事では、主に次の方法を比較します。

方法Officeのインストールサーバー向き変換精度コスト
Microsoft Office Interop必要非推奨高いOfficeライセンスが必要
Office不要の無料ライブラリ不要条件付きで可能中程度無料または制限付き無料
Office不要の有料ライブラリ不要向いている高い有料
LibreOffice呼び出し不要条件付きで可能中〜高無料

C#からExcelをPDFに変換するだけであれば、どの方法でも実現できます。ただし、業務システムとして安定運用する場合は、単に動くかどうかだけでなく、複数ユーザーからの同時実行、例外処理、フォント、改ページ、セキュリティ、ライセンスまで考慮する必要があります。

1-2. ExcelからPDF変換で実現できること

C#でExcelをPDFに変換すると、次のような処理を自動化できます。

請求書テンプレートにデータを差し込み、PDFとして保存する。売上レポートや集計表をPDF化してメール送信する。アップロードされたExcelファイルをWeb上でPDFプレビューできるようにする。複数のExcelファイルを一括でPDF変換する。シート単位でPDFを分割出力する。印刷範囲やページ設定を反映したPDFを生成する。

Excelは編集用のファイル形式として便利ですが、配布、保管、印刷、承認フローではPDFのほうが扱いやすいことが多いです。そのため、C#の業務アプリではExcel作成とPDF変換を組み合わせる実装がよく使われます。

1-3. C#でPDF変換が必要になる主な業務シーン

C#でExcelをPDF化する代表的な業務シーンは次のとおりです。

請求書、納品書、見積書などの帳票出力。社内レポートや月次資料の自動生成。勤怠表、勤務表、精算書などのPDF保存。WebアプリでアップロードされたExcelの確認用PDF生成。バッチ処理による大量ファイル変換。メール添付用のPDF作成。監査や証跡保管のためのPDFアーカイブ。

これらの処理では、単発で変換できるだけでなく、同じレイアウトで安定してPDFを出力できることが重要です。

1-4. 先に結論:用途別おすすめ変換方法

ローカルPCで手軽にExcelをPDF化したいだけなら、Microsoft Office Interopが分かりやすい方法です。実際のExcelアプリケーションを使うため、見た目の再現性は高いです。

Officeなしのサーバーやクラウド環境でPDF変換したい場合は、Office不要の有料ライブラリが最も安定しやすいです。商用システムでは、Aspose.Cells、GrapeCity Documents for Excel、Syncfusion XlsIO、Spire.XLSなどが候補になります。

無料で実装したい場合は、FreeSpire.XLSやLibreOfficeの利用が候補になります。ただし、無料ライブラリにはページ数制限、シート数制限、透かし、商用利用条件などがある場合があるため、ライセンス確認が必須です。

大量変換やLinux環境で費用を抑えたい場合は、LibreOfficeのheadless変換も選択肢になります。ただし、同時実行制御やレイアウト差異への対策が必要です。

2. C#でExcelをPDFに変換する方法は大きく3種類

C#でExcelをPDFに変換する方法は、大きく3種類あります。

1つ目は、Microsoft Office Interopを使ってExcelアプリケーションを操作する方法です。2つ目は、Office不要の.NETライブラリでExcelファイルを直接PDFに変換する方法です。3つ目は、LibreOfficeなどの外部ツールをC#から実行する方法です。

2-1. Microsoft Office Interopを使う方法

Microsoft Office Interopは、C#からExcelアプリケーションをCOM経由で操作する方法です。

Excelを起動し、対象のブックを開き、ExportAsFixedFormatメソッドでPDFとして保存します。Excel本体の機能を使うため、印刷範囲、改ページ、フォント、グラフ、画像などの再現性は高いです。

一方で、実行環境にMicrosoft Excelがインストールされている必要があります。また、サーバーサイドでの自動実行には向いていません。Excelプロセスが残る、ダイアログで停止する、複数ユーザー実行で不安定になるなどの問題が起きやすいためです。

2-2. Office不要の.NETライブラリを使う方法

Office不要の.NETライブラリを使う方法では、C#アプリケーションがExcelファイルを直接読み込み、PDFとして出力します。

Microsoft Excelをインストールする必要がないため、サーバー、Docker、クラウド、バッチ処理などで使いやすいのが大きなメリットです。

代表的なライブラリには、Aspose.Cells、GrapeCity Documents for Excel、Syncfusion XlsIO、Spire.XLS、FreeSpire.XLSなどがあります。

ただし、ライブラリによって対応しているExcel機能やPDF変換精度が異なります。ピボットテーブル、グラフ、画像、条件付き書式、印刷範囲、改ページ、日本語フォントなどをどこまで再現できるかは事前検証が必要です。

2-3. LibreOfficeなど外部ツールを使う方法

LibreOfficeをheadlessモードで実行し、C#からコマンドラインでExcelをPDFに変換する方法もあります。

LibreOfficeは無料で利用でき、WindowsだけでなくLinuxでも動作します。そのため、コストを抑えてサーバー上でExcelからPDFへの変換処理を行いたい場合に候補になります。

ただし、Microsoft Excelとはレンダリングエンジンが異なるため、レイアウトが完全に一致しない場合があります。また、複数プロセスで同時実行する場合は、ユーザープロファイルの分離や一時ファイル管理が重要になります。

2-4. 各方法のメリット・デメリット比較

方法メリットデメリット
InteropExcelと同等の見た目で出力しやすいOffice必須、サーバー非推奨、COM解放が必要
無料ライブラリOffice不要、低コスト機能制限、ライセンス制限、変換精度に差がある
有料ライブラリ高精度、サーバー向き、商用サポートありライセンス費用が必要
LibreOffice無料、Linux対応、コマンドで簡単Excelとの差異、同時実行制御、環境依存がある

簡単に試すならInterop、Officeなしで安定運用するなら有料ライブラリ、無料重視ならLibreOfficeまたは無料ライブラリを検討するのが基本方針です。

3. Microsoft Office InteropでExcelをPDFに変換する方法

Microsoft Office Interopを使うと、C#からExcelを操作してPDFを出力できます。Excelの「名前を付けて保存」や「エクスポート」と同じ仕組みに近いため、ローカルPC上での自動化には便利です。

3-1. Interopを使う前提条件

Interopを使うには、実行環境にMicrosoft Excelがインストールされている必要があります。

また、対象アプリケーションがWindows上で動作することも前提になります。Linuxやコンテナ環境では通常利用できません。

主な前提条件は次のとおりです。

  • Windows環境であること

  • Microsoft Excelがインストールされていること

  • 実行ユーザーがExcelを起動できる権限を持っていること

  • デスクトップアプリやローカルバッチなど、対話ユーザーに近い環境であること

  • サーバーサイドの大量実行には使わないこと

特にASP.NETやWindowsサービスなどからInteropを使う場合は注意が必要です。Excelはサーバーサイドの無人実行を前提に設計されたコンポーネントではないため、予期しない停止やプロセス残留が発生しやすくなります。

3-2. 必要な参照設定とNuGetパッケージ

C#プロジェクトでInteropを使う場合は、NuGetから次のパッケージを追加します。

Bash
dotnet add package Microsoft.Office.Interop.Excel

.NET Frameworkのプロジェクトでは、参照設定から「Microsoft Excel Object Library」を追加する方法もあります。

コードでは次の名前空間を使用します。

C#
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

3-3. ExportAsFixedFormatを使ったPDF変換コード

最も基本的なExcelからPDFへの変換コードは次のとおりです。

C#
using System;
using System.IO;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

public class ExcelToPdfInterop
{
public static void ConvertExcelToPdf(string excelPath, string pdfPath)
{
Excel.Application? excelApp = null;
Excel.Workbook? workbook = null;

try
{
excelApp = new Excel.Application
{
Visible = false,
DisplayAlerts = false
};

workbook = excelApp.Workbooks.Open(excelPath);

workbook.ExportAsFixedFormat(
Type: Excel.XlFixedFormatType.xlTypePDF,
Filename: pdfPath,
Quality: Excel.XlFixedFormatQuality.xlQualityStandard,
IncludeDocProperties: true,
IgnorePrintAreas: false,
OpenAfterPublish: false
);
}
finally
{
if (workbook != null)
{
workbook.Close(false);
Marshal.ReleaseComObject(workbook);
}

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

GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}

呼び出し例は次のとおりです。

C#
var excelPath = @"C:\work\sample.xlsx";
var pdfPath = @"C:\work\sample.pdf";

ExcelToPdfInterop.ConvertExcelToPdf(excelPath, pdfPath);

IgnorePrintAreasfalseにすると、Excel側で設定されている印刷範囲を反映してPDF出力できます。印刷範囲を無視してシート全体をPDFにしたい場合はtrueにします。

3-4. 複数シートをPDF化する実装例

ブック全体をPDF化する場合は、先ほどのようにWorkbook.ExportAsFixedFormatを使えば複数シートをまとめてPDFにできます。

特定のシートだけをPDF化したい場合は、対象シートのExportAsFixedFormatを使います。

C#
using System;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

public class ExcelSheetToPdfInterop
{
public static void ConvertSheetToPdf(string excelPath, string sheetName, string pdfPath)
{
Excel.Application? excelApp = null;
Excel.Workbook? workbook = null;
Excel.Worksheet? worksheet = null;

try
{
excelApp = new Excel.Application
{
Visible = false,
DisplayAlerts = false
};

workbook = excelApp.Workbooks.Open(excelPath);
worksheet = workbook.Worksheets[sheetName] as Excel.Worksheet;

if (worksheet == null)
{
throw new InvalidOperationException($"シートが見つかりません: {sheetName}");
}

worksheet.ExportAsFixedFormat(
Type: Excel.XlFixedFormatType.xlTypePDF,
Filename: pdfPath,
Quality: Excel.XlFixedFormatQuality.xlQualityStandard,
IncludeDocProperties: true,
IgnorePrintAreas: false,
OpenAfterPublish: false
);
}
finally
{
if (worksheet != null)
{
Marshal.ReleaseComObject(worksheet);
}

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

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

GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}

複数のシートを個別のPDFにしたい場合は、ワークシートをループして出力します。

C#
for (int i = 1; i <= workbook.Worksheets.Count; i++)
{
var sheet = (Excel.Worksheet)workbook.Worksheets[i];
var outputPath = Path.Combine(outputDirectory, $"{sheet.Name}.pdf");

sheet.ExportAsFixedFormat(
Excel.XlFixedFormatType.xlTypePDF,
outputPath
);

Marshal.ReleaseComObject(sheet);
}

3-5. Interop利用時の注意点

Interopを使う場合、最も注意すべき点はExcelプロセスの解放です。

Workbook.Close()Application.Quit()を呼ばずに処理が終了すると、EXCEL.EXEがバックグラウンドに残ることがあります。これが積み重なると、メモリ不足やファイルロックの原因になります。

また、次の点にも注意が必要です。

ファイルパスは絶対パスを使う。Excelファイルが他のプロセスで開かれていないか確認する。保存先フォルダが存在するか確認する。実行ユーザーに読み書き権限があるか確認する。Excelの警告ダイアログを避けるためDisplayAlerts = falseを設定する。処理後はCOMオブジェクトを明示的に解放する。

3-6. サーバー環境でInteropが推奨されない理由

Interopは、ASP.NET、Windowsサービス、クラウド、バッチサーバーなどの無人実行環境では推奨されません。

理由は、Excelアプリケーションがデスクトップ操作を前提にしているためです。サーバーで実行すると、非表示のダイアログが出て処理が止まる、複数ユーザーからの同時実行で競合する、プロセスが残る、権限やプロファイルの問題で起動しない、Officeのライセンス上の問題が発生する、といったリスクがあります。

ローカルPCで管理者が実行する簡易ツールであればInteropは便利ですが、商用Webシステムやクラウド上のPDF変換処理では、Office不要のライブラリやLibreOfficeの利用を検討するほうが安全です。

4. Office不要でExcelをPDFに変換できるC#ライブラリ

Office不要のライブラリを使うと、C#アプリケーションだけでExcelファイルを読み込み、PDFとして保存できます。

Microsoft Excelをインストールしなくてもよいため、サーバー、Docker、Linux、Azure、AWS、ASP.NET CoreなどでPDF変換を行いたい場合に向いています。

4-1. Office不要ライブラリを選ぶメリット

Office不要ライブラリを使う最大のメリットは、実行環境にMicrosoft Officeをインストールしなくてよいことです。

これにより、アプリケーションのデプロイが簡単になり、サーバー運用もしやすくなります。また、COMオブジェクトの解放やExcelプロセスの残留を気にする必要がありません。

主なメリットは次のとおりです。

サーバーサイドで使いやすい。Linuxやコンテナに対応しているライブラリもある。大量変換やバッチ処理に組み込みやすい。Excelのインストール状態に依存しない。WebアプリやAPIに組み込みやすい。

4-2. 無料で使えるライブラリの選択肢

無料で使える選択肢としては、FreeSpire.XLSやLibreOfficeが代表的です。

また、ClosedXML、NPOI、EPPlusなどはExcelファイルの読み書きではよく使われますが、単体で高精度なExcelからPDFへの直接変換に対応していない、または利用条件に注意が必要な場合があります。

たとえば、ClosedXMLはExcelファイルの作成や編集には便利ですが、PDF変換機能は標準では提供されていません。NPOIもExcel読み書きには利用できますが、Excelの見た目をそのままPDF化する用途では追加実装が必要になります。EPPlusは高機能ですが、商用利用ではライセンス条件の確認が必要です。

無料ライブラリを選ぶときは、単に「NuGetで無料インストールできるか」ではなく、「PDF変換に対応しているか」「商用利用できるか」「出力ページ数やシート数に制限がないか」を確認する必要があります。

4-3. 有料ライブラリの選択肢

商用システムでExcelからPDFへの変換精度や安定性を重視する場合は、有料ライブラリが有力です。

代表的な選択肢には、次のようなライブラリがあります。

ライブラリ特徴
Aspose.Cells for .NETExcel処理が高機能でPDF変換にも強い
GrapeCity Documents for Excel帳票・Excel操作・PDF出力に向く
Syncfusion XlsIOOffice不要でExcel作成・変換が可能
Spire.XLS for .NETExcel操作とPDF変換に対応

有料ライブラリは、グラフ、画像、印刷範囲、改ページ、フォント、条件付き書式などの再現性が高い傾向があります。また、商用サポートがあるため、業務システムで問題が発生したときに問い合わせできる点も大きなメリットです。

4-4. .NET Framework・.NET 6/7/8対応状況

C#でExcelをPDF変換する場合、対象プロジェクトが.NET Frameworkなのか、.NET 6、.NET 7、.NET 8なのかによって選べるライブラリが変わる場合があります。

古い業務システムでは.NET Framework 4.8が使われることがあります。一方、新規開発では.NET 6以降や.NET 8を使うケースが増えています。

ライブラリ選定時は、次の点を確認しましょう。

対象の.NETバージョンに対応しているか。Windows専用か、Linuxでも動くか。ASP.NET Coreで利用できるか。Dockerコンテナで動作するか。日本語フォントの扱いに問題がないか。ライセンスがプロジェクト形態に合っているか。

特にクラウドやLinuxコンテナで運用する場合は、Windows専用の機能に依存していないかを事前に確認することが重要です。

4-5. 商用利用時に確認すべきライセンス条件

C#でExcelをPDFに変換する処理を商用システムに組み込む場合、ライセンス確認は必須です。

無料ライブラリでも、個人利用は無料だが商用利用は有料、ページ数に制限がある、出力PDFに透かしが入る、クラウド利用には別ライセンスが必要、といった条件がある場合があります。

確認すべきポイントは次のとおりです。

商用利用できるか。WebアプリやSaaSで利用できるか。開発者単位、サーバー単位、アプリ単位のどのライセンスか。CI/CDやコンテナ環境で利用できるか。出力PDFに透かしやページ数制限がないか。再配布や顧客環境への導入が許可されているか。

ライセンス違反は後から大きな問題になりやすいため、検証段階で必ず確認しておきましょう。

5. 無料ライブラリでExcelをPDFに変換する実装例

無料でExcelをPDFに変換したい場合は、FreeSpire.XLSなどのライブラリを使う方法があります。

ただし、無料版にはページ数やシート数の制限がある場合があります。本番利用前には、対象ファイルのページ数、商用利用可否、出力PDFの透かし有無を必ず確認してください。

5-1. 無料ライブラリでできること・できないこと

無料ライブラリでできることは、基本的なXLSXファイルの読み込み、PDF保存、シート単位の変換、ページ設定の一部反映などです。

一方で、次のようなケースでは制限が出ることがあります。

複雑なグラフを含むExcel。大量ページの帳票。マクロ付きExcel。特殊なフォントを使った資料。ピボットテーブルや高度な条件付き書式。厳密な印刷レイアウトが必要な帳票。商用システムでの大量変換。

無料ライブラリは、社内ツールや小規模な変換処理には便利ですが、請求書や契約書などの重要な帳票では、変換結果を十分に検証する必要があります。

5-2. NuGetからライブラリをインストールする手順

FreeSpire.XLSを使う場合、NuGetからパッケージを追加します。

Bash
dotnet add package FreeSpire.XLS

Visual Studioを使う場合は、「NuGetパッケージの管理」からFreeSpire.XLSを検索してインストールします。

インストール後、C#コードで次の名前空間を使用します。

C#
using Spire.Xls;

5-3. XLSXファイルをPDFに変換するサンプルコード

FreeSpire.XLSを使った基本的なExcelからPDFへの変換コードは次のとおりです。

C#
using Spire.Xls;

public class ExcelToPdfFreeLibrary
{
public static void ConvertExcelToPdf(string excelPath, string pdfPath)
{
var workbook = new Workbook();

workbook.LoadFromFile(excelPath);

workbook.SaveToFile(pdfPath, FileFormat.PDF);
}
}

呼び出し例は次のとおりです。

C#
var excelPath = @"C:\work\invoice.xlsx";
var pdfPath = @"C:\work\invoice.pdf";

ExcelToPdfFreeLibrary.ConvertExcelToPdf(excelPath, pdfPath);

この方法では、Microsoft OfficeをインストールせずにC#だけでExcelファイルをPDF化できます。

5-4. シート指定でPDFに変換する方法

特定のシートだけをPDF化したい場合は、対象のワークシートを指定してPDF出力します。

C#
using Spire.Xls;

public class ExcelSheetToPdfFreeLibrary
{
public static void ConvertSheetToPdf(string excelPath, string sheetName, string pdfPath)
{
var workbook = new Workbook();
workbook.LoadFromFile(excelPath);

Worksheet sheet = workbook.Worksheets[sheetName];

if (sheet == null)
{
throw new InvalidOperationException($"シートが見つかりません: {sheetName}");
}

sheet.SaveToPdf(pdfPath);
}
}

シート名ではなくインデックスで指定することもできます。

C#
Worksheet firstSheet = workbook.Worksheets[0];
firstSheet.SaveToPdf(@"C:\work\sheet1.pdf");

複数シートをそれぞれ別PDFにしたい場合は、シートをループします。

C#
for (int i = 0; i < workbook.Worksheets.Count; i++)
{
Worksheet sheet = workbook.Worksheets[i];
string pdfPath = Path.Combine(outputDirectory, $"{sheet.Name}.pdf");

sheet.SaveToPdf(pdfPath);
}

5-5. レイアウト崩れを防ぐ設定

ExcelをPDFに変換するときにレイアウトが崩れる主な原因は、ページ設定、印刷範囲、列幅、フォント、改ページです。

事前にExcel側で次の設定を整えておくと、PDF変換時の崩れを減らせます。

印刷範囲を設定する。用紙サイズをA4などに固定する。縦向き・横向きを指定する。余白を調整する。列幅と行高を固定する。改ページ位置を確認する。拡大縮小印刷を設定する。

ライブラリ側でページ設定を指定する例は次のとおりです。

C#
using Spire.Xls;

public static void ConvertWithPageSettings(string excelPath, string pdfPath)
{
var workbook = new Workbook();
workbook.LoadFromFile(excelPath);

foreach (Worksheet sheet in workbook.Worksheets)
{
sheet.PageSetup.PaperSize = PaperSizeType.PaperA4;
sheet.PageSetup.Orientation = PageOrientationType.Landscape;
sheet.PageSetup.FitToPagesWide = 1;
sheet.PageSetup.FitToPagesTall = 0;
}

workbook.SaveToFile(pdfPath, FileFormat.PDF);
}

横に長いExcel表をPDF化する場合は、FitToPagesWide = 1のように横幅を1ページに収める設定が有効です。ただし、列数が多すぎると文字が小さくなりすぎるため、帳票設計の段階でPDF化を意識してレイアウトを作ることが重要です。

5-6. 日本語フォントや罫線が崩れる場合の対処法

日本語フォントが文字化けする場合や、PDFで文字幅がずれる場合は、実行環境に対象フォントが存在しないことが原因になっている可能性があります。

Windowsではメイリオ、Yu Gothic、MS ゴシックなどが使われることが多いですが、LinuxやDocker環境では同じフォントが入っていない場合があります。

対処法としては、次の方法があります。

実行環境に日本語フォントをインストールする。Excelテンプレートで汎用的なフォントを使う。列幅に余裕を持たせる。行高を固定する。PDF変換前に印刷プレビュー相当の確認を行う。罫線は細すぎる線を避ける。画像や図形がセルに重ならないように配置する。

特にLinux環境では、日本語フォントを追加しないとPDF出力時に文字が豆腐化したり、別フォントに置き換わったりすることがあります。

6. 有料ライブラリでExcelをPDFに変換する実装例

商用システムでExcelをPDFに変換する場合は、有料ライブラリを使うことで安定性と変換精度を確保しやすくなります。

ここでは、代表例としてAspose.Cells for .NETを使った実装例を紹介します。

6-1. 有料ライブラリを使うべきケース

有料ライブラリを使うべきケースは、次のような場合です。

請求書や見積書など、帳票の見た目が重要な場合。グラフ、画像、図形、罫線を含むExcelをPDF化する場合。ASP.NET CoreやWindowsサービスで安定運用したい場合。大量ファイルをバッチ処理したい場合。商用サポートが必要な場合。無料ライブラリの制限に引っかかる場合。クラウドやDockerで運用したい場合。

業務システムでは、PDFのレイアウト崩れがそのまま問い合わせや障害につながります。そのため、コストだけでなく、変換精度と保守性を重視して選ぶことが重要です。

6-2. 高精度変換に強いライブラリの特徴

高精度なExcel PDF変換に強いライブラリには、次のような特徴があります。

印刷範囲を正しく反映できる。改ページを再現できる。グラフや画像をPDFに出力できる。日本語フォントに対応できる。条件付き書式を反映できる。複数シートをまとめてPDF化できる。パスワードや透かしなどのPDF機能に対応できる。サーバー環境での利用を想定している。

特に帳票用途では、Excelの見た目だけでなく、印刷時の見た目がPDFに反映されるかが重要です。

6-3. ExcelファイルをPDFに変換する基本コード

Aspose.Cellsを使う場合は、NuGetからパッケージを追加します。

Bash
dotnet add package Aspose.Cells

基本的な変換コードは次のとおりです。

C#
using Aspose.Cells;

public class ExcelToPdfAspose
{
public static void ConvertExcelToPdf(string excelPath, string pdfPath)
{
var workbook = new Workbook(excelPath);

var options = new PdfSaveOptions
{
OnePagePerSheet = false,
AllColumnsInOnePagePerSheet = false
};

workbook.Save(pdfPath, options);
}
}

横に長い表を1ページ幅に収めたい場合は、次のように設定します。

C#
using Aspose.Cells;

public static void ConvertFitWidth(string excelPath, string pdfPath)
{
var workbook = new Workbook(excelPath);

foreach (Worksheet worksheet in workbook.Worksheets)
{
PageSetup pageSetup = worksheet.PageSetup;
pageSetup.FitToPagesWide = 1;
pageSetup.FitToPagesTall = 0;
}

var options = new PdfSaveOptions
{
AllColumnsInOnePagePerSheet = true
};

workbook.Save(pdfPath, options);
}

6-4. グラフ・画像・印刷範囲を含むPDF変換

有料ライブラリを使う場合、Excelに含まれるグラフ、画像、図形、罫線、印刷範囲なども比較的高精度にPDFへ反映できます。

印刷範囲を設定してPDF化する例は次のとおりです。

C#
using Aspose.Cells;

public static void ConvertPrintAreaToPdf(string excelPath, string pdfPath)
{
var workbook = new Workbook(excelPath);
var worksheet = workbook.Worksheets[0];

worksheet.PageSetup.PrintArea = "A1:H40";
worksheet.PageSetup.PaperSize = PaperSizeType.PaperA4;
worksheet.PageSetup.Orientation = PageOrientationType.Portrait;

workbook.Save(pdfPath, new PdfSaveOptions());
}

グラフや画像を含むExcelをPDFにする場合、基本的にはブックを読み込んでSaveするだけで出力できます。

C#
var workbook = new Workbook(@"C:\work\report_with_chart.xlsx");
workbook.Save(@"C:\work\report_with_chart.pdf", SaveFormat.Pdf);

ただし、使用しているフォント、画像形式、グラフの種類によっては出力結果が変わる可能性があります。本番運用前には、実際に利用するテンプレートで必ず比較テストを行いましょう。

6-5. パスワード付きPDFや透かしへの対応

有料ライブラリでは、PDFのセキュリティ設定や透かしに対応できる場合があります。

たとえば、PDFにパスワードを設定したい場合や、社外秘、見本、承認前などの透かしを入れたい場合です。

Aspose.CellsではPDF保存時のセキュリティ設定を指定できます。

C#
using Aspose.Cells;
using Aspose.Cells.Rendering.PdfSecurity;

public static void ConvertWithPdfPassword(string excelPath, string pdfPath)
{
var workbook = new Workbook(excelPath);

var options = new PdfSaveOptions();

options.SecurityOptions = new PdfSecurityOptions
{
UserPassword = "user-password",
OwnerPassword = "owner-password",
ExtractContentPermission = false,
PrintPermission = true
};

workbook.Save(pdfPath, options);
}

透かしについては、Excel側に図形や背景文字として挿入してからPDF化する方法と、PDF生成後にPDF編集ライブラリで追加する方法があります。

帳票システムでは、ExcelからPDFへの変換だけでなく、PDF生成後の暗号化、結合、分割、電子署名などが必要になることもあります。その場合は、PDF操作ライブラリとの組み合わせも検討しましょう。

7. LibreOfficeをC#から呼び出してExcelをPDFに変換する方法

LibreOfficeを使うと、Microsoft OfficeなしでExcelファイルをPDFに変換できます。

C#からはProcessクラスを使ってLibreOfficeのコマンドを実行します。サーバーやLinux環境で無料のPDF変換手段を探している場合に有力な選択肢です。

7-1. LibreOfficeを使うメリット

LibreOfficeを使うメリットは、無料で利用でき、WindowsとLinuxの両方に対応していることです。

また、コマンドラインでPDF変換できるため、C#アプリケーションから外部プロセスとして呼び出しやすいです。

主なメリットは次のとおりです。

Microsoft Officeが不要。無料で利用できる。Linuxサーバーでも使える。コマンドラインでPDF変換できる。大量ファイルのバッチ変換に組み込みやすい。

一方で、Microsoft Excelと完全に同じ表示結果になるとは限りません。Excelで作成した帳票をLibreOfficeで開いたときにレイアウトが崩れる場合は、PDF変換結果にも影響します。

7-2. コマンドラインでExcelをPDF変換する方法

LibreOfficeをインストールすると、sofficeまたはlibreofficeコマンドを使ってPDF変換できます。

Windowsの場合の例です。

Bash
soffice --headless --convert-to pdf --outdir C:\work\pdf C:\work\excel\sample.xlsx

Linuxの場合の例です。

Bash
libreoffice --headless --convert-to pdf --outdir /work/pdf /work/excel/sample.xlsx

--headlessは画面を表示せずに実行するオプションです。--convert-to pdfでPDF変換を指定し、--outdirで出力先ディレクトリを指定します。

7-3. C#のProcessからLibreOfficeを実行するコード例

C#からLibreOfficeを呼び出す基本コードは次のとおりです。

C#
using System;
using System.Diagnostics;
using System.IO;

public class ExcelToPdfLibreOffice
{
public static void ConvertExcelToPdf(string libreOfficePath, string excelPath, string outputDirectory)
{
if (!File.Exists(excelPath))
{
throw new FileNotFoundException("Excelファイルが見つかりません。", excelPath);
}

if (!Directory.Exists(outputDirectory))
{
Directory.CreateDirectory(outputDirectory);
}

var arguments =
$"--headless --convert-to pdf --outdir \"{outputDirectory}\" \"{excelPath}\"";

var startInfo = new ProcessStartInfo
{
FileName = libreOfficePath,
Arguments = arguments,
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true
};

using var process = Process.Start(startInfo);

if (process == null)
{
throw new InvalidOperationException("LibreOfficeプロセスを開始できませんでした。");
}

string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();

process.WaitForExit();

if (process.ExitCode != 0)
{
throw new InvalidOperationException(
$"LibreOfficeによるPDF変換に失敗しました。ExitCode={process.ExitCode}, Error={error}");
}
}
}

呼び出し例です。

C#
var libreOfficePath = @"C:\Program Files\LibreOffice\program\soffice.exe";
var excelPath = @"C:\work\excel\sample.xlsx";
var outputDirectory = @"C:\work\pdf";

ExcelToPdfLibreOffice.ConvertExcelToPdf(
libreOfficePath,
excelPath,
outputDirectory
);

Linuxでは、libreOfficePath/usr/bin/libreofficeなどを指定します。

C#
var libreOfficePath = "/usr/bin/libreoffice";
var excelPath = "/work/excel/sample.xlsx";
var outputDirectory = "/work/pdf";

7-4. Windows・Linux環境での実行時の違い

WindowsとLinuxでは、LibreOfficeの実行ファイルパスやフォント環境が異なります。

Windowsでは、通常次のようなパスになります。

C:\Program Files\LibreOffice\program\soffice.exe

Linuxでは、次のようなコマンド名で実行できることが多いです。

/usr/bin/libreoffice

また、Linuxでは日本語フォントが標準で入っていない場合があります。その場合、PDF変換時に文字化けやフォント置換が発生します。

LinuxサーバーやDockerで使う場合は、日本語フォントをインストールしておきましょう。

Bash
apt-get update
apt-get install -y fonts-noto-cjk

フォントを追加した後は、LibreOfficeがそのフォントを認識できる状態で実行する必要があります。

7-5. サーバー運用時の注意点

LibreOfficeをサーバーで使う場合は、同時実行に注意が必要です。

複数のリクエストから同時にLibreOfficeを実行すると、ユーザープロファイルの競合や一時ファイルの衝突が起きることがあります。大量変換を行う場合は、キューを使って順番に処理する、同時実行数を制限する、プロセスごとに専用の一時ディレクトリを使うなどの対策が必要です。

また、変換処理がハングする可能性も考慮して、タイムアウトを設定しましょう。

C#
bool exited = process.WaitForExit(60_000);

if (!exited)
{
process.Kill(true);
throw new TimeoutException("LibreOfficeによるPDF変換がタイムアウトしました。");
}

さらに、アップロードされたExcelファイルを変換する場合は、マクロや外部リンクを含むファイルに注意が必要です。信頼できないファイルをそのまま処理すると、セキュリティリスクやリソース消費の原因になります。

8. C#でExcelをPDF化するときの比較表

ここでは、C#でExcelをPDFに変換する主な方法を、実務で重要になる観点から比較します。

8-1. Interop・無料ライブラリ・有料ライブラリ・LibreOfficeの比較

比較項目Interop無料ライブラリ有料ライブラリLibreOffice
Office不要×
Windows以外で利用×ライブラリ次第ライブラリ次第
変換精度高い中程度高い中〜高
実装の簡単さ
サーバー利用×
大量変換×
コストOfficeライセンス無料または制限付き有料無料
ライセンス確認必要必要必要必要
日本語フォント対応Excel依存環境依存比較的強い環境依存

8-2. 変換精度の比較

変換精度を最も重視する場合は、Interopまたは有料ライブラリが有利です。

Interopは実際のExcelを使うため、Excelで見た表示や印刷プレビューに近いPDFを出力しやすいです。ただし、サーバー運用には向きません。

有料ライブラリはOffice不要でありながら、印刷範囲、改ページ、グラフ、画像、フォントなどへの対応が充実しています。そのため、商用システムでのPDF変換には最もバランスが良い選択肢です。

LibreOfficeは無料で高機能ですが、Excelとはレンダリング結果が異なる場合があります。特に細かい帳票レイアウトでは事前検証が重要です。

8-3. 実装難易度の比較

実装だけで見ると、Interopとライブラリ利用は比較的簡単です。

InteropはExportAsFixedFormatを呼ぶだけでPDF化できますが、COMオブジェクトの解放やExcelプロセスの管理が必要です。

Office不要ライブラリは、ブックを読み込んでSaveSaveToFileを呼ぶだけでPDF化できるものが多く、C#コードとしては扱いやすいです。

LibreOfficeはコマンドライン実行自体は簡単ですが、実行ファイルのパス、フォント、同時実行、タイムアウト、一時ファイルなどの運用面を考える必要があります。

8-4. コスト・ライセンスの比較

コストを抑えるなら、無料ライブラリまたはLibreOfficeが候補になります。

ただし、無料ライブラリには制限がある場合があります。ページ数制限、シート数制限、出力PDFへの透かし、商用利用不可などの条件がある場合は、本番システムには使いにくくなります。

有料ライブラリはライセンス費用がかかりますが、変換精度、サポート、商用利用の安心感があります。業務システムでは、開発工数や障害対応コストを考えると、有料ライブラリのほうが結果的に安くなることもあります。

8-5. サーバー利用・バッチ処理への適性比較

サーバーやバッチ処理で使う場合は、Interopは避けるのが基本です。

大量変換やWebアプリへの組み込みでは、Office不要の有料ライブラリが最も安定しやすいです。無料で運用したい場合はLibreOfficeも候補になりますが、同時実行制御とエラーハンドリングをしっかり設計する必要があります。

用途おすすめ
ローカルPCで単発変換Interop
社内ツールで少量変換無料ライブラリまたはLibreOffice
ASP.NET CoreでPDF生成有料ライブラリ
Linuxサーバーで無料変換LibreOffice
商用帳票システム有料ライブラリ
大量バッチ変換有料ライブラリまたはLibreOffice

9. ExcelからPDF変換でよくあるエラーと対処法

C#でExcelをPDFに変換するときは、ファイルパス、権限、フォント、レイアウト、COM、外部プロセスなど、さまざまな原因でエラーが発生します。

ここでは、よくあるトラブルと対処法を解説します。

9-1. ファイルが開けない・パスが見つからない

最も多いエラーは、Excelファイルのパスが間違っているケースです。

相対パスを使っていると、実行ディレクトリが想定と異なり、ファイルが見つからないことがあります。特にASP.NET CoreやWindowsサービスでは、カレントディレクトリが開発時と本番環境で変わることがあります。

対策として、絶対パスを使い、変換前にファイルの存在を確認しましょう。

C#
if (!File.Exists(excelPath))
{
throw new FileNotFoundException("Excelファイルが見つかりません。", excelPath);
}

var outputDirectory = Path.GetDirectoryName(pdfPath);

if (!Directory.Exists(outputDirectory))
{
Directory.CreateDirectory(outputDirectory!);
}

また、ファイル名に日本語や空白が含まれる場合でも問題が起きないように、外部コマンドでは必ずダブルクォートで囲みます。

9-2. COMExceptionが発生する

Interopを使っている場合、COMExceptionが発生することがあります。

主な原因は、Excelがインストールされていない、実行ユーザーに権限がない、Excelファイルが破損している、別プロセスで開かれている、ダイアログが表示されて処理が止まっている、COMオブジェクトが正しく解放されていない、などです。

対処法としては、次の点を確認します。

Excelが正しくインストールされているか。対象ファイルをExcelで手動で開けるか。ファイルが読み取り専用になっていないか。実行ユーザーにデスクトップ操作権限があるか。処理後にQuitReleaseComObjectを呼んでいるか。サーバー環境でInteropを使っていないか。

特にサーバーでCOMExceptionが頻発する場合は、Interopを継続するより、Office不要ライブラリへ移行するほうが安全です。

9-3. 日本語が文字化けする

日本語が文字化けする場合、ほとんどはフォント環境の問題です。

Excelファイルで使用しているフォントが、PDF変換を実行する環境に存在しない場合、別フォントに置換されたり、文字が表示されなかったりします。

対策は次のとおりです。

実行環境に日本語フォントをインストールする。Excelテンプレートで使用フォントを統一する。LinuxではNoto Sans CJKなどを追加する。フォント置換設定が可能なライブラリでは置換ルールを設定する。PDF変換前後で文字幅を確認する。

日本語帳票では、フォントが変わるだけで列幅や改行位置がずれることがあります。文字化けだけでなく、レイアウト崩れにも注意しましょう。

9-4. レイアウトや改ページが崩れる

レイアウトや改ページが崩れる原因は、ページ設定が不十分な場合や、変換エンジンがExcelと異なる場合です。

対策として、Excelテンプレート側で印刷範囲、用紙サイズ、余白、拡大縮小、改ページを明示的に設定しておきます。

C#側でも、必要に応じてページ設定を調整します。

C#
worksheet.PageSetup.PaperSize = PaperSizeType.PaperA4;
worksheet.PageSetup.Orientation = PageOrientationType.Portrait;
worksheet.PageSetup.FitToPagesWide = 1;
worksheet.PageSetup.FitToPagesTall = 0;

また、PDF化を前提としたExcelテンプレートでは、セル結合を多用しすぎない、極端に狭い列幅を避ける、画像をセルに合わせて固定するなどの設計が重要です。

9-5. 画像・グラフ・罫線が正しく出力されない

画像、グラフ、図形、罫線が正しく出力されない場合は、ライブラリの対応範囲やExcelファイルの作り方に原因があることがあります。

特に無料ライブラリやLibreOfficeでは、複雑なグラフや特殊な図形がExcelと同じ見た目にならない場合があります。

対策は次のとおりです。

実際のテンプレートで変換結果を確認する。複雑なグラフは画像化して貼り付ける。罫線は標準的な線種を使う。図形の重なりや透明度を避ける。Excel側で印刷プレビューを確認する。高精度が必要な場合は有料ライブラリを検討する。

帳票では、罫線が消えるだけでも見た目の印象が大きく変わります。出力後PDFを自動テストや目視確認の対象に含めると安心です。

9-6. サーバー実行時にPDFが生成されない

サーバーでPDFが生成されない場合、実行権限、保存先権限、一時ディレクトリ、フォント、外部プロセス、タイムアウトなどを確認します。

ASP.NET Coreで実行する場合、アプリケーションプールやサービスアカウントが保存先ディレクトリに書き込み権限を持っている必要があります。

LibreOfficeを使っている場合は、サーバー上で同じコマンドを手動実行して、PDFが生成されるか確認しましょう。

Bash
libreoffice --headless --convert-to pdf --outdir /tmp/output /tmp/input/sample.xlsx

手動では成功するがC#から失敗する場合は、実行ユーザー、環境変数、パス、権限が異なる可能性があります。

10. 実務で使うための設計ポイント

C#でExcelをPDFに変換する処理を実務で使う場合は、変換コードだけでなく、ファイル管理、例外処理、ログ、セキュリティ、スケーラビリティを考慮する必要があります。

10-1. 一括変換・バッチ処理への対応

複数のExcelファイルを一括でPDF化する場合は、1ファイルごとに例外処理を行い、失敗しても全体が止まらない設計にします。

C#
foreach (var excelPath in Directory.GetFiles(inputDirectory, "*.xlsx"))
{
try
{
var fileName = Path.GetFileNameWithoutExtension(excelPath);
var pdfPath = Path.Combine(outputDirectory, fileName + ".pdf");

ConvertExcelToPdf(excelPath, pdfPath);

Console.WriteLine($"成功: {excelPath}");
}
catch (Exception ex)
{
Console.Error.WriteLine($"失敗: {excelPath}, Error: {ex.Message}");
}
}

大量変換では、並列処理をしたくなることがありますが、利用するライブラリや外部ツールがスレッドセーフかどうかを確認する必要があります。

LibreOfficeやInteropでは、無制限に並列実行すると不安定になりやすいため、キューやワーカーで同時実行数を制限する設計が安全です。

10-2. ASP.NET CoreでアップロードされたExcelをPDF化する方法

ASP.NET CoreでアップロードされたExcelファイルをPDF化する場合は、一時ディレクトリに保存してから変換し、PDFを返却または保存します。

C#
[HttpPost("convert")]
public async Task<IActionResult> ConvertExcelToPdf(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest("ファイルが指定されていません。");
}

var extension = Path.GetExtension(file.FileName).ToLowerInvariant();

if (extension != ".xlsx" && extension != ".xls")
{
return BadRequest("Excelファイルを指定してください。");
}

var tempDirectory = Path.Combine(Path.GetTempPath(), "excel-pdf");
Directory.CreateDirectory(tempDirectory);

var inputPath = Path.Combine(tempDirectory, Guid.NewGuid() + extension);
var outputPath = Path.ChangeExtension(inputPath, ".pdf");

try
{
using (var stream = System.IO.File.Create(inputPath))
{
await file.CopyToAsync(stream);
}

ExcelToPdfAspose.ConvertExcelToPdf(inputPath, outputPath);

var pdfBytes = await System.IO.File.ReadAllBytesAsync(outputPath);

return File(pdfBytes, "application/pdf", "converted.pdf");
}
finally
{
if (System.IO.File.Exists(inputPath))
{
System.IO.File.Delete(inputPath);
}

if (System.IO.File.Exists(outputPath))
{
System.IO.File.Delete(outputPath);
}
}
}

アップロードファイルを扱う場合は、拡張子だけでなくファイルサイズ、保存先、ウイルスチェック、マクロ、外部リンクなどにも注意が必要です。

10-3. 変換後PDFの保存先設計

PDFの保存先は、用途によって設計が変わります。

一時的にダウンロードさせるだけなら、一時ディレクトリに保存して処理後に削除します。長期保管する場合は、ファイルサーバー、クラウドストレージ、データベース、オブジェクトストレージなどを検討します。

保存先設計で考えるべき点は次のとおりです。

ファイル名の重複を避ける。ユーザーごとにアクセス権を分ける。保存期間を決める。バックアップ対象にするか決める。個人情報を含むPDFを暗号化するか検討する。不要になったPDFを自動削除する。

ファイル名には、Guidや業務ID、日時を組み合わせると重複を避けやすくなります。

C#
var fileName = $"{DateTime.Now:yyyyMMddHHmmss}_{Guid.NewGuid():N}.pdf";
var pdfPath = Path.Combine(outputDirectory, fileName);

10-4. 例外処理とログ出力

PDF変換処理では、変換失敗の原因を後から追跡できるようにログを残すことが重要です。

ログには、入力ファイル名、出力ファイル名、処理開始時刻、処理終了時刻、処理時間、例外メッセージ、スタックトレース、実行ユーザー、ライブラリのバージョンなどを記録するとよいです。

C#
try
{
var start = DateTime.Now;

ConvertExcelToPdf(inputPath, outputPath);

var elapsed = DateTime.Now - start;

logger.LogInformation(
"Excel PDF変換成功。Input={Input}, Output={Output}, ElapsedMs={ElapsedMs}",
inputPath,
outputPath,
elapsed.TotalMilliseconds
);
}
catch (Exception ex)
{
logger.LogError(
ex,
"Excel PDF変換失敗。Input={Input}, Output={Output}",
inputPath,
outputPath
);

throw;
}

エラー発生時にユーザーへ詳細な内部エラーをそのまま返すのは避けましょう。画面には一般的なエラーメッセージを表示し、詳細はサーバーログに記録する設計が安全です。

10-5. セキュリティ面で注意すべきこと

ユーザーがアップロードしたExcelファイルをPDFに変換する場合は、セキュリティに注意が必要です。

特に、マクロ付きファイル、外部リンク、巨大ファイル、壊れたファイル、数式による外部参照などはリスクになります。

対策として、次の点を検討します。

許可する拡張子を制限する。ファイルサイズの上限を設定する。マクロ付きファイルを拒否する。外部リンクを更新しない。変換処理にタイムアウトを設定する。一時ファイルを必ず削除する。保存先のアクセス権を制限する。PDFに個人情報が含まれる場合は保管ポリシーを決める。

ExcelからPDFへの変換は、単なるファイル変換ではなく、外部ファイルを解析する処理です。Webアプリに組み込む場合は、入力検証と実行環境の隔離を意識しましょう。

11. 目的別おすすめのC# Excel PDF変換方法

最後に、目的別におすすめのC# Excel PDF変換方法を整理します。

11-1. ローカルPCで簡単に変換したい場合

ローカルPCで管理者や担当者が手動実行するツールなら、Microsoft Office Interopが使いやすいです。

Excelがインストールされていれば、ExportAsFixedFormatで簡単にPDF変換できます。Excelの印刷設定をそのまま使えるため、見た目の再現性も高いです。

ただし、Excelプロセスの解放やファイルロックには注意が必要です。また、将来的にサーバー化する予定がある場合は、最初からOffice不要ライブラリを選んだほうが移行しやすくなります。

11-2. Officeなしの環境で変換したい場合

Officeをインストールできない環境では、Office不要の.NETライブラリまたはLibreOfficeを使います。

C#アプリケーションに組み込みやすく、安定性を重視するなら有料ライブラリがおすすめです。コストを抑えたい場合やLinuxサーバーで簡易変換したい場合は、LibreOfficeも候補になります。

11-3. 無料で実装したい場合

無料で実装したい場合は、FreeSpire.XLSやLibreOfficeを検討します。

ただし、無料ライブラリには制限がある場合があります。ページ数やシート数の制限、商用利用条件、透かしの有無などを確認してください。

小規模な社内ツールや検証用途であれば無料ライブラリでも十分な場合がありますが、帳票品質や商用利用が重要な場合は、有料ライブラリも比較対象に入れるべきです。

11-4. 商用システムで安定運用したい場合

商用システムで安定運用したい場合は、Office不要の有料ライブラリがおすすめです。

Interopはサーバー運用に向かず、LibreOfficeは無料で便利ですが環境差異や同時実行制御が課題になります。

有料ライブラリであれば、サーバーサイド利用を前提に設計されているものが多く、変換精度やサポート面でも安心です。

請求書、契約書、見積書、社外提出資料など、レイアウト崩れが許されないPDFを生成する場合は、有料ライブラリを使う価値があります。

11-5. サーバーやクラウド環境でPDF変換したい場合

ASP.NET Core、Azure、AWS、Linux、Dockerなどのサーバーやクラウド環境でExcelをPDFに変換する場合は、Interopを避けるのが基本です。

おすすめは、Office不要の有料ライブラリです。クラウド環境でもデプロイしやすく、同時実行やバッチ処理にも対応しやすいです。

無料で運用したい場合はLibreOfficeも選択肢ですが、フォント、権限、同時実行、一時ファイル、タイムアウトをしっかり設計する必要があります。

まとめ

C#でExcelをPDFに変換する方法は、主にMicrosoft Office Interop、Office不要ライブラリ、LibreOfficeの3種類があります。

ローカルPCで簡単に変換したい場合は、Interopが分かりやすい方法です。Excel本体のPDF出力機能を使うため、再現性は高いですが、Officeのインストールが必要で、サーバー運用には向きません。

Office不要でExcelをPDFに変換したい場合は、.NETライブラリを使う方法が有力です。無料ライブラリは低コストで始められますが、機能制限やライセンス条件の確認が必要です。商用システムや高精度な帳票出力では、有料ライブラリを使うほうが安定しやすくなります。

LibreOfficeは無料で使える強力な選択肢です。WindowsだけでなくLinuxでも利用でき、C#からProcessで呼び出せます。ただし、Excelとのレイアウト差異、フォント、同時実行、タイムアウトなどの運用面に注意が必要です。

最終的な選び方は次のようになります。

目的おすすめ方法
ローカルPCで手軽にPDF化Microsoft Office Interop
OfficeなしでPDF化Office不要ライブラリ
無料でPDF化FreeSpire.XLSまたはLibreOffice
商用システムで安定運用有料ライブラリ
Linux・クラウドで変換有料ライブラリまたはLibreOffice
高精度な帳票PDF有料ライブラリ

C#でExcelをPDFに変換する処理は、実装だけなら数行で書ける場合もあります。しかし、実務ではレイアウト、フォント、例外処理、ログ、セキュリティ、ライセンスまで含めて設計することが重要です。

小規模な変換なら無料ライブラリやLibreOffice、本格的な商用システムならOffice不要の有料ライブラリを中心に検討すると、安定したExcel PDF変換を実現しやすくなります。