我想通过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;
当我尝试运行此代码时,它将仅为第二个文本范围提供输出,即“第二个文本”。
如果我想在同一幻灯片中显示两个文本,我需要做什么。
我也尝试使用不同的textrange
,textframe
,但我无法做同样的事情。
答案 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()
在你的程序结束时也是。