2012-04-22 4 views
7

Je peux prendre avec succès un fichier Excel et l'exporter sous forme de fichier PDF en C#Excel 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; 
    } 
} 

Quel paramètre ou objet ai-je besoin d'accéder pour enregistrer le fichier Excel que la largeur de la page au lieu de hauteur de la page?

+0

La largeur et la hauteur de la page sont les propriétés d'une imprimante. Vous ne vous en occupez pas lorsque vous générez le pdf, l'utilisateur le sélectionne lors de * l'impression * du pdf. Choisir le mode paysage, généralement. Essayer de le faire tôt pourrait générer un cas grave de crampe du cou. –

+0

Largeur de la page et la hauteur dans la mesure où un document PDF va, n'ont pas besoin d'utiliser des imprimantes. – bl4kh4k

Répondre

13

J'ai trouvé la propriété requise pour forcer l'exportation de votre classeur dans un fichier PDF avec vue Paysage.

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

Vous rock! 1 à coup sûr. – bl4kh4k

+0

@ bl4kh4k Je suis celui qui devrait vous remercier. Je n'ai jamais pensé à faire cela et résolu un problème ennuyeux à moi – Steve

+0

Si vous avez plusieurs feuilles de calcul, utilisez la propriété excelWorkbook.Sheets pour y accéder. À l'aide d'une boucle, vérifiez si elle est de type 'Graphique' ou 'Feuille de travail' avant de lancer la conversion, puis modifiez l'orientation par élément. – zeta

1

S'il vous plaît essayez ceci:

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

Paramètre paramIgnorePrintAreas=true redimensionne la page.

3
  1. Installation de la suite Microsoft Office 2007 Service Pack 3 (SP3) http://www.microsoft.com/en-in/download/details.aspx?id=27838

  2. Installer Microsoft Office 2007 dans: Microsoft Enregistrer en PDF ou XPS http://www.microsoft.com/en-in/download/details.aspx?id=7

Obligatoire: Définir Microsoft XPS Document Writer comme imprimante par défaut dans s erver. Car La fonction ExportAsFixedFormat exécute Microsoft XPS Document Writer pour convertir Excel en PDF.

Cela fonctionne pour moi.

+0

M'a pris 2 jours, avant de réaliser ceci ... – umlcat

+0

Service pack n'est pas nécessaire pour cela. Installez juste le complément. Si le complément n'est pas installé, Excel est si intelligent qu'il va lancer une exception "Invalid Parameter"! – Elmue

Questions connexes