C# 用Microsoft.Office.Interop.PowerPoint类库操作PPT

前言:最近由于项目需求,需要使用此类库对PPT进行操作
1.引用 Microsoft.Office.Interop.PowerPoint和 Microsoft.Office.Core在这里插入图片描述
2.PPT操作

打开PPT


//PPT应用程序变量
 Application application= = new Microsoft.Office.Interop.PowerPoint.Application();
 //PPT文档变量,打开PPT ,path为PPT文档路径
 Presentation ppt = application.Presentations.Open(path, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
 

获取文字内容

  1. 所有文字

               List<string> StrList=new List<string>();
               foreach (Microsoft.Office.Interop.PowerPoint.Slide slide in ppt.Slides)
                {            
                    //遍历所有元素
                    foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slide.Shapes)
                    {
                        //判断是否是文字
                        if (shape.HasTextFrame == OFFICECORE.MsoTriState.msoTrue && shape.TextFrame.HasText == OFFICECORE.MsoTriState.msoTrue)
                        {
                            StrList.add(shape.TextFrame.TextRange.Text.ToString());                           
                        }                   
                    }                                   
                }
                
  1. 指定Slides的文字内容

                List<string> list = new List<string>();    
                Microsoft.Office.Interop.PowerPoint.Slide slid = ppt.Slides[Index];
                //遍历所有元素
                foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slid.Shapes)
                {
                    //判断元素是文字
                    if (shape.HasTextFrame == OFFICECORE.MsoTriState.msoTrue && shape.TextFrame.HasText == OFFICECORE.MsoTriState.msoTrue)
                    {
                        list.Add(shape.TextFrame.TextRange.Text.ToString());
                    }
                }             
                return list;
                

获取指定幻灯片的所有图片


                Microsoft.Office.Interop.PowerPoint.Slide slid = ppt.Slides[Index];
                //遍历所有元素            
                foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slid.Shapes)
                {           
                    //判断是否是图片
                    if (shape.Type == OFFICECORE.MsoShapeType.msoPicture)
                    {
                            //复制到剪切板
                            shape.Copy();
                            //拿到图片数据                          
                            Image img = (Image)Clipboard.GetData(DataFormats.Bitmap); 
                    }
                }
                

获取指定幻灯片中的表格,转换成DataTable


                //找到指定Index的元素
                Microsoft.Office.Interop.PowerPoint.Slide slide = ppt.Slides[Index];
                //遍历所有元素
                foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slide.Shapes)
                {
                    //判断是否是表格
                    if (shape.HasTable == MsoTriState.msoTrue)
                    {
                        DataTable dt = new DataTable();
                        //遍历元素,转换成dataTable
                        for (int k = 0; k < shape.Table.Columns.Count; k++)
                        {
                            DataColumn dc = new DataColumn();
                            dt.Columns.Add(dc);
                        }
                        for (int i = 0; i < shape.Table.Rows.Count; i++)
                        {
                            DataRow dr = dt.NewRow();
                            for (int j = 0; j < shape.Table.Columns.Count; j++)
                            {
                                dr[j] = shape.Table.Cell(i + 1, j + 1).Shape.TextFrame.TextRange.Text;

                            }
                            dt.Rows.Add(dr);
                        }                     
                    }
                }
                

向指定幻灯片插入文本


        /// <summary>
        /// 向指定幻灯片插入文本
        /// </summary>
        /// <param name="ppt"></param>
        /// <param name="Index">幻灯片索引</param>
        /// <param name="text">文本内容</param>
        /// <param name="x">横坐标</param>
        /// <param name="y">纵坐标</param>
        /// <param name="width">宽</param>
        /// <param name="height">高</param>
        public void InsertText(int Index, string text, float x, float y, float width, float height)
        {
            try
            {
                Microsoft.Office.Interop.PowerPoint.Slide slide = ppt.Slides[Index];
                //添加Shape
                Microsoft.Office.Interop.PowerPoint.Shape shape = slide.Shapes.AddShape(
                    OFFICECORE.MsoAutoShapeType.msoShapeRectangle,
                    //下面设置宽高和位置
                    x,
                    y,
                    width,
                    height);
                //控制填充色为透明
                shape.Fill.Transparency = 1;
                //控制边框颜色为黑色
                shape.Line.ForeColor.RGB = System.Drawing.ColorTranslator.ToWin32(System.Drawing.Color.FromArgb(0, 0, 0));
                //文字加粗
                shape.TextFrame.TextRange.Font.Bold = MsoTriState.msoTrue;
                //字体为黑色
                shape.TextFrame.TextRange.Font.Color.RGB = System.Drawing.ColorTranslator.ToWin32(System.Drawing.Color.FromArgb(0, 0, 0));
                //字体
                shape.TextFrame.TextRange.Font.NameFarEast = "微软雅黑";
                //水平对齐
                shape.TextFrame.TextRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft;
                //插入的文本
                shape.TextFrame.TextRange.Text = text;
                //保存
                ppt.Save();
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
        }
        

插入图片


        /// <summary>
        /// 插入图片
        /// </summary>
        /// <param name="ppt"></param>
        /// <param name="Index">索引</param>
        /// <param name="imagePath">图片路径</param>
        /// <param name="x">横坐标</param>
        /// <param name="y">纵坐标</param>
        /// <param name="width">宽</param>
        /// <param name="height">高</param>
        public void InsertImage(int Index, string imagePath, float x, float y, float width, float height)
        {
            try
            {
                //保存图片
                ppt.Slides[Index].Shapes.AddPicture(
                             //图片路径
                             imagePath,
                             OFFICECORE.MsoTriState.msoFalse,
                             OFFICECORE.MsoTriState.msoTrue,
                             //插入图片距离左边长度
                             (float)(x),
                             //插入图片距离顶部高度
                             (float)(y),
                             //插入图片的宽度
                             (float)(width),
                             //插入图片的高度
                             (float)(height)
                          );
                ppt.Save();
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
        }
        

参阅资料

官方文档
https://docs.microsoft.com/zh-cn/office/vba/api/overview/powerpoint/object-model

设置背景色、字体颜色、PPT转图片
https://blog.csdn.net/qq_35398517/article/details/80184703

C# PPT的操作
https://blog.csdn.net/XiaoYanZi_0521/article/details/80191526?utm_medium=distribute.pc_relevant_ask_down.none-task-blog-BlogCommendFromBaidu-2.nonecase&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-BlogCommendFromBaidu-2.nonecas

https://www.cnblogs.com/hhhh2010/p/4630738.html

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值