2012-08-30 71 views
7

admito, soy muy nuevo en el uso de las bibliotecas de interoperabilidad, pero la gente consejo siempre parecen dar es, grabar una macro y revisar el código VBA. El problema es que la macro no registra exactamente lo que estoy haciendo: hacer clic en un estilo rápido para aplicarlo a la selección actual.Cómo aplicar un estilo rápido de Word en C#, no solo el formato simple sino todo el estilo?

Mi tarea es bastante simple: que necesito para aplicar un estilo rápido a un párrafo (Microsoft.Office.Interop.Word.Paragraph). Usando el comando set_style sin embargo, sólo se aplica el formato básico, y el párrafo mantiene la selección de estilos rápidos originales ( normal).

Usando el enfoque de Remou me funcionó, pero parece muy similar a mi propio código, y no puedo hacerlo funcionar, y creo que podría ser mi comprensión del modelo de objeto un poco desajustada.

public void AddParagraph(string text, string styleName = null) 
{ 
    Paragraph paragraph = _document.Content.Paragraphs.Add(); 
    if (styleName != null) 
    { 
    paragraph.Range.set_Style(_document.Styles[styleName]); 
    } 

    paragraph.Range.Text = text; 
    paragraph.Range.InsertParagraphAfter(); 
} 

Lo llamo con p. Ej. AddParagraph("A title", "Heading 1");, pero el resultado de utilizar el contenedor anterior para compilar mi documento es que no se aplican estilos completos, solo fuente, color, tamaño y negrita/cursiva.

Estoy usando mi propio archivo .dotx, con mis propios estilos definidos y nombrados, pero simplemente copiar el código de Remou funciona con mi propia plantilla, así que no creo que ese sea el problema, y ​​usando ese código no puedo para averiguar cómo agregar múltiples párrafos con cada uno su propio estilo.

Puede alguien señalar lo que está mal con mi enfoque, o al menos cómo puedo hacer que la respuesta proporcionada por el trabajo Remou para mis necesidades? :)

Respuesta

7

Esto funciona para mí.

Word.Application _wordApp = new Word.Application(); 
Word.Document oDoc = _wordApp.Documents.Add(); 
_wordApp.Visible = true; 
_wordApp.Selection.TypeText("Heading"); 
oDoc.Paragraphs[1].set_Style(Word.WdBuiltinStyle.wdStyleHeading2); 

Cuando dice

paragraph.Range.Text = text + paragraph.Range.Text; 

Usted está recibiendo más párrafos de lo que imaginaba. Calculo que necesita:

paragraph.Range.Text = text; 

Probar:

Paragraph paragraph = _document.Content.Paragraphs.Add(); 
paragraph.Range.Text = text; 

if (styleName != null) 
{ 
    paragraph.set_Style(_document.Styles[styleName]); 
} 

paragraph.Range.InsertParagraphAfter(); 
+0

Gracias Remou, he actualizado mi pregunta, y cuando me un poco más cerca, pero no todo el camino. Probablemente voy por esto de una manera incorrecta. –

+0

... Estoy estupefacto. Cambiar el orden de aplicar estilo y texto es lo que hizo, la parte '+ paragraph.Range.Text;' era algo viejo que intenté y copié por error. ¡Gracias por tu ayuda! :) –

Cuestiones relacionadas