2010-02-19 2 views
0

Итак, у меня есть шаблон слова в качестве ресурса в моем приложении. Я хочу открыть его для создания новых документов, но понятия не имею, как это сделать.Открыть шаблон Word из ресурса с помощью слова interop

Следующий код не работает, очевидно, так как метод требует добавить FilePath (а не байт ресурсов [] объект ...

object tFalse = false; 
object missing = System.Reflection.Missing.Value; 
Word.Application app = null; 
Word.Document document = null; 

object template = Resources.MyTemplate; 
document = app.Documents.Add(ref template, ref tFalse, ref missing, ref missing); 

Но как я этот файл ресурсов в правильный путь?

ответ

0

Вот как я это делаю по большей части. Я ушел из работы между ними и осталось только открыть и закрыть.

private void ProcessWord() 
{ 
    object missing = System.Reflection.Missing.Value; 
    object readOnly = false; 
    object isVisible = false; 
    object fileName = "C:\\temp.dot"; 
    object fileNameSaveAs = "C:\\temp.doc"; 
    object fileFormat = WdSaveFormat.wdFormatRTF; 
    object saveChanges = WdSaveOptions.wdDoNotSaveChanges; 

    Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application(); 

    Documents oDocTmp = oWord.Documents; 
    oWord.Visible = false; 

    //Open the dot file as readonly 
    Document oDoc = oDocTmp.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing); 

    //...do some work 

    //Save the doc 
    oDoc.SaveAs(ref fileNameSaveAs, ref fileFormat, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); 
    // close the open document 
    oDoc.Close(ref saveChanges, ref missing, ref missing); 
    // quit word 
    oWord.Quit(ref saveChanges, ref missing, ref missing); 
} 

Вы также должны смотреть на то, чтобы очистить память, аналогичную:

GC.Collect(); 
GC.WaitForPendingFinalizers(); 
Marshal.FinalReleaseComObject(oWord); 
Marshal.FinalReleaseComObject(oDocTmp); 

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