2015-11-03 96 views
2

我试图以编程方式将内容插入Powerpoint的Notes页面。同一行上会有不同的彩色文字。我只通过段落得到它,但这样做会使它们出现在不同的路线上。VSTO Powerpoint注释页面 - 同一行上的不同颜色的文字

这是我曾尝试:

var slideRange = Application.ActivePresentation.Slides; 
slideRange[1].NotesPage.Shapes[2].TextFrame.TextRange.Paragraphs(1).Font.Color.RGB = Color.Black; 
slideRange[1].NotesPage.Shapes[2].TextFrame.TextRange.Paragraphs(1).Text = "word1\r"; 
slideRange[1].NotesPage.Shapes[2].TextFrame.TextRange.Paragraphs(2).Font.Color.RGB = Color.Gray; 
slideRange[1].NotesPage.Shapes[2].TextFrame.TextRange.Paragraphs(2).Text = "word2\r"; 

的2个字出来的不同颜色,但我想有他们在同一行。

我曾尝试通过TextRange(TextRange.Font.Color)设置颜色,但是这似乎是只读属性。

Picture showing what I wish to achieve

回答

0

所以我花了很多时间公平位在此寻找一个更优雅的解决方案.....但是这是我所发现的最佳.... 这是假设你有您的文本格式为HTML,但如果您已经有RTF格式,则会有一段标记开始。

var html = "<!DOCTYPE html><html><head></head><body><style type=\"text/css\">.SQLCode{font-size:13px;font-weight:bold;font-family:monospace;;white-space:pre;-o-tab-size:4;-moz-tab-size:4;-webkit-tab-size:4;}.SQLComment{color:#00AA00;}.SQLString{color:#AA0000;}.SQLFunction{color:#AA00AA;}.SQLKeyword{color:#0000AA;}.SQLOperator{color:#777777;}.SQLErrorHighlight{background-color:#FFFF00;}</style><pre class=\"SQLCode\"><span class=\"SQLComment\">--Example Commend</span><span class=\"SQLKeyword\">SELECT</span><span class=\"SQLKeyword\">TOP</span> 1 <span class=\"SQLFunction\">COALESCE</span><span class=\"SQLOperator\">(</span>ASPU<span class=\"SQLOperator\">.</span>MobileAlias<span class=\"SQLOperator\">,</span> ASPU<span class=\"SQLOperator\">.</span>UserName<span class=\"SQLOperator\">)</span><span class=\"SQLKeyword\">AS</span> UName<span class=\"SQLKeyword\">FROM</span> dbo<span class=\"SQLOperator\">.</span>aspnet_Users ASPU</pre></body></html>"; 
var title = "Header Text"; 
if (!string.IsNullOrWhiteSpace(html)) 
{ 
    var web = new WebBrowser(); 
    web.CreateControl(); 
    web.DocumentText = html; 
    while (web.DocumentText != html) 
    { 
     System.Windows.Forms.Application.DoEvents(); 
    } 
    web.Document.ExecCommand("SelectAll", false, null); 
    web.Document.ExecCommand("Copy", false, 
    //Start here if you already have it in RTF. 
    var rtf = Clipboard.GetData(DataFormats.Rtf) as string; 
    if (!string.IsNullOrWhiteSpace(rtf)) 
    { 
     slide = ppt.Slides.AddSlide(ppt.Slides.Count + 1, ppt.SlideMaster.CustomLayouts[1]); 
     slide.Layout = PpSlideLayout.ppLayoutTextAndObject; 
     slide.Shapes.Title.TextFrame.TextRange.Text = title; 
     slide.Select(); 
     slide.Shapes[2].Select(); 
     Globals.ThisAddIn.Application.CommandBars.ExecuteMso("PasteSourceFormatting"); 
     System.Windows.Forms.Application.DoEvents(); 
    } 
}