2013-06-12 164 views
2

我正在動態生成word文檔,並且需要使用使用CKeditor控件生成的html內容替換我的特殊標籤。在這裏,我使用的Word文檔是一個模板,其中包含預輸入的文本和生成文檔,我使用Microsoft.Office.Interop.Word。現在我可以使用interop的doc.range.Find方法找到我的特殊標記。但是,當我想用​​HTML內容替換此標籤而不會丟失其樣式時。我怎樣才能做到這一點?
使用doc.range.Find.replacement.text是不實際的,因爲它只會用html文本替換整個標籤。使用C#將word文檔寫入word文檔

例: 在我的Word文檔,我有一個特殊的標記像文檔生成過程如下所示

##<Special Conditions Frag>## 

我需要接受來自用戶的一些文字,這是通過CKEditor的控制輸入(這將是HTML格式與身體標記和所有)。而這個html內容我需要用word文檔中以上特殊條件frag標籤替換。

我的HTML內容看起來像下面

<html> 
<head> 
    <title></title></head> 
    <body> 
    <p> 
<strong>Sample text</strong> 
    </p> 
    </body> 
</html> 

回答

2

從XML,OOXML來,到互操作,確實有很多可能的變體。

一個是使用剪貼板來做到這一點。

string html = Clipboard.GetText(TextDataFormat.Html); 

你可以在哪裏操縱你的html字符串,同時發送到剪貼板任何你想要的html代碼。

//save the html content to a file 
File.WriteAllText(temporaryFilePath, html); 

您可以將它保存在文件中並打開文件,您將在瀏覽器中看到html代碼的真實轉換。

如果要落實到Word現在,你可以插入與該文件內容:

s.Range.InsertFile(temporaryFilePath); 

如果你想通過你所有的文件,您可以使用一個循環,並檢查是否有特定的地方更換

foreach (NetOffice.WordApi.InlineShape s in docWord.InlineShapes) 
{ 
    if (s.Type==NetOffice.WordApi.Enums.WdInlineShapeType.wdInlineShapePicture && s.AlternativeText.Contains("|")) 
    { 
     //save the html content to a file 
     File.WriteAllText(temporaryFilePath, html); 
     s.Range.InsertFile(temporaryFilePath);    
    } 
} 

這是一種將HTML集成到Word中的方法。另一種方式,醜陋的方式是將您的html代碼轉換爲圖片並插入圖片,我不會推薦該圖片。 如果你打算擴展到Excel,它的工作原理是一樣的,如果你嘗試將HTML實現到Powerpoint中,它將無法工作,但你可以兩步完成。首先將你的html粘貼到Excel中,選擇粘貼的內容並粘貼到Powerpoint中,它工作正常。如果你粘貼一張表,沒問題,只要做,之後,你寫第二個循環來創建一個新表,而不是從Excel到PowerPoint中的表。

編輯:根據錯誤 在你的主,你應該加上:

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 

的問題都可以在這裏回溯:C# WinForms: How to set Main function STAThreadAttribute

+0

邁克感謝您快速response..I使用剪貼板已經嘗試。當我使用剪貼板時,出現此錯誤 - 在進行OLE調用之前,當前線程必須設置爲單線程單元(STA)模式。確保您的Main函數具有標記的STAThreadAttribute。 –

+1

看看編輯的評論。您必須在主函數中將屬性設置爲STAThread。另外,不要忘記將庫實現到您的項目中。如果它不解決,嘗試在try/catch – mike27015

+0

之間設置'wordApplication.Application.Visible = true/false;'感謝mike,在web應用程序中我應該在哪裏指定[stathread],任何想法? –