键入不匹配尝试将文本从1个Word文档复制到另一个?

时间:2013-11-27 14:56:11

标签: c# .net winforms interop office-interop

以下是我目前的代码。执行工作正常,直到我到达行oNewWord.ActiveDocument.Range().FormattedText = rng.FormattedText;,我抓住Type Mismatch的例外?我正在尝试做的是复制我的邮件合并文档的第一部分(页面),作为邮件合并的第一个记录,并将其放入一个新的Word文档实例中以保存它自己的文档。 / p>

因此,如果我为邮件合并文档选择了4条记录,这将为我提供一个标题为“Letters Form1”的单个文档,其中包含4页,每封记录收件人的一封信。不知何故,我需要做的是将这4页中的每一页保存到自己的Word文档中,以便存档和轻松编制索引。

任何有更多Word Interop经验的人都可以帮我解决这个问题吗?

public void OpenAndReview()
        {
            try
            {
                string docSave = "C:\\Users\\NAME\\Desktop\\Test.doc";

                //MergeDocLibrary mdl = new MergeDocLibrary();
                //mdl.mergeDocument(docSource, docLoc);

                // Original Mail Merge Document
                Word.Range rng;
                Word.Application oWord = new Word.Application();
                Word.Document oWrdDoc = new Word.Document();

                // New Document Instance
                Word.Application oNewWord = new Word.Application();
                Word.Document oNewWrdDoc = new Word.Document();

                // Set 'False' in PROD, 'True' in DEV
                oWord.Visible = true;
                oNewWord.Visible = true;
                Object oTemplatePath = docLoc;

                // Open Mail Merge Doc
                oWrdDoc = oWord.Documents.Open(oTemplatePath);

                // Open New Document
                oNewWrdDoc = oNewWord.Documents.Open(docSave);
                Object oMissing = System.Reflection.Missing.Value;

                // Open Mail Merge Datasource
                oWrdDoc.MailMerge.OpenDataSource(docSource, oMissing, oMissing, oMissing,
                   oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);

                MessageBox.Show(oWord.ActiveDocument.Name.ToString());
                MessageBox.Show(oWord.ActiveDocument.Sections.Count.ToString());

                // Execute Mail Merge
                oWrdDoc.MailMerge.Execute();

                // Set Mail Merge Document as Active Doc
                //oWrdDoc.Activate();

                MessageBox.Show(oWord.ActiveDocument.Name.ToString());
                MessageBox.Show(oWord.ActiveDocument.Sections.Count.ToString());

                // Select Section 1 of Mail Merge Doc?
                rng = oWord.ActiveDocument.Sections[1].Range;


                // ERROR! - Type Mismatch
                // Place selected text into the new Document???
                oNewWord.ActiveDocument.Range().FormattedText = rng.FormattedText;


                // Save new docuemnt...?
                oNewWrdDoc.SaveAs2("SuccesfullySavedTest.doc");

            }
            catch (Exception ex)
            {
                MessageBox.Show("Source:\t" + ex.Source + "\nMessage: \t" + ex.Message + "\nData:\t" + ex.Data);
            }
            finally
            {
                //


 }
        }

2 个答案:

答案 0 :(得分:1)

FormattedText只能在同一个Word应用程序中设置。如果两个文档位于不同的Word应用程序中,它将失败。而不是oNewWord只使用oWord。

答案 1 :(得分:-1)

我和你有完全相同的问题。 对我有用的是使用此代码。

range = wordApp.ActiveDocument.Sections[1].Range;
range.Copy();

//Special pasting onto new word document
newDocument.Content.PasteSpecial(DataType: Word.WdPasteOptions.wdKeepSourceFormatting);