2016-07-25 43 views
0

我使用Microsoft.Office.Interop.Word創建基於另一個文檔的新文檔。使用Range.Text進行搜索/替換操作有多個迭代,所有工作都非常快。但是,在一種情況下,我需要複製整個章節的所有格式,而不是Range.Text(它重置所有格式),我使用了Range.Copy和Range.Paste。他們的工作,但對於約450字的測試章節,他們需要長達40秒(而不到1秒,當我改變相同的代碼使用Range.Text)。(Interop.Word)Range.Copy-Range.Paste work slow

問題:有沒有辦法讓Range.Copy/Range.Paste更快?我需要的只是找到一段特定的文本,並將其與所有表格,格式等複製到另一個文件中。

+0

有很多事情正在發生。有許多方法可以限制粘貼的範圍,但是您只是在問題中說過要保留所有格式和OLE自動化,所以。 –

+0

@smirnov,你有沒有考慮過使用OpenXML而不是Word互操作? Word Interop非常古怪,它需要在每臺必須運行的計算機上設置特定的設置和權限,Microsoft將在新的Windows版本和/或Service Pack上更改與此相關的要求。 –

+0

安裝不是問題。這是一個小型的一次性桌面工具,可以讓同一組織內的一些內部用戶通過合同編寫自動執行日常任務。當他們對基礎合同進行更改時,他們採用現有的合同文檔和變更模板,並複製各種文本(日期,名稱,圖形等)合同的範圍(我的問題的主題)。範圍可以包括。章節,表格等,因此其格式應保持不變。這一切都可以正常工作,但由於複製緩慢,用戶必須等待一分鐘左右才能完成。 – Alex

回答

2

如果你想在Word格式複製文本,您可以使用Range.Copy()和Range.Paste(),因爲這種方法使用的RangeFormattedText財產一樣

targetRange.FormattedText = sourceRange.FormattedText; 

避免在內部使用的剪貼板這可能導致安全問題或在某些情況下可能會提供不可預知的結果

+0

感謝您向我指出這一點。我之前嘗試過這個屬性,但是失敗了,因爲我對目標和源範圍使用了不同的Word.Application,並且因爲我現在纔得到,所以FormattedText只能用於相同的應用程序。 – Alex