2013-10-23 64 views
4

我想用C#創建一個世界文檔。 所以這是我的代碼來替換word文檔變量。錯誤「字符串參數太長」。在microsoft.office.interop.word.find.execute

private void FindAndReplace(Microsoft.Office.Interop.Word.Application WordApp, object findText, object replaceWithText) 
{ 
    try { 
     object matchCase = true; 
     object matchWholeWord = true; 
     object matchWildCards = false; 
     object matchSoundsLike = false; 
     object nmatchAllWordForms = false; 
     object forward = true; 
     object format = false; 
     object matchKashida = false; 
     object matchDiacritics = false; 
     object matchAlefHamza = false; 
     object matchControl = false; 
     object read_only = false; 
     object visible = true; 
     object replace = 2; 
     object wrap = 1; 

     WordApp.Selection.Find.Execute(ref findText, 
     ref matchCase, ref matchWholeWord, 
     ref matchWildCards, ref matchSoundsLike, 
     ref nmatchAllWordForms, ref forward, 
     ref wrap, ref format, ref replaceWithText, 
     ref replace, ref matchKashida, 
     ref matchDiacritics, ref matchAlefHamza, 
     ref matchControl); 
    } catch (Exception error) { 
     lblerror.Visible = true; 
     lblerror.Text = error.ToString(); 
    } 
} 

,但在這裏,如果「replaceWithText」太孤獨有錯誤,它說

String parameter too long. 

所以,我怎麼能取代長字符串?

+2

這是從ASP.NET或其他服務器技術使用Office互操作一個可怕的想法添加一個新的文本。這些API被編寫用於桌面應用程序,用於自動化Office(一套桌面應用程序)。服務器應用程序在許多方面有所不同,因此在其中使用Office Interop是非常非常糟糕的主意。它也不受Microsoft的支持,並可能違反您的Office許可證。請參閱[服務器端自動化Office的注意事項](http://support.microsoft.com/kb/257757) –

回答

0

只需將您的長字符串分割爲(無論你想要什麼)和調用你的FindAndReplace(..)多次(爲你所有新生成的數組項目)。

+0

如何操作?如何多次替換一個單詞?請解釋它。 – user1348351

1

我意識到這已經一歲了,但由於問題的技術方面從來沒有得到答案,所以我想我會花時間來發布這個問題,因爲誰會在這個問題上磕磕絆絆。

你可以這樣做你真的必須這樣做。

FindAndReplace(word, replacementKey, SequentialReplaceToken); 
var restOfText = replaceWithText; 
while (restOfText.Length > 20) 
{ 
    var firstTwentyChars = restOfText.Substring(0, 20); 
    firstTwentyChars += SequentialReplaceToken; 
    restOfText = restOfText.Substring(20); 
    FindAndReplace(word, SequentialReplaceToken, firstTwentyChars); 
} 
FindAndReplace(word, SequentialReplaceToken, restOfText); 

FindAndReplace(...)是Word互操作函數的包裝。 像這樣:

private void FindAndReplace(Application doc, object findText, object replaceWithText) 
{ 
    //options 
    object matchCase = false; 
    object matchWholeWord = true; 
    object matchWildCards = false; 
    object matchSoundsLike = false; 
    object matchAllWordForms = false; 
    object forward = true; 
    object format = false; 
    object matchKashida = false; 
    object matchDiacritics = false; 
    object matchAlefHamza = false; 
    object matchControl = false; 
    object read_only = false; 
    object visible = true; 
    object replace = 2; 
    object wrap = 1; 
    //clear previous formatting 
    doc.Selection.Find.ClearFormatting(); 
    //execute find and replace 
    doc.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord, 
     ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace, 
     ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl); 
} 

而且SequentialReplaceToken是已知可從來沒有拿出文檔中的字符串常量。

+0

只需要添加,Find.Execute的限制似乎是255,因此如果首選的話,一次可以替換20個以上的字符。 – MoonBoots89

3

而不是使用Find.Execute()來替換:找到文本,獲取其位置,插入新文本。這不會限制你使用新字符串的長度。

實例來替換特定的文本

// Find text 
Range range = doc.Content; 
range.Find.Execute(findText); 
range.Text = "new text..."; 

實例後的特定文本

// Find text 
Range range = doc.Content; 
range.Find.Execute(findText); 
// Define new range 
range = doc.Range(range.End + 1, range.End + 1); 
range.Text = "new text..."; 
+0

這個工程。這真的幫助我很多!謝謝 – CB4

+0

這對我來說也非常有用,非常感謝 – GGSoft