在powerpoint c#中写文本

时间:2012-09-26 20:36:51

标签: c# powerpoint

我想通过c#中的自动化在powerpoint中写文本。

我正在使用 Microsoft.Office.Interop.PowerPoint

我的示例代码:

objSlide = objSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutCustom);
objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
objTextRng.Text = "first text";
objTextRng.Font.Name = "Calibri";
objTextRng.Font.Size = 20;

objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
objTextRng.Text = "second text";
objTextRng.Font.Name = "Calibri";
objTextRng.Font.Size = 20;

当我尝试运行此代码时,它将仅为第二个文本范围提供输出,即“第二个文本”。

如果我想在同一幻灯片中显示两个文本,我需要做什么。

我也尝试使用不同的textrangetextframe,但我无法做同样的事情。

2 个答案:

答案 0 :(得分:2)

您遇到问题是因为您在两个代码块中都访问了相同的形状:

objSlide.Shapes[1].TextFrame.TextRange;

根据幻灯片中的形状数量,您可能希望第一个块引用索引0或第二个块引用索引2.无论哪种方式,两个块都应引用不同的形状。

答案 1 :(得分:1)

作为vb.net代码:

Dim n as Integer =2
for i = 1 to 2 
        Dim Orientation As Microsoft.Office.Core.MsoTextOrientation =  Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal
        Dim STextLeft As Single = 100*i
        Dim STextWidth As Single = 100
        Dim STextHeight As Single = 100
        Dim STextTop As Single = 100*i
        Dim TargetShape = objslide.shapes.AddTextbox(Orientation, STextLeft, STextTop, STextWidth, STextHeight)

    TargetShape.textframe.textrange=i.tostring
    Orientation=nothing
    targetshape=nothing

这将创建两个texthapes。 请注意,你不得不将Orientation和Targetshape设置为空,因为COM很糟糕。如果你不这样做,powerpoint将保持开放状态。 您可能需要致电

   GC.Collect()
   GC.WaitForPendingFinalizers()
   GC.Collect()
   GC.WaitForPendingFinalizers()

在你的程序结束时也是。