以下是我目前的代码。执行工作正常,直到我到达行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
{
//
}
}
答案 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);