Есть ли простой способ скопировать слово док. в другой с помощью C #? - PullRequest
1 голос
/ 23 апреля 2011

Как я могу скопировать содержимое одного документа Word и вставить его в другой ранее существующий документ Word, используя C #.Я осмотрелся вокруг, но все выглядит очень сложно (я новичок).Конечно, должно быть простое решение?

Я нашел этот код, который не дает мне ошибок, но, похоже, ничего не делает.Это, конечно, не копирование в правильное слово док.выразись так.

Word.Application oWord = new Word.Application();

Word.Document oWordDoc = new Word.Document();
Object oMissing = System.Reflection.Missing.Value;
oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);

oWordDoc.ActiveWindow.Selection.WholeStory();
oWordDoc.ActiveWindow.Selection.Copy();

oWord.ActiveDocument.Select();
oWordDoc.ActiveWindow.Selection.PasteAndFormat(Word.WdRecoveryType.wdPasteDefault);

PS это слово docs .doc

Ответы [ 2 ]

2 голосов
/ 29 августа 2012
        Word.Application oWord = new Word.Application();

        Word.Document oWordDoc = new Word.Document();
        Object oMissing = System.Reflection.Missing.Value;
        object oTemplatePath = @"C:\\Documents and Settings\\Student\\Desktop\\ExportFiles\\" + "The_One.docx"; 
        oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
        oWordDoc.ActiveWindow.Selection.WholeStory();
        oWordDoc.ActiveWindow.Selection.Copy();
        oWord.ActiveDocument.Select();
        // The Visible flag is what you've missed. You actually succeeded in making
        // the copy, but because
        // Your Word app remained hidden and the newly created document unsaved, you could not 
        // See the results.
        oWord.Visible = true;
        oWordDoc.ActiveWindow.Selection.PasteAndFormat(Word.WdRecoveryType.wdPasteDefault);
1 голос
/ 24 апреля 2011

Забавно видеть, что все ребята из C # задают сейчас вопросы, на которые разработчики VBA отвечают с 15 лет. Стоит покопаться в примерах кода VB 6 и VBA, если вам приходится работать с проблемами автоматизации Microsoft Office.

Для пункта «ничего не происходит» все просто: если вы запускаете Word с помощью автоматизации, вы должны настроить приложение также на видимое. Если вы запустите свой код, он будет работать, но Word останется невидимым экземпляром (откройте диспетчер задач Windows, чтобы увидеть его).

Для точки «простое решение» вы можете попытаться вставить документ в заданном диапазоне с помощью метода InsertFile диапазона, например, как это:

        static void Main(string[] args)
    {

        Word.Application oWord = new Word.Application();
        oWord.Visible = true;  // shows Word application

        Word.Document oWordDoc = new Word.Document();
        Object oMissing = System.Reflection.Missing.Value;
        oWordDoc = oWord.Documents.Add(ref oMissing);
        Word.Range r = oWordDoc.Range();
        r.InsertAfter("Some text added through automation!");
        r.InsertParagraphAfter();
        r.InsertParagraphAfter();
        r.Collapse(Word.WdCollapseDirection.wdCollapseEnd);  // Moves range at the end of the text
        string path = @"C:\Temp\Letter.doc";
         // Insert whole Word document at the given range, omitting page layout
         // of the inserted document (if it doesn't contain section breakts)
        r.InsertFile(path, ref  oMissing, ref oMissing, ref oMissing, ref oMissing);

    }

ПРИМЕЧАНИЕ. В этом примере я использовал framework 4.0, который допускает необязательные параметры.

...