2013-07-30 91 views
0

我正在使用Microsoft.Office.Interop.Word.Application。我有一些模板文檔,其中將有一些令牌像文件 [PutfirstTableHere] 在運行時,我將創建表,並希望用生成的表替換現有的Word文檔中的令牌 任何機構可以讓我知道如何我可以用Word中的表替換字符串標記嗎? 無法找到任何例子/樣本對我目前的問題用word表替換Word文檔中的字符串標記

+0

不要使用這樣的標記,詞有是爲這個偉大的書籤。以http://msdn.microsoft.com/en-us/library/6b9478cs(v=vs.80).aspx爲例。我也建議使用OpenXMLSdk,因爲它不需要Word,它的速度比Interop快得多http://msdn.microsoft.com/en-us/library/office/bb456488.aspx – trebor

+0

不能使用OpenXmlSdk。它擾亂了文檔。 –

回答

0

試試這個:

protected void InsertTableAtBookMark(string[][] docEnds, string bookmarkName) 
    { 
     Object oBookMarkName = bookmarkName; 
     Range wRng = WordDoc.Bookmarks.get_Item(ref oBookMarkName).Range; 

     Table wTable = WordDoc.Tables.Add(wRng, docEnds.Length, docEnds[0].Length); 
     wTable.set_Style("Table Grid"); 

     for (int i = 0; i < docEnds.Length; i++) 
     { 
      for (int j = 0; j < docEnds[0].Length; j++) 
      { 
       wTable.Cell(i, j).Range.Text = docEnds[i][j]; 
       wTable.Cell(1, 1).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; 
       wTable.Cell(1, 1).VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; 
      } 
     } 
     Borders wb = wTable.Borders; 
     wb[WdBorderType.wdBorderHorizontal].LineStyle = WdLineStyle.wdLineStyleNone; 
     wb[WdBorderType.wdBorderVertical].LineStyle = WdLineStyle.wdLineStyleNone; 

     wTable.Borders = wb; 
    } 

哪裏WordDoc是的Microsoft.Office.Interop.Word命名空間的類型文件的;

+0

我不能通過令牌嗎? 其實我對tempalte有不同的標記,其中一些是簡單的字符串,我認爲可以很容易替換,而其他的標記必須由genreated表替換 –

+0

您可以使用字符串來做到這一點,但它涉及多一點,你必須使用像這樣的對象開始= 0; object end = 0; Word.Range tableLocation = this.Range(ref start,ref end);'你在哪裏用你的索引替換開始和結束是字符串,我真的不推薦它,但它是你的選擇。 – trebor

+0

toby任何樣品爲它?無法獲得並能夠工作 –

0

您可以使用Find Interface及其Execute方法搜索文檔內容。第一個參數是在範圍內搜索的文本(在你的情況下,我會推薦使用Word.Document.Content屬性),從中創建查找對象。

代碼:

Word.Document doc = Application.ActiveDocument; 
Word.Range wholeDoc = doc.Content;     

Word.Find find = wholeDoc.Find; 

object token = "[MyTableToken]";     
object missing = Type.Missing; 

bool result = find.Execute(ref token, true, true, ref missing, ref missing, ref missing, ref missing, ref missing, 
    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); 

while (result) 
{ 
    // wholeDoc object is replaced with executed search/find result 
    CreateTable(wholeDoc.Duplicate); 

    result = find.Execute(ref token, true, true, ref missing, ref missing, ref missing, ref missing, ref missing, 
     ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); 
} 

樣本創建表的方法:

private void CreateTable(Word.Range range) 
{ 
    Word.Tables tables = null; 
    try 
    { 
     int sampleRowNumber = 3, sampleColumnNumber = 3; 

     range.Text = ""; 
     tables = range.Tables; 

     tables.Add(range, sampleRowNumber, sampleColumnNumber); 
    } 
    finally 
    { 
     Marshal.ReleaseComObject(range); 
     Marshal.ReleaseComObject(tables); 
    } 
} 
相關問題