namespace XXXX
{
/// <summary>
/// Excelファイルを保存する機能を提供します。
/// </summary>
public static class ExcelToPdf
{
/// <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
{
}
}
ComRelease.FinalReleaseComObjects(workbook, workbooks, application);
}
}
}
/// <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)
{
}
}
}
}
}
private void button13_Click(object sender, EventArgs e)
{
const string Dir = @"C:\";
ExcelToPdf.SaveAsPdf(Path.Combine(Dir, "20121219163550.xlsx"), Path.Combine(Dir, "20121219163550.pdf"));
}