はじめに
案件で必要になりExcelをPDFに変換する方法を色々調べたので、その結果をざっくりまとめておきます。個別の変換方法に関する解説記事は結構あるんですけど、まとめ記事的なのは意外とないんですよね。
WebAPI
月あたりの変換件数が数万件までは標準の従量課金プランがあって、それを超える場合はカスタマイズ契約が必要になるというパターンが多いです。スモールスタートできるのが嬉しいです。
細かくは説明しきれないので、代表的なAPIサービスへのリンクだけ貼っておきます。
Adobe
ConvertAPI
Nutrient
Cloudmersive
サードパーティライブラリ
中には無償のものもありますが、基本的に有償です。変換回数の制限は無いことが多いですが、その分だけ初期費用やランニングコスト(ライセンス更新・サブスクリプション)は大きくなりがちです。
各プログラミング言語に様々なライブラリがありますが、C#のいくつかをピックアップするにとどめます。
Spire.XLS for .NET
Aspose.Cells for .NET
Syncfusion
Excel to PDF .Net
GemBox.Spreadsheet
LibreOffice
オープンソースのオフィスソフトウェアであるLibreOfficeを使ってコマンドラインでPDF変換を行うこともできます。無料なのでとりあえず試してみると良いと思います。ただ、あんまりきれいには変換できない印象です。
やり方は以下の記事に簡潔にまとまっています。
環境構築が少しめんどくさいですが、コンテナを使えば楽できそうですね。
COMオブジェクト
COMオブジェクトは、プログラムからExcelなどのアプリケーションを操作するための仕組みです。動作するためにはExcelがインストールされている必要があります。そのため、例えばAzure FunctionsなどのPaaS環境では以下のコードは失敗するのでご注意ください。
Excelのライセンスさえあれば追加費用無しで変換できるので、ローカル環境での作業自動化などに適しています。ここではPowerShellとC#だけ例示しますが、Pythonでもwin32comを使えば同じことができます。
PowerShell
メインの処理はこんな感じです。
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open($inputFilePath)
$workbook.ExportAsFixedFormat(0, $outputFilePath)
C#
Visual StudioでプロジェクトにCOM参照を追加し、
using Microsoft.Office.Interop.Excel
した上でこんな風に書きます。
var excel = new Application();
var workbook = excel.Workbooks.Open(inputFilePath);
workbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, outputFilePath);
PowerAutomate × OneDrive
PowerAutomateのOneDriveコネクタを使用する方法もあります。個人のMicrosoftアカウントを使うので、これも個人利用向けのやり方です。ノーコードでできるのでお手軽なのが良いところ。
2024年12月現在、OneDriveコネクタでのファイルの変換はプレビュー機能です。最新の状況は公式ドキュメントをご参照ください。
ちょっとお金はかかりますが、Logic Appsでも全く同じことができます。
おわりに
ExcelをPDFに変換する方法についてざっと紹介しました。何かの助けになれば幸いです。
念のためですが、実際に動作確認を行って期待通りに変換されるかを必ず確認するようにしてください。僕も色々と試してみましたが、及第点の出来栄えになった方法は半数にも満たなかったです。
他にもおすすめの方法があればぜひコメントで教えてください。無料で高品質で商用利用OKな変換方法、実はどこかにあったりしないんですかね。