我有一个VSTO文档级自定义,可以在我们的应用程序中打开时执行特定功能。基本上,我们从应用程序内部打开普通文档,然后将内容从普通docx文件复制到存储在数据库内部的VSTO文档文件中。
var app = new Microsoft.Office.Interop.Word.Application();
var docs = app.Documents;
var vstoDoc = docs.Open(vstoDocPath);
var doc = docs.Open(currentDocPath);
doc.Range().Copy();
vstoDoc.Range().PasteAndFormat(WdRecoveryType.wdFormatOriginalFormatting);
一切都很好,但是使用上面的代码会省略与文档相关的某些格式。下面的代码修复了这些问题,但很可能会遇到更多问题,因为我遇到过它们,我可以逐个解决这些问题......
for (int i = 0; i < doc.Sections.Count; i++)
{
var footerFont = doc.Sections[i + 1].Footers.GetEnumerator();
var headerFont = doc.Sections[i + 1].Headers.GetEnumerator();
var footNoteFont = doc.Footnotes.GetEnumerator();
foreach (HeaderFooter foot in vstoDoc.Sections[i + 1].Footers)
{
footerFont.MoveNext();
foot.Range.Font.Name = ((HeaderFooter)footerFont.Current).Range.Font.Name;
}
foreach (HeaderFooter head in vstoDoc.Sections[i + 1].Headers)
{
headerFont.MoveNext();
head.Range.Font.Name = ((HeaderFooter)headerFont.Current).Range.Font.Name;
}
foreach (Footnote footNote in vstoDoc.Footnotes)
{
footNoteFont.MoveNext();
footNote.Range.Font.Name = ((Footnote)footNoteFont.Current).Range.Font.Name;
}
}
我需要一种安全的方式将一个docx文件的内容复制到另一个docx文件,同时保留格式并消除损坏文档的风险。我尝试使用反射来将两个文档的属性设置为彼此,代码确实看起来有点难看,我总是担心我设置的某些属性可能会产生不良副作用。我还尝试了压缩和解压缩docx文件,手动编辑xml然后再重新压缩,这还没有成功,我在这个过程中最终破坏了一些文档。
如果有人在过去处理过类似的问题,请你指点我正确的方向。
感谢您的时间
答案 0 :(得分:0)
此代码复制并保留源格式。
bookmark.Range.Copy();
Document newDocument = WordInstance.Documents.Add();
newDocument.Activate();
newDocument.Application.CommandBars.ExecuteMso("PasteSourceFormatting");
答案 1 :(得分:0)
基于
,还有一种更优雅的方式来管理它Globals.ThisAddIn.Application.ActiveDocument.Range().ImportFragment(filePath);
或者您可以执行以下操作
Globals.ThisAddIn.Application.Selection.Range.ImportFragment(filePath);
以获取当前范围,其中filePath是您正在从中获取的文档的路径。