2015-08-28 61 views
1

我試圖在Word中複製/粘貼字段的格式。 (Microsoft.Office.Interop.Word)Word自動化 - CopyFormat in loop = slow

我的目標是複製格式,更新字段,粘貼格式以將其應用於新內容。 (在我的測試代碼中,更新和粘貼的部分被忽略)

我注意到這在大循環中變得非常緩慢。 我在Word文檔中有+ - 5000個字段。經過+ -500次迭代後,執行一次迭代最多需要1.2秒(僅適用於本文底部的代碼)。達到1.2秒後,持續時間不再增加(可能與緩衝區有關)。

任何人都可以給我一個提高速度的解決方案嗎?

foreach (Field o in m_doc.Fields) 
    { 
     if (o.Type == WdFieldType.wdFieldRef) 
     { 
     o.Select(); 
     Range r = o.Result; 
     r.Select(); 
     m_doc.Application.Selection.CopyFormat(); 
     } 
    } 

回答

0

我稻草但是抓了一下,在這裏,...

  1. 可以肯定加快了一點東西留下了o.Select();這不是必要的,每次SELECT調用都會明顯影響性能。

  2. 緩慢是foreach循環中的一個已知問題 - 它必須處理API與文檔一起工作的方式。盡我所能記得,它或多或少傾向於從一開始就開始並在每個循環中向前數。使用索引計數器的「for」循環往往會更快。而且在某些情況下,反向循環的「for」循環甚至可以更高效。