jianglanshui

 

C#でExcelファイルをPDFに変換するサンプル

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"));

        }




posted on 2013-02-05 08:11 老蒋 阅读(2849) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜