Feedback

C# - Export Office Dokument nach PDF / XPS

Veröffentlicht von am 20.07.2010
(0 Bewertungen)
Zeigt wie man mit > Office 2007 Datei als DPF oder XPS speichert. Dieses Snippet beschreibt das Beispiel anhand von Excel. Evtl. ist ein Office Addin notwendig, ist bei Microsoft frei verfügbar.
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.

// Ort der Exceldatei
string QuelleExcelDatei = @"C:\ExcelDatei.xls";
// Speichertort der PDF Datei
string ZielPdfDatei = @"C:\Export.pdf";

// Leere Datentyp für die Com Schnittstelle
object m = Type.Missing;

// Instanz der Excel Anwendunng erstellen
Microsoft.Office.Interop.Excel.ApplicationClass app = new Microsoft.Office.Interop.Excel.ApplicationClass();
      
// Instand der Exceldatei
Microsoft.Office.Interop.Excel.Workbook workbook = app.Workbooks.Open(QuelleExcelDatei, m, m, m, m, m, m, m, m, m, m, m, m, m, m);

// Export in das Zielformat und Position
workbook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, ZielPdfDatei, m, m, m, m, m, m, m);

// Die Exceldatei und Anwendung schließen
workbook.Close(m, m, m);
app.Quit();

// Die Com Objekte freigeben
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(app);

// Die Speichert freigeben
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();

4 Kommentare zum Snippet

timmi schrieb am 20.07.2010:
Das Add-In das du (denke ich) meinst und benötigt wird nennt sich Primary Interop Assemblies (PIA).

Möchte man diese Funktionalität automatisiert auf einem Server betreiben, so muss Office auf dem Server installiert sein, was ich als sehr unschön empfinde.

Trotzdem gut zu wissen DAS es möglich ist und WIE es möglich ist, vielen Dank für diesen Snippet. :)
RoSi schrieb am 20.07.2010:
Aus eigener leidvoller Erfahrung (es war jemand nicht davon abzubringen, Excel auf dem Server einzusetzen) empfehle ich, das FinalReleaseComObject anders zu verwenden:


ReleaseComObj(workbook);
ReleaseComObj(app);

private static void ReleaseComObj(object o){
try{
int i;
do{
i = System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
} while(i>0);
}
catch{}
finally{
o = null;
}
}


Ohne die do-while-Schleife blieben manche Instanzen im Taskmanager erhalten und wurden nicht komplett beendet.
RoSi schrieb am 20.07.2010:
@timmi: ich glaube er meint die Möglichkeit, generell unter Office 2007 PDFs zu speichern. Das ging in der Tat nur, wenn er ein Add-In installiert:
http://www.microsoft.com/downloads/details.aspx?familyid=f1fc413c-6d89-4f15-991b-63b07ba5f2e5&displaylang=de
timmi schrieb am 20.07.2010:
@RoSi: Fährt man fleißig Updates ist das mittlerweile eigentlich nicht mehr nötig, deswegen schrieb er auch "evtl.". ;-)
 

Logge dich ein, um hier zu kommentieren!