2012-04-22 35 views
7

私は正常にExcelファイルを取り、C#でPDFファイルとしてエクスポートすることができますエクセルExportAsFixedFormat PDF

private static void ExportWorkbookToPDF(string workbook, string output) 
{ 
    if (string.IsNullOrEmpty(workbook) || string.IsNullOrEmpty(output)) 
    { 
     throw new NullReferenceException("Cannot create PDF copy " + 
      "from empty workbook."); 
    } 

    Application excelApplication = new Application(); 
    excelApplication.ScreenUpdating = false; 
    excelApplication.DisplayAlerts = false; 
    excelApplication.Visible = false; 

    Workbook excelWorkbook = excelApplication.Workbooks.Open(
     Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + 
     "\\" + workbook); 

    if (excelWorkbook == null) 
    { 
     excelApplication.Quit(); 
     excelApplication = null; 
     excelWorkbook = null; 

     throw new NullReferenceException("Cannot create new excel workbook."); 
    } 

    try 
    { 
     excelWorkbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, 
      Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + 
      "\\" + output); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 
     Console.ReadLine(); 
    } 
    finally 
    { 
     excelWorkbook.Close(); 
     excelApplication.Quit(); 
     excelApplication = null; 
     excelWorkbook = null; 
    } 
} 

私は、ページ幅の代わりとしてExcelファイルを保存するためにアクセスする必要があるかどうパラメータまたはオブジェクトページの高さですか?

+0

ページの幅と高さは、プリンタのプロパティです。 pdfを生成するときにあなたはそれを処理しません。ユーザーはpdfを*印刷*するときにそれを選択します。通常は風景モードを選択します。それを早期にしようとすると、重篤な頸部の痙攣が発生します。 –

+0

ページの幅と高さは、PDF文書がある限り、プリンタを使用する必要はありません。 – bl4kh4k

答えて

13

横向きビューのPDFでブックを強制的にエクスポートするために必要なプロパティが見つかりました。

try 
{ 
    ((Microsoft.Office.Interop.Excel._Worksheet) 
    excelWorkbook.ActiveSheet).PageSetup.Orientation = 
    Microsoft.Office.Interop.Excel.XlPageOrientation.xlLandscape; 

    excelWorkbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, 
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + 
     "\\" + output); 
} 
+0

ロック! 1アップを確実にしてください。 – bl4kh4k

+0

@ bl4kh4k私はあなたに感謝する人です。私はこれをやろうとは考えておらず、厄介な問題を解決しました – Steve

+0

複数のワークシートがある場合は、プロパティexcelWorkbook.Sheetsを使ってそれらにアクセスしてください。ループを使用して、キャストする前に 'Chart'または 'Worksheet'のタイプであるかどうかを確認してから、アイテムごとの方向を変更します。 – zeta

1

これを試してください:

object misValue = System.Reflection.Missing.Value; 
string paramExportFilePath = @"C:\Test2.pdf"; 
Excel.XlFixedFormatType paramExportFormat = Excel.XlFixedFormatType.xlTypePDF; 
Excel.XlFixedFormatQuality paramExportQuality = Excel.XlFixedFormatQuality.xlQualityStandard; 
bool paramOpenAfterPublish = false; 
bool paramIncludeDocProps = true; 
bool paramIgnorePrintAreas = true; 
if (xlWorkBook != null)//save as pdf 
    xlWorkBook.ExportAsFixedFormat(paramExportFormat, paramExportFilePath, paramExportQuality,  paramIncludeDocProps, paramIgnorePrintAreas, 1, 1, paramOpenAfterPublish, misValue); 

パラメータparamIgnorePrintAreas=trueは、ページのサイズを変更します。

3
  1. インストール2007年のMicrosoft OfficeスイートService Pack 3(SP3) http://www.microsoft.com/en-in/download/details.aspx?id=27838

  2. インストール2007年のMicrosoft Officeアドイン:マイクロソフト保存PDFまたはXPS http://www.microsoft.com/en-in/download/details.aspx?id=7

として必須:セットMicrosoft XPSドキュメントライターをデフォルトプリンタとしてsエバー。 ExportAsFixedFormat関数が実行されるMicrosoft XPSドキュメントライター ExcelをPDFに変換します。

これは私のために働いています。

+0

これを実現する前に2日間私を受けた... – umlcat

+0

サービスパックは必要ありません。アドインだけをインストールします。アドインがインストールされていない場合、Excelは非常にインテリジェントなので、「無効なパラメータ」例外がスローされます。 – Elmue