Прежде всего, вы сохраняете документ после изменения каждой ячейки - в этом нет необходимости.Во-вторых, что более важно, вы закрываете документ после первого абзаца, поэтому следующий (абзац) вызовет исключение.
Я бы порекомендовал использовать что-то вроде следующего кода, он заменяет все вхождения «[Company_Name]» на «Sacramento» (во всем документе).
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;
using System.Runtime.InteropServices;
...
object o = Missing.Value;
object oFalse = false;
object oTrue = true;
Word._Application app = null;
Word.Documents docs = null;
Word.Document doc = null;
object path = @"C:\path\file.doc";
try
{
app = new Word.Application();
app.Visible = false;
app.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
docs = app.Documents;
doc = docs.Open(ref path, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o);
doc.Activate();
foreach (Word.Range range in doc.StoryRanges)
{
Word.Find find = range.Find;
object findText = "[Company_Name]";
object replacText = "Sacramento";
object replace = Word.WdReplace.wdReplaceAll;
object findWrap = Word.WdFindWrap.wdFindContinue;
find.Execute(ref findText, ref o, ref o, ref o, ref oFalse, ref o,
ref o, ref findWrap, ref o, ref replacText,
ref replace, ref o, ref o, ref o, ref o);
Marshal.FinalReleaseComObject(find);
Marshal.FinalReleaseComObject(range);
}
doc.Save();
((Word._Document)doc).Close(ref o, ref o, ref o);
app.Quit(ref o, ref o, ref o);
}
finally
{
if (doc != null)
Marshal.FinalReleaseComObject(doc);
if (docs != null)
Marshal.FinalReleaseComObject(docs);
if (app != null)
Marshal.FinalReleaseComObject(app);
}
Есть две важные вещи:
1) Никогда не используйте две точки с COM-объектами:
// might be a problem soon:
app.Documents.Open(....
// better way:
Documents docs = app.Documents;
Document doc = docs.Open(...
2) Отпустите их, как только вы этого не сделаетенужны они в обратном порядке:
if (doc != null)
Marshal.FinalReleaseComObject(doc);
if (docs != null)
Marshal.FinalReleaseComObject(docs);