2012-10-24 79 views
1

我需要生成doc(真正的文檔,而不是docx)文件,我發現的「最好」的方式是使用字自動(Word 2010)。我有我打開的文件,然後在將其保存爲新名稱之前替換內部的值。 (例如:我用「155023」替換「CHRONO」)。 爲此,我使用Application.Selection.Find。當新值超過255個字符時(微軟的限制......),我剛剛遇到了問題。爲了避免這個問題,我在這種情況下使用TypeText。 現在我的問題是一旦我使用TypeText,替換不再工作。我找不到原因。 任何想法將不勝感激。替換TypeText後無效

我的代碼是在一個函數,稱爲與每個值的foreach來代替:

private void Replace(Application app, string name, string newValue) 
{ 
    Selection selection = app.Selection; 
    Find find = selection.Find; 
    Replacement replacement = find.Replacement; 

    find.ClearFormatting(); 
    find.Text = "<" + name + ">"; 

    // Word limitation : can't replace with more than 255 characters, 
    // use another way to do it if that's the case 
    if (tempNewValue.Length < 255) 
    { 
     replacement.ClearFormatting(); 
     replacement.Text = tempNewValue; 
     find.Execute(Replace: replaceAll); 
    } 
    else 
    { 
     while (find.Execute()) 
     { 
      selection.TypeText(tempNewValue); 
     } 
    } 

    Marshal.ReleaseComObject(replacement); 
    Marshal.ReleaseComObject(find); 
    Marshal.ReleaseComObject(selection); 
} 

回答

1

我發現這個問題。 雖然在可視字詞的調試中運行程序,但我確切地看到它做了什麼以及它爲什麼不起作用。

事實上,Replace()工作,但它只替換光標後的事件。爲了解決這個問題,我需要將光標重置爲文檔原點:

else 
{ 
    while (find.Execute()) 
    { 
     selection.TypeText(tempNewValue); 
    } 
    selection.GoTo(1, 1); 
}