docx中的.net Interop.Word插入而无需进行格式设置

时间:2018-09-12 19:31:16

标签: c# vb.net ms-word office-interop

我有一个问题已经解决了一年多了。我在VB.net中创建了一个Forms应用程序,该应用程序允许用户输入一些信息并选择代表docx文件的项目,这些文件中包含具有特殊格式,图片和其他格式怪异的表格。

最后,该软件通过Office.Interop使用用户在“表单”文本字段中提供的信息以及他们选择的项目来创建Word文档(例如,它在Word中创建表格,列出用户的选择以及一些其他内容)信息),然后根据用户的选择将来自多个docx文件的内容附加到通过Interop创建的文档中。

问题是:要实现此目的,我必须使用一种非常脏的方法: 我打开相应的docx文件,选择所有内容(Range.Wholestory())并复制它(Range.Copy())。然后,使用以下选项将剪贴板中的内容插入到新创建的文档中:

Selection.PasteAndFormat (wdFormatOriginalFormatting)

这会产生令人满意的结果,但是由于它使用了用户的剪贴板(我在运行时开始时保存并在结束时还原),因此感觉非常脏。

我最初尝试使用Selection.InsertFile-Method,今天再次尝试使用此方法,但是它完全搞砸了格式。

以这种方式插入docx的内容时,既没有原始docx的格式,也没有我用程序创建的文件之一。例如。即使我在创建的文件中显式定义了SpaceBefore和SpaceAfter值,也不对。事后不能更改格式,因为源文件包含很多特殊格式并且可以随时更改。

另一个难以解决的因素:在将文件提交给用户之前,我无法保存文件,在部署该应用程序的环境中,不能使用temp文件夹,因此基本上所有事情都在RAM中发生。

摘要:

基本上,我想要的是使用OriginalFormatting WITHOUT使用剪贴板来创建与我的“复制和粘贴”方法相同的结果。问题是,InsertFile-Method没有提供格式化选项。

任何想法或帮助将不胜感激。

修改:

Rich Michaels建议的FormattedText选项产生与InsertFile-Method相同的结果。这是我所做的相关部分(单词是Microsoft.Office.Interop.Word.Application):

#Opening the source file
Dim doctemp As Microsoft.Office.Interop.Word.Document
doctemp = word.Documents.Open(doctempfilepath)

#Selecting whole document; this is what I did for the "Copy/Paste"-Method, too
doctemp.Range.WholeStory()

Dim insert_range As wordoptions.Range
doc_destination.Activate()

#Jumping to the end and selecting the range
word.Selection.EndKey(Unit:=Microsoft.Office.Interop.Word.WdUnits.wdStory)
insert_range = word.Selection.Range

#Inserting the text
insert_range.FormattedText = doctemp.Range.FormattedText

doctemp.Close(False)

这是问题所在: picture of the problem

1 个答案:

答案 0 :(得分:0)

使用Range.FormattedText属性。它不触摸剪贴板,并且保持源格式。这个过程是...

在源文档中设置要“复制”的范围,然后在目标文档中设置插入点,然后

DestinationRange.FormattedText = SourceRange.FormattedText