C#把Excel转换成PDF出力
第一步:参照追加
第二步:程序代码
Program.cs
using System.IO; namespace ExcelToPdf { class Program { static void Main(string[] args) { const string Dir = @"D:\Sandbox\Console\ExcelToPdf"; ExcelSave.SaveAsPdf(Path.Combine(Dir, "TS0100738771.xlsx"), Path.Combine(Dir, "TS0100738771.pdf")); } } }
ExcelSave.cs
using System; using Microsoft.Office.Interop.Excel; namespace ExcelToPdf { /// <summary> /// Excelファイルを保存する機能を提供します。 /// </summary> public static class ExcelSave { /// <summary> /// ExcelファイルをPDFとして保存します。 /// </summary> /// <param name="excelFilePathName">Excelファイルのパス付きファイル名。</param> /// <param name="saveAsPathName">保存するPDFのパス付きファイル名。</param> /// <remarks> /// <para> /// Excel 2007がインストールされている必要があります。 /// </para> /// <para> /// Office 2007のSP2、またはPDF保存アドインがインストールされている必要があります。</ br> /// http://support.microsoft.com/kb/953195/ja</ br> /// http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyId=F1FC413C-6D89-4F15-991B-63B07BA5F2E5&displaylang=ja /// </para> /// </remarks> public static void SaveAsPdf(string excelFilePathName, string saveAsPathName) { Application application = null; Workbooks workbooks = null; Workbook workbook = null; try { application = new Application(); /* * application.Workbooks.Open(...は、Workbooksオブジェクトの解放処理ができないので不可。 * 必ず変数経由でComRelease.FinalReleaseComObjectsを呼び出すこと。 */ workbooks = application.Workbooks; workbook = workbooks.Open( excelFilePathName, Type.Missing, Type.Missing, Type.Missing, Type.Missing , Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing , Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // http://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.workbook.exportasfixedformat(v=vs.90).aspx workbook.ExportAsFixedFormat( XlFixedFormatType.xlTypePDF, saveAsPathName, XlFixedFormatQuality.xlQualityStandard, true, true, Type.Missing, Type.Missing, false, Type.Missing); } finally { if (workbook != null) { try { workbook.Close(true, Type.Missing, Type.Missing); } catch { } } if (application != null) { try { application.Quit(); } catch { } } Com.ComRelease.FinalReleaseComObjects(workbook, workbooks, application); } } } }
ComRelease.cs
using System;
using System.Runtime.InteropServices;
namespace Com {
/// <summary>
/// COMオブジェクトを解放する機能を提供します。
/// </summary>
public static class ComRelease {
/// <summary>
/// 複数のCOMオブジェクトの参照カウントを0までデクリメントし、解放します。
/// </summary>
/// <param name="objects">解放するCOMオブジェクトの配列。</param>
/// <remarks>解放は配列の要素順に行います。</remarks>
public static void FinalReleaseComObjects(params object[] objects) {
foreach (object o in objects) {
try {
if (o == null)
continue;
if (Marshal.IsComObject(o) == false)
continue;
Marshal.FinalReleaseComObject(o);
} catch (Exception) {
}
}
}
}
}
本文出自 http://blog.jhashimoto.jp/entry/20120220/1329736026