2017-10-13 128 views
0

我是C#開發新手,我應該以編程方式生成Word文檔。在Word表單元格內格式化特定單詞

在某些時候,我這樣做:

Paragraph p1 = document.Paragraphs.Add(); 
Table t1 = p1.Range.Tables.Add(p1.Range, 2, 1, Missing.Value, Missing.Value); 
t1.Range.Font.Size = 11; 
t1.Style = style; 
t1.Rows[1].Alignment = WdRowAlignment.wdAlignRowCenter; 
t1.Cell(1, 1).Range.Select(); 
document.Application.Selection.TypeText(item.FullName + ""); 
t1.Cell(2, 1).Range.Select(); 
document.Application.Selection.TypeText(item.swca_description + ""); 
t1.Cell(2, 1).Range.Bold = 0; 

我的文檔輸出看起來是這樣的: enter image description here

第一個單元格是我打算格式化(該item.FullName)。

然而,它應該是這樣的: enter image description here

有什麼想法?

編輯: 這是我如何創建一個字符串,我需要給顏色:

private string GetFullName() 
    { 
     StringBuilder sb = new StringBuilder(); 

     sb.Append(this.swc_datatype == null ? "void" : this.swc_datatype.swcdt_name); 
     sb.Append($" {this.swca_name}("); 

     foreach (swc_api_parameter inputParameter in this.swc_api_parameter) 
      sb.Append($"{inputParameter.swc_datatype?.swcdt_name} {inputParameter.swcap_name},"); 

     if (swc_api_parameter.Any()) 
      sb.Length = sb.Length - 1; 

     sb.Append(")"); 
     return sb.ToString(); 
    } 

LE:我已經實現的方法是這樣的:

 public static Paragraph AddRtfTextFromFile(this Document document, string rtfPath) 
    { 
     Paragraph p = document.Paragraphs.Add(); 
     p.Range.InsertFile(rtfPath, Missing.Value, false); 
     p.Range.Font.Bold = 0; 
     p.Range.Font.Name = "Calibri"; 
     p.Range.Font.Size = 12; 
     p.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphJustify; 
     p.Range.PageSetup.VerticalAlignment = WdVerticalAlignment.wdAlignVerticalTop; 
     p.Range.InsertParagraphAfter(); 

     return p; 
    } 
+0

沒有理由爲你的英語道歉,它一點也不壞! – FrankK

+0

您是使用Word Interop還是其他庫? – Arul

+0

它基於Interop,但我使用的是NetOffice庫。我這樣做的原因是因爲用戶的唯一要求是安裝字,它不適用於哪個版本。 –

回答

0

如果你都還好用將item.FullName拆分爲單詞,一種方法是鍵入單詞,選擇單詞,應用顏色,摺疊選擇,鍵入下一個單詞並重復。我不知道是否有任何其他方法。但這可能是實現你所需要的一種方式。

Result of the below code
下面的代碼

 Document document = new Document(); 
     Paragraph p1 = document.Paragraphs.Add(); 
     Table t1 = p1.Range.Tables.Add(p1.Range, 2, 1, Missing.Value, Missing.Value); 
     t1.Range.Font.Size = 11; 
     //t1.Style = style; 
     t1.Rows[1].Alignment = WdRowAlignment.wdAlignRowCenter; 
     t1.Cell(1, 1).Range.Select(); 

     document.Application.Selection.TypeText("void "); 
     document.Application.Selection.MoveLeft(WdUnits.wdCharacter, "void ".Length, true); 
     document.Application.Selection.Font.Color = WdColor.wdColorSkyBlue; 
     document.Application.Selection.Collapse(WdCollapseDirection.wdCollapseEnd); 

     document.Application.Selection.TypeText("item.FullName"); 
     document.Application.Selection.MoveLeft(WdUnits.wdCharacter, "item.FullName".Length, true); 
     document.Application.Selection.Font.Color = WdColor.wdColorRed; 
     document.Application.Selection.Collapse(WdCollapseDirection.wdCollapseEnd); 


     t1.Cell(2, 1).Range.Select(); 
     document.Application.Selection.TypeText("item.swca_description");    
     document.Application.Selection.MoveLeft(WdUnits.wdCharacter, "swca_description".Length, true); 
     document.Application.Selection.Font.Color = WdColor.wdColorBlack; 
     document.Application.Selection.Collapse(WdCollapseDirection.wdCollapseEnd); 
     t1.Cell(2, 1).Range.Bold = 0; 
     document.SaveAs(@"D:\Test.docx"); 

的成績也請注意,我註釋掉t1.Style = style;。根據需要取消註釋。

+0

聽起來像是一個好主意,開始這種方法。我會盡力以這種方式實施。如果它適合我​​,我會讓你知道。 「item.FullName」將被分成單詞,我將輸出格式化文本到「.rtf」文件中,然後我將文件作爲段落插入到單元格中。之後,我將刪除此臨時文件。感謝您的建議! –

+0

爲什麼需要將格式化文本輸出到「.rtf」文件中,然後將文件作爲段落插入單元格中。之後,刪除臨時文件? – Arul

+0

看看我的LE。我可以直接插入段落中的.rtf文件的內容,對於我來說,從文件格式化文本比從單元格中獲取每個單詞更方便。糾正我,如果我想錯了。 –

相關問題