2017-10-13 1 views
0

Je suis nouveau sur le développement C# et je suis censé générer un document Word par programmation.Mettre en forme des mots spécifiques à l'intérieur de la cellule du tableau Word

À un certain moment, je fais ceci:

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; 

Ma sortie dans le document ressemble à ceci: enter image description here

cellule est d'abord ce que je veux formater (le item.FullName).

Cependant, il devrait ressembler à ceci: enter image description here

Toute pensée?

Edit: Voici comment je crée cette chaîne que je dois donner des couleurs:

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: Je l'ai déjà mis en œuvre une méthode comme ceci:

 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

il n'y a aucune raison de s'excuser pour votre anglais, ce n'est pas mal du tout! – FrankK

+0

Utilisez-vous Word Interop ou une autre bibliothèque? – Arul

+0

Il est basé sur Interop, mais j'utilise la bibliothèque NetOffice. La raison pour laquelle je fais ceci est parce que la seule condition pour l'utilisateur est d'avoir le mot installé, il ne mater quelle version. –

Répondre

0

Si vous êtes d'accord avec diviser le item.FullName en mots, une approche serait de taper un mot, sélectionner le mot, appliquer la couleur, réduire la sélection, tapez le mot suivant et répétez. Je ne sais pas s'il existe une autre méthode pour cela. Mais cela pourrait être un moyen de réaliser ce dont vous avez besoin.

Result of the below code
Résultat du code ci-dessous

 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"); 

, s'il vous plaît noter aussi que je l'ai commenté t1.Style = style;. Décommenter au besoin.

+0

Cela semble être une bonne idée de commencer l'approche. Je vais essayer de mettre en œuvre de cette façon. Je vous ferai savoir si cela fonctionne pour moi. Le "item.FullName" sera divisé en mots et je vais sortir le texte formaté dans un fichier ".rtf", et après je vais insérer le fichier en tant que paragraphe dans la cellule. Après cela, je vais supprimer ce fichier temporaire. Merci pour suggestion! –

+0

Pourquoi avez-vous besoin de sortir le texte formaté dans un fichier ".rtf", et après cela insérez le fichier en tant que paragraphe dans la cellule. Après cela, supprimez le fichier temporaire? – Arul

+0

Regardez mon LE. Je peux insérer directement dans un paragraphe le contenu d'un fichier .rtf, et il est plus pratique pour moi de formater un texte à partir d'un fichier plutôt que d'obtenir chaque mot d'une cellule. Corrigez-moi si je me trompe. –