当前位置:首页 > 随心手记 > 个人笔记 > 正文内容

C# 操作PowerPoint

博主2020-07-20个人笔记3732


u=3558142891,1024264363&fm=26&gp=0.jpg

最近想做一个小东西,打算将ppt和视频结合在一起。所以研究起了powerpoint。

   首先,环境是vs2008,vs2019,office我用的是2016(.ppt,.pttx 都可以)。

   接下来,是如果调用PowerPoint,建一个c#的控制台应用程序,然后右键解决方案资源管理器里的引用-》添加引用-》浏览:找到office安装路径 下有个OFFICE14,找到msppt.olb

例如D:\Program Files\Microsoft Office\Office14;找到后添加进去,引入框中便会多出几个接口Microsoft.Office.Interop.PowerPoint和Microsoft.Office.Core。然后在程序中添加引用。

程序列子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

namespace tst
{
    class Program
    {
        static void Main(string[] args)
        {
            //   Purpose:   Creates   a   PowerPoint   presentation,
            //   adds   a   slide   and   two   shapes   to   the   slide,
            //   animates   the   shapes,   and   runs   the   slide   show.

            Application ppApp = new Application();

            //   Create   a   new   PowerPoint   presentation.
           Presentation objPres = ppApp.Presentations.Add(MsoTriState.msoTrue);

            //   Add   a   slide   to   the   presentation.
            _Slide objSlide = objPres.Slides.Add
            (1, PpSlideLayout.ppLayoutBlank);

            //   Place   two   shapes   on   the   slide.  
            Microsoft.Office.Interop.PowerPoint.Shape objSquareShape = objSlide.Shapes.AddShape
            (MsoAutoShapeType.msoShapeRectangle,
            0, 0, 100, 100);
            Microsoft.Office.Interop.PowerPoint.Shape objTriangleShape = objSlide.Shapes.AddShape
            (MsoAutoShapeType.msoShapeRightTriangle,
            0, 150, 100, 100);

            //   Add   an   animation   sequence.  
            Sequence objSequence =
            objSlide.TimeLine.InteractiveSequences.Add(1);

            //   Add   text   to   the   shapes.  
            objSquareShape.TextFrame.TextRange.Text = "Click   Me! ";
            objTriangleShape.TextFrame.TextRange.Text = "Me   Too! ";

            //   Animate   the   shapes.  
            objSequence.AddEffect(objSquareShape,
            MsoAnimEffect.msoAnimEffectPathStairsDown,
            MsoAnimateByLevel.msoAnimateLevelNone,
            MsoAnimTriggerType.msoAnimTriggerOnShapeClick,
            1);
            objSequence.AddEffect(objTriangleShape,
            MsoAnimEffect.msoAnimEffectPathHorizontalFigure8,
            MsoAnimateByLevel.msoAnimateLevelNone,
            MsoAnimTriggerType.msoAnimTriggerOnShapeClick,
            1);

            //   Save   the   presentation   and   run   the   slide   show.  
            objPres.SaveAs("./test",
            PpSaveAsFileType.ppSaveAsPresentation,
            MsoTriState.msoTrue);
            objPres.SlideShowSettings.Run();

        }
    }
}
ps:PowerPoint的函数和方法库可在office的帮助文档内查到。

.在项目中添加引用 Microsoft PowerPoint 14.0 Object Library2. using Microsoft.Office.Interop.PowerPoint;

3.创建一个PPT,添加一个空白页

Microsoft.Office.Interop.PowerPoint.Application PPT = new Microsoft.Office.Interop.PowerPoint.Application();//创建PPT应用
Microsoft.Office.Interop.PowerPoint.Presentation MyPres = null;//PPT应用的实例
Microsoft.Office.Interop.PowerPoint.Slide MySlide = null;//PPT中的幻灯片


MyPres = PPT.Presentations.Open("文件路径", MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoTrue);//此处将一个PPT实例给了MyPres

MySlide = MyPres.Slides.Add(1, Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutBlank);//像PPT实例中,添加一个空白页,位置是“第一页”

4.向PPT的幻灯片中添加元素

4.1文本框

Microsoft.Office.Interop.PowerPoint.TextRange MyTextRng = null;

MySlide.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal, 21.5F, 365F, 670F, 270F);

MyTextRng = MySlide.Shapes[1].TextFrame.TextRange;//请注意此处Shapes的索引,由于文本框是第一个添加的Shapes,所以此处索引是1。

MyTextRng.Font.NameFarEast = "微软雅黑";//文本框中,中文的字体                   
MyTextRng.Font.NameAscii = "Calibri";//文本框中,英文和数字的字体      
MyTextRng.Text ="C#生成PPT";//显示的内容
MyTextRng.Font.Bold = MsoTriState.msoTrue;//是否加粗
MyTextRng.Font.Color.RGB = A+ B * 256 + C * 256 * 256;//字体颜色,其中ABC直接用自定义颜色中的数字代替即可。
MyTextRng.Characters(1, 10).Font.Size = 24;//个性化设计。第1个字符开始,长度为10的字符,字体大小是24.
MyTextRng.ParagraphFormat.Alignment = Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft;//文本对齐方式(水平方向)
MySlide.Shapes[1].TextFrame.VerticalAnchor = MsoVerticalAnchor.msoAnchorMiddle; 文本对齐方式(垂直方向)


心得:最重要的设置在Font属性中。其他设置,基本可以参考PPT中元素属性的设置方式来找到。比如我在写文本水平对齐方式时(左对齐,居中,右对齐),在PPT中,我们直接点击“段落”中的快捷键即可。所以我就找“段落”的英文,正好Alignment是对齐的意思,所以就找到了。


4.2 图形(矩形)

MySlide.Shapes.AddShape(MsoAutoShapeType.msoShapeRectangle, 8.5F, 6.5F, 705F, 525F);

MySlide.Shapes[1].Line.ForeColor.RGB = A + B * 256 + C * 256 * 256;//改变线条颜色
MySlide.Shapes[1].Fill.Transparency = 1;//控制填充色为透明
MySlide.Shapes[1].Line.Style = MsoLineStyle.msoLineSingle;//改变线型里的复合类型
MySlide.Shapes[1].Line.Weight = 1F;//改变线粗细
MySlide.Shapes[1].Shadow.Style = MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型
MySlide.Shapes[1].Shadow.ForeColor.RGB = 0;//控制阴影颜色
MySlide.Shapes[1].Shadow.Transparency = 0.6F;//控制透明度
MySlide.Shapes[1].Shadow.Size = 100F;//控制大小
MySlide.Shapes[1].Shadow.Blur = 4F;//控制虚化
MySlide.Shapes[1].Shadow.OffsetX = 2.1F;//控制距离;
MySlide.Shapes[1].Shadow.OffsetY = 2.1F;//与offsetX共同决定角度

心得:基本的一些设置,通过英文就可以辨别。不过有些属性的设置是否与预期一致,需要等图形生成后再进一步确认。


4.3 图片

MySlide.Shapes.AddPicture("文件路径", MsoTriState.msoFalse, MsoTriState.msoTrue, 27F, 24F, 665F, 333F);


4.4 表格

Microsoft.Office.Interop.PowerPoint.Table MyTable = null;

MyTable = MySlide.Shapes.AddTable(19, 5, 40F, 100F, 10F, 10F).Table;//创建时规定的宽和高,不是表格最终的大小。

MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.Size = 10;
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.Color.RGB = A + B * 256 + C * 256 * 256;
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.NameAscii = "Arial";
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.NameFarEast = "微软雅黑";
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Font.Bold = MsoTriState.msoTrue;
MyTable.Cell(k, j).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignCenter;
MyTable.Cell(k, j).Shape.TextFrame.VerticalAnchor = MsoVerticalAnchor.msoAnchorMiddle;
MyTable.Cell(k, j).Shape.Fill.ForeColor.RGB = 0;
MyTable.Cell(k, j).Shape.TextFrame.TextRange.Text = "C#生成PPT";

这里的设置,几乎和文本框的设置一样。只不过需要先选定Cell。一些个性化的设计,比如合并拆分单元格,边框颜色,按照一般的英文意思都能找到。


4.5 图表

Microsoft.Office.Interop.PowerPoint.Chart MyChart = null;//图表
Microsoft.Office.Interop.PowerPoint.ChartData MyChartData = null;//图表的数据源
Microsoft.Office.Interop.PowerPoint.Axis MyYvalaxis = null;//图表的纵坐标
Microsoft.Office.Interop.PowerPoint.Axis MyXvalaxis = null;//图表的横坐标
Microsoft.Office.Interop.PowerPoint.DataLabels MyDataLabels = null;//图表的数据标签
Microsoft.Office.Interop.PowerPoint.Series MySeries = null;//数据系列
Microsoft.Office.Interop.PowerPoint.ChartGroups MyChartGroups = null;//数据系列-系列选项
Microsoft.Office.Interop.PowerPoint.Points MyPoints = null; //数据系列


MyChart = MySlide.Shapes.AddChart(Microsoft.Office.Core.XlChartType.xlColumnClustered, 35F, 205F, 642F, 227F).Chart;//添加柱形图

MyChartData = MyChart.ChartData;//实例化数据源

Microsoft.Office.Interop.Excel.Workbook MyDataWorkbook_2 = (Microsoft.Office.Interop.Excel.Workbook)MyChartData.Workbook;//由于PPT的数据源是EXCEL工作表,所以此处还要调用EXCEL。

MyDataWorkbook_2.Application.WindowState = XlWindowState.xlMinimized;//不想看那么多窗口,所以最小化了。

Microsoft.Office.Interop.Excel.Worksheet MyDataWorksheet_2 = (Microsoft.Office.Interop.Excel.Worksheet)MyDataWorkbook_2.Worksheets[1];//实例化工作表

Microsoft.Office.Interop.Excel.Range tRange_2 = MyDataWorksheet_2.Cells.get_Range("A1", "C10");//选定数据区域

Microsoft.Office.Interop.Excel.ListObject tbl1_2 = MyDataWorksheet_2.ListObjects[1];
tbl1_2.Resize(tRange_2);

//赋值  
((Microsoft.Office.Interop.Excel.Range)(MyDataWorksheet_2.Cells.get_Range("A2"))).FormulaR1C1 = "全国得分";
((Microsoft.Office.Interop.Excel.Range)(MyDataWorksheet_2.Cells.get_Range("A3"))).FormulaR1C1 = null;
                    
//图表标题
MyChart.ChartTitle.Delete();

//纵轴
MyYvalaxis = (Microsoft.Office.Interop.PowerPoint.Axis)MyChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlValue, Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary);

MyYvalaxis.MajorGridlines.Delete();//删除主横网络线
MyYvalaxis.MajorUnit = 0.5F;
MyYvalaxis.MinimumScale = 0.0F;
MyYvalaxis.MaximumScale = 1.5F;
MyYvalaxis.Format.Line.ForeColor.RGB = A + B * 256 + C * 256 * 256; ;//坐标轴颜色
MyYvalaxis.Format.Line.Transparency = 1F;//坐标轴是否透明;此句必须先指定颜色,否则无效              
MyYvalaxis.TickLabels.Delete();//删除坐标标签

//横轴
MyXvalaxis = (Microsoft.Office.Interop.PowerPoint.Axis)MyChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlCategory, Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary);

MyXvalaxis.MajorTickMark = Microsoft.Office.Interop.PowerPoint.XlTickMark.xlTickMarkOutside;//主要刻度线类型
MyXvalaxis.Format.Line.Weight = 0.75F;//线型宽度
MyXvalaxis.Format.Line.ForeColor.RGB = A + B * 256 + C * 256 * 256;//线条颜色
MyXvalaxis.TickLabelPosition = Microsoft.Office.Interop.PowerPoint.XlTickLabelPosition.xlTickLabelPositionNone;

//图例
MyChart.Legend.Delete();

//数据标签格式和系列
//系列1
MySeries = (Microsoft.Office.Interop.PowerPoint.Series)MyChart.SeriesCollection(1);
MySeries.HasDataLabels = true;
MySeries.Format.Fill.ForeColor.RGB = A + B * 256 + C * 256 * 256;
MySeries.Format.Line.ForeColor.RGB = A + B * 256 + C * 256 * 256;
MySeries.Format.Line.Weight = 1.5F;

MySeries.Format.Shadow.Style = MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型
MySeries.Format.Shadow.ForeColor.RGB = 0;//控制阴影颜色
MySeries.Format.Shadow.Transparency = 0.6F;//控制透明度
MySeries.Format.Shadow.Size = 100F;//控制大小
MySeries.Format.Shadow.Blur = 4F;//控制虚化
MySeries.Format.Shadow.OffsetX = 2.1F;//控制距离; 
MySeries.Format.Shadow.OffsetY = 2.1F;//与offsetX共同决定角度

//柱子颜色
MyPoints = (Microsoft.Office.Interop.PowerPoint.Points)MySeries.Points();

MyPoints.Item(1).Format.Fill.ForeColor.RGB = A + B * 256 + B * 256 * 256;//系列1中,第1个柱子的颜色

//柱子距离
MyChartGroups = (Microsoft.Office.Interop.PowerPoint.ChartGroups)MyChart.ChartGroups();
MyChartGroups.Item(1).GapWidth = 50;

//数据标签
MyDataLabels = (Microsoft.Office.Interop.PowerPoint.DataLabels)MySeries.DataLabels();
MyDataLabels.Position = Microsoft.Office.Interop.PowerPoint.XlDataLabelPosition.xlLabelPositionOutsideEnd;
MyDataLabels.NumberFormat = "0.0%";
MyDataLabels.Format.TextFrame2.TextRange.Font.Size = 9F;
MyDataLabels.Format.TextFrame2.TextRange.Font.NameAscii = "Calibri";
MyDataLabels.Format.TextFrame2.TextRange.Font.Bold = MsoTriState.msoTrue;

//系列2
MySeries = (Microsoft.Office.Interop.PowerPoint.Series)MyChart.SeriesCollection(2);
MySeries.HasDataLabels = true;
MySeries.Format.Fill.ForeColor.RGB = A + B * 256 + C * 256 * 256;
MySeries.Format.Line.ForeColor.RGB = A + B * 256 + C * 256 * 256;
MySeries.Format.Line.Weight = 1.5F;

MySeries.Format.Shadow.Style = MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型
MySeries.Format.Shadow.ForeColor.RGB = 0;//控制阴影颜色
MySeries.Format.Shadow.Transparency = 0.6F;//控制透明度
MySeries.Format.Shadow.Size = 100F;//控制大小
MySeries.Format.Shadow.Blur = 4F;//控制虚化
MySeries.Format.Shadow.OffsetX = 2.1F;//控制距离
MySeries.Format.Shadow.OffsetY = 2.1F;//与offsetX共同决定角度

//柱子距离
MyChartGroups = (Microsoft.Office.Interop.PowerPoint.ChartGroups)MyChart.ChartGroups();
MyChartGroups.Item(1).GapWidth = 50;

//数据标签
MyDataLabels = (Microsoft.Office.Interop.PowerPoint.DataLabels)MySeries.DataLabels();
MyDataLabels.Position = Microsoft.Office.Interop.PowerPoint.XlDataLabelPosition.xlLabelPositionOutsideEnd;
MyDataLabels.NumberFormat = "0.0%";
MyDataLabels.Format.TextFrame2.TextRange.Font.Size = 9F;
MyDataLabels.Format.TextFrame2.TextRange.Font.NameAscii = "Calibri";
MyDataLabels.Format.TextFrame2.TextRange.Font.Italic = MsoTriState.msoTrue; 



转自:https://blog.csdn.net/aixing5369/article/details/19081417?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

打赏 支付宝打赏 微信打赏

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。