2011-03-09 12 views
6

Ho creato una presentazione di PowerPoint utilizzando C#:Come posso cambiare il colore del carattere di un TextRange in PowerPoint da 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(); 

Ora, come posso cambiare il colore per objTextRng carattere?

risposta

6

Il seguente codice imposterà il colore del carattere di rosso:

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

Se si desidera specificare un colore diverso, è possibile utilizzare uno degli altri pre-defined colors, o specificare i propri valori RGB utilizzando il Color.FromArgb method.

In entrambi i casi, assicurarsi di chiamare lo ToArgb method sull'oggetto che si utilizza. La proprietà RGB richiede che venga specificato un valore di colore RGB.

+1

In realtà, questo lo imposta in blu, nonostante il nome * di tale proprietà. I ​​colori di interprete di PowerPoint in formato BGR. Il modo più semplice (e meno elegante) per impostare il colore del carattere su rosso è solo specificare il colore in esadecimale (invertendo i byte R e B): 'range.Font.Color.RGB = 0x0000FF;' - allo stesso modo, blu sarebbe 'range.Font.Color.RGB = 0xFF0000;', ecc. (*: è effettivamente il formato RGB, ma è big endian, ovvero i byte vengono archiviati da destra a sinistra anziché da sinistra a destra.) – BrainSlugs83

0

Penso che lo spieghi this MSDN page.

MODIFICA: Ma questo spiega solo come farlo in VBScript. Si può vedere che l'oggetto TextRange ha una proprietà Font. Restituisce l'oggetto Font descrivendo here Queste risorse mostrano che è possibile accedere a una proprietà RGB. Puoi impostarlo come ti ha detto Cody. Se hai bisogno di ulteriori informazioni, fai riferimento alla sezione MSDN.

+0

Puoi certamente * raccogliere * la spiegazione da quella pagina, ma si tratta di un oggetto 'DropCap' piuttosto che di un oggetto' TextRange', e il codice di esempio è presentato in VB 6.0/VBScript, che non è facilmente traducibile in C#. In particolare, non c'è la funzione 'RGB' in C#. –

+0

Sono d'accordo, non volevo mettere solo il link. A volte è fastidioso, quindi ho appena copiato l'esempio di codice. –

+0

Anche in questo caso, il problema è che l'esempio di codice ** non funzionerà in C# **, poiché la domanda è contrassegnata. Non esiste alcuna funzione 'RGB', devi farlo come suggerisce la mia risposta (che è il metodo preferito) o importare lo spazio dei nomi' Microsoft.VisualBasic' per usare la funzione 'Information.RGB'. –

5

Usare questo per 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; 
    } 

ad esempio

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

Questo sembra essere ancora il caso in PowerPoint 2013 (suppongo che sia lo stesso formato). È sciocco che quando si imposta 'Color.RGB' su rosso si ottiene il blu senza questa funzione. :) – Raziel

0

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

Problemi correlati