2016-03-23 17 views
0

Im bir kelime belgedeki bütün alanları güncelleştirmek için bu kodu kullanarak belirli doc döngüler:Kelime field.update

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     int i = 0; 
     foreach (Word.Field field in Doc.Fields) 
     { 
      try 
      { 
       field.Update(); 
      } 
      catch (Exception ex) { Console.WriteLine(ex.Message); } 
      backgroundWorker1.ReportProgress(i); 
      i++; 
     } 
    } 

Bu, benim belgelerin çoğunda çalışır ancak 1 belge olduğu yerde her nasılsa bu kod uçları biraz döngüde. Yalnızca ReportProgress, daha fazla alanın güncellenmesi nedeniyle aralık dışı bir hatayı atar, ardından belgede olması gerekir. ama bunun yanında herhangi bir hata mesajı göremiyorum.

Şimdi bu sorunu nasıl ele alacağımı arıyorum, belki kodda veya kelime belgesinde neyin yanlış olduğunu öğreniyorum, ancak şu ana kadar sorunu izlememe yardımcı olan hiçbir şey bulamadım.

Bu, bazı kelime dokümanlarında bilinen bir sorun olabilir mi? Bunun nasıl ele alınabileceği ile ilgili herhangi bir öneri veya dokümanda yanlış olan ne var?

+0

1: Alanları neden döngüliyorsunuz? Neden basitçe değil: doc.Fields.Update(); 2: Arka plan iş parçacıklarında Office ile çalışmak genellikle iyi bir fikir değildir. Ofis STA ... –

cevap

0

Gerçek belgenizi görmeden, yalnızca bir tahminde bulunabilirsiniz, ancak belirli bir alanın güncellenmesinin, üzerinde yinelediğiniz alan koleksiyonunu değiştirmesi olabilir. Eğer foreach döngüsü sona emin olabilirsiniz

var fieldsToUpdate = Doc.Fields.OfType<Field>().ToList(); 
foreach (var field in fieldsToUpdate) 
{ 
    field.Update(); 
} 

O yolu: Eğer döngü başlamadan önce

böyle bir durumda olası geçici çözüm

alanların bir "anlık" almak olacaktır.