2011-01-07 6 views
2

Ich bin dabei, ein Add-in für Outlook07 zu schreiben, das den Text einer E-Mail und alle seine Anhänge in separaten PDF-Dateien speichern sollte. Natürlich ist dies nur für vernünftige Anhänge, es wäre nicht sinnvoll für Zip-Dateien und dergleichen.Konvertieren aller Anlagen einer Outlook-E-Mail in PDF

Ich kam zu dem Punkt, wo alle Dateien in einem temporären Verzeichnis (für jede Mail) gespeichert sind. Die Mail selbst ist leicht zu konvertieren, aber ich habe Probleme mit den Anhängen.

Die Idee ist, die exportAs-Methode von jedem entsprechenden Office-Interop zu verwenden, so dass ich keine zusätzliche Software auf Client-PCs installieren muss.

Um jede Datei mit ihrer entsprechenden Office-Anwendung zu exportieren, muss ich zuerst herausfinden, welche Office-Anwendung sie öffnen kann. Sicher, das erste, was in den Sinn kommt, ist zu versuchen, die Erweiterungen, aber es hat einige effizientere Art und Weise dann

if(fileExt == "doc" or "docx" or "wordformat i forgot") Open Word and Convert 
if(fileExt == "xls") Open Excel and Convert 

ich etwas in den Msdn Dokumentationen zu finden habe versucht, sein und Google aber Office.Interops sind Wirklich schlecht dokumentiert, was es schon schwer gemacht hat dahin zu kommen, wo ich jetzt bin. Und öffnen Dokumente im oben genannten Sinne ist nirgendwo abgedeckt.

Jeder Hinweis überhaupt würde mich wirklich glücklich machen.

EDIT - folgende Beispiel zeigt, wie ich Word-Dokumente konvertieren:

Word.Application wordApp = new Word.Application(); 
object oFilename = filename + ".html"; 
wordApp.Documents.Open(ref oFilename, x,x,x,x,x,x); 
wordApp.ActiveDocument.ExportAsFixedFormat(filename+".pdf", 
Word.WdExportFormat.wdExportFormatPDF,x,x,x,x,x); 
wordApp.ActiveDocument.Close(); 
wordApp.Close(); 
wordApp = null; 

EDIT - der Weg zum Erfolg:

var key = registry.ClassesRoot.OpenSubKey(Path.GetExtension(filename)); 
string openType = key.GetValue("").ToString().ToLower(); 

if(openType.StartsWith("word.")) return DocumentType.Word; 
if(openType.StartsWith("excel.")) return DocumentType.Excel; 

return DocumentType.Unusable; 

Es sieht gut aus. Danke für die Hilfe, tolle Möglichkeit, in das Wochenende zu starten.

Antwort

2

Das Beste, was zu tun wäre, die Registrierung zu verwenden, um herauszufinden, welche Anwendung mit der Erweiterung verknüpft ist. Wenn Sie einen Blick auf diesen Link haben:

Script to associate an extension to a program

Es zeigt, wo in der Registrierung Sie suchen müssen.

+0

Sie haben möglicherweise meine Bedeutung des Öffnens von Word missverstanden. Ich "öffne" das Dokument über Word.Application wordApp = new Word.Application(); und dann wordApp.Open (xxxxx); – TiGoRn

+0

Vielleicht habe ich, als Sie sagten "Sicher, das erste, was einem einfällt, die Erweiterungen auszuprobieren, aber es muss einen effizienteren Weg geben", nahm ich an, Sie wollten herausfinden, welche Anwendung eine Datei mit der angegebenen Erweiterung geöffnet hat . –

+0

Nun ich schätze einen Weg wäre eine Zuordnung der Registry-Relationen zwischen Extensions und Office-Anwendung zu machen und zu verwenden, die bestimmen, mit welcher interop.app ich die Dateien öffne. – TiGoRn