Преобразование всех вложений электронной почты Outlook в PDF - PullRequest
2 голосов
/ 07 января 2011

Я нахожусь в процессе написания надстройки для Outlook07, которая должна хранить текст сообщения электронной почты и все его вложения в отдельных файлах PDF.Конечно, это только для разумных вложений, это не имеет смысла для zip-файлов и тому подобного.

Я дошел до того, что все файлы хранятся в временном каталоге (для каждого письма).Само письмо легко конвертируется, но у меня возникают проблемы с вложениями.

Идея состоит в том, чтобы использовать метод exportAs из каждого соответствующего офисного взаимодействия, поэтому мне не нужно устанавливать дополнительное программное обеспечение на клиентские ПК.

Чтобы экспортировать каждый файл с соответствующим офисным приложением, я сначала должен выяснить, какое офисное приложение может открыть его.Конечно, первое, что приходит в голову, - это попробовать расширения, но должен быть более эффективный способ, чем

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

Я пытался найти что-то в документации MSDN и Google, но Office.InteropsДЕЙСТВИТЕЛЬНО плохо документированы, из-за чего уже было трудно добраться до того места, где я сейчас нахожусь.И открытие документов в указанном выше смысле нигде не рассматривается.

Любой намек вообще сделает меня по-настоящему счастливым.

РЕДАКТИРОВАТЬ - вот пример, как я конвертирую текстовые документы:

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;

РЕДАКТИРОВАТЬ - путь к успеху:

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;

Это выглядит хорошо.Спасибо за помощь, отличный способ начать в выходные дни.

1 Ответ

2 голосов
/ 07 января 2011

Лучше всего использовать реестр, чтобы узнать, какое приложение связано с расширением. Если вы посмотрите на эту ссылку:

Скрипт для привязки расширения к программе

Показывает, где в реестре нужно искать.

...