2012-07-19 16 views
9

Mi programa necesita generar informes muy simples en el formato Office .doc (no XML), y ciertas partes del documento deben estar en negrita. He estado consultando la documentación para defining ranges, que es en parte de lo que se deriva mi código en este momento. This parte de la documentación realmente no me da suficientes detalles para implementar esto en general en mi documento. Aquí está mi código hasta ahora:¿Cómo escribo texto en negrita a un documento de Word mediante programación sin doblar todo el documento?

object miss = System.Reflection.Missing.Value; 
object Visible = true; 
object start = 0; 

Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application(); 
Document report = WordApp.Documents.Add(ref miss, ref miss, ref miss, ref miss); 

String header = "Bold Header: "; 
Range headerRange = report.Range(ref start, ref miss); 
headerRange.Text = header; 
headerRange.Font.Bold = -1; 

String data = "Information underneath the header"; 
Range dataRange = report.Range(); 
dataRange.Text = data; 
dataRange.Font.Bold = 1; 

object filename = "test.doc"; 

report.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss); 
object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdPromptToSaveChanges; 
object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdWordDocument; 
object routeDocument = true; 
WordApp.Visible = true; 

Esto produce un documento de Word con sólo el texto **Information underneath the header**. Este es un ejemplo simple.

Mi documento no será mucho más complicado que esto, pero espero generar documentos de Word basados ​​en cantidades variables de datos, con texto en negrita y texto no en negrita dispersos por todas partes.

+0

Creo que quieres esto: http://msdn.microsoft.com/en-us/library/aa192495%28v=office.11%29.aspx#wordobject_link7 Es un objeto 'Selection', no un rango. –

+0

¿Hay alguna otra documentación o ejemplos sobre eso además de [esto] (http://msdn.microsoft.com/en-us/library/6b9478cs%28v=vs.80%29.aspx)? Una vez más, los ejemplos para estos no son tan buenos. –

Respuesta

7

Here es una respuesta que se me ocurrió que le permitirá tener parte de una cadena en negrita y regular en la misma cadena.

Lo que estaba haciendo era automático, pero lo mismo se aplica si sabes lo que estás haciendo. Tenga en cuenta también que el Negrita es solo una int, no existe un booleano verdadero/falso (por alguna razón).

Según excelente punto de Ricardo, voy a publicar el código aquí también:

private void InsertMultiFormatParagraph(string psText, int piSize, int piSpaceAfter = 10) { 
    Word.Paragraph para = mdocWord.Content.Paragraphs.Add(ref mobjMissing); 

    para.Range.Text = psText; 
    // Explicitly set this to "not bold" 
    para.Range.Font.Bold = 0; 
    para.Range.Font.Size = piSize; 
    para.Format.SpaceAfter = piSpaceAfter; 

    object objStart = para.Range.Start; 
    object objEnd = para.Range.Start + psText.IndexOf(":"); 

    Word.Range rngBold = mdocWord.Range(ref objStart, ref objEnd); 
    rngBold.Bold = 1; 

    para.Range.InsertParagraphAfter(); 
} 

Obviamente, si usted está tratando de abstraer esto aun más lejos, se puede añadir un parámetro para el char o string por lo puede cambiar lo que se está utilizando para configurar el inicio/parada en negrita.

Una cosa a tener en cuenta que se discutió en los comentarios del otro hilo fue que, por alguna razón, Bold es solo una int. No hay valor bool para establecer eso. Es extraño, lo sé.

+0

Si lo hiciera, publique el código de esa respuesta en su respuesta aquí para que podamos analizarlo de manera relevante a esta pregunta. –

+0

Buen punto. Lo siento, no lo hice originalmente. – krillgar

+0

Sin preocupaciones. Estoy tratando de trabajar este código en una aplicación de prueba en este momento, pero voy a publicar cómo funciona cuando se complete en los próximos días. –

0

Puede simplemente usar el objeto Paragraph para personalizar el formateo de diferentes bloques de texto. Código de ejemplo de la siguiente manera:

object DocumentEndIndex = "\\endofdoc"; 
object endDocument = wordDocument.Bookmarks.get_Item(ref DocumentEndIndex).Range; 
Paragraph para = wordDocument.Content.Paragraphs.Add(ref endDocument); 
para.Range.Text = text; 
para.Range.set_Style(ref headingLevel); 
// do format the text with para.Range object as you want 
para.Range.InsertParagraphAfter(); 

Espero que esto ayude.

-1

Es una vieja pregunta, pero a medida que se enfrentó al mismo problema y esto no me ayudaron para las modificaciones en el encabezado o pie de página, pero me ayudó a entender cómo hacerlo, aquí está mi solución:

Word.Paragraph p = c2.Range.Paragraphs.Add(ref missing); 
p.Range.Text = "your trip at " + sejour.Location; 
SetTextColor(p.Range, Word.WdColor.wdColorWhite,0, p.Range.Text.Length - 1); 
SetTextSize(p.Range, (float)14, 0, p.Range.Text.Length - 1); 
SetTextSize(p.Range, (float)16, p.Range.Text.Length - 2 - sejour.Location.Length, sejour.Location.Length); 

public void SetTextColor(Word.Range range, Microsoft.Office.Interop.Word.WdColor color, int start, int length) 
{ 
    Word.Range rng = range; 
    rng.Start = range.Start + start; 
    rng.End = range.Start + start + length; 
    rng.Font.Color = color; 
} 

public void SetTextSize(Word.Range range, float size, int start, int length) 
{ 
    Word.Range rng = range; 
    rng.Start = range.Start + start; 
    rng.End = range.Start + start + length; 
    rng.Font.Size = size; 
} 
+0

¿Está seguro de que este código aparecerá en negrita en el texto del documento? Porque parece que la función de cambiar el tamaño de la fuente y el plegado no es lo mismo. –

Cuestiones relacionadas