2011-03-09 22 views
6

creé una presentación de PowerPoint usando C#:¿Cómo puedo cambiar el color de fuente de un TextRange en PowerPoint desde C#?

PowerPoint.Application powerpointApplication; 
PowerPoint.Presentation pptPresentation; 
PowerPoint.Slide Slide; 

// Create an instance of PowerPoint. 
powerpointApplication = new PowerPoint.ApplicationClass(); 

// Create a PowerPoint presentation. 
pptPresentation = powerpointApplication.Presentations.Add(
Microsoft.Office.Core.MsoTriState.msoTrue); 


// Create empty slide 
Slide = pptPresentation.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank); 

TextRange objTextRng = objSlide.Shapes[1].TextFrame.TextRange; 
objTextRng.Text = "Remote sensing calendar 1"; 
objTextRng.Font.Name = "Comic Sans MS"; 
objTextRng.Font.Size = 48; 
// TODO: change color 
// objTextRng.Font.Color 



// Save presentation 
pptPresentation.SaveAs(BasePath + "result\\2_example.ppt", 
         PowerPoint.PpSaveAsFileType.ppSaveAsDefault, 
         MsoTriState.msoTrue // TODO: что за параметр??? 
        ); 
pptPresentation.Close(); 

Ahora, ¿cómo se puede cambiar el color de fuente para objTextRng?

Respuesta

6

El siguiente código fijará el color de la fuente a rojo:

objTextRng.Font.Color.RGB = Color.Red.ToArgb(); 

Si desea especificar un color diferente, puede utilizar uno de los otros pre-defined colors, o especificar sus propios valores RGB mediante el Color.FromArgb method.

De cualquier manera, asegúrese de llamar al ToArgb method en el objeto Color que utiliza. La propiedad RGB requiere que se especifique un valor de color RGB.

+1

En realidad, eso lo configura en azul, a pesar del nombre * de esa propiedad. Los colores de PowerPoint interpretan en formato BGR. La manera más fácil (y menos elegante) de establecer el color de fuente en rojo es simplemente especificar el color en hexadecimal (invirtiendo los bytes R y B): 'range.Font.Color.RGB = 0x0000FF;' - del mismo modo, azul sería 'range.Font.Color.RGB = 0xFF0000;', etc. (*: en realidad es formato RGB, pero es big endian, lo que significa que los bytes se almacenan de derecha a izquierda en lugar de izquierda a derecha.) – BrainSlugs83

0

Creo que this MSDN page lo explica.

EDITAR: Pero esto solo explica cómo hacerlo en VBScript. Puede ver que el objeto TextRange tiene una propiedad Font. Esto devuelve el objeto Font describe here Estos recursos muestran que tienes acceso a una propiedad RGB. Puedes configurarlo como te lo dijo Cody. Si necesita más información, consulte la sección de MSDN que acabo de señalar.

+0

Desde luego, puede * extraer * la explicación de esa página, pero está hablando de un objeto 'DropCap' en lugar de 'TextRange', y el código de muestra se presenta en VB 6.0/VBScript, que no se puede traducir fácilmente a C#. En particular, no hay función 'RGB' en C#. –

+0

Estoy de acuerdo, simplemente no quería poner solo el enlace. A veces es molesto, así que simplemente copié el ejemplo de código. –

+0

Una vez más, el problema es que la muestra de código ** no funcionará en C# **, ya que la pregunta está etiquetada. No hay función 'RGB', tienes que hacerlo como mi respuesta sugiere (que es la forma preferida) o importar el espacio de nombres' Microsoft.VisualBasic' para usar la función 'Information.RGB'. –

5

Uso esto para PPTX 2007

private int BGR(Color color) 
    { 
     // PowerPoint's color codes seem to be reversed (i.e., BGR) not RGB 
     //  0x0000FF produces RED not BLUE 
     //  0xFF0000 produces BLUE not RED 
     // so we have to produce the color "in reverse" 

     int iColor = color.R + 0xFF * color.G + 0xFFFF * color.B; 

     return iColor; 
    } 

por ejemplo

shape.TextFrame.TextRange.Font.Color.RGB = BGR(Color.Red); 
+1

Este parece ser todavía el caso en Powerpoint 2013 (supongo que es el mismo formato). Es un poco tonto que cuando establezcas 'Color.RGB' en rojo obtienes el azul sin esta función. :) – Raziel

0

objTextRng.Font.Color.RGB = System.Drawing.ColorTranslator.ToOl (System.Drawing.Color.Blue);

Cuestiones relacionadas