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

2023-11-04

前言:最近由于项目需求,需要使用此类库对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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 用Microsoft.Office.Interop.PowerPoint类库操作PPT 的相关文章

随机推荐

  • 软件测试用例所有疑问,只需这篇就够了

    1 测试用例是什么 答 测试用例的设计就是如何覆盖所有软件表现出来的状态 即在满足输入 输出的一组条件下 软件运行是一系列有次序的 受控制的状态变化过程 2 设计用例是否有必要 答 如果不记下来 很可能到执行的时候测试点就遗漏了 另外也不便
  • 手撕源码之代码手写mvc

    1 首先附上代码地址 https gitee com cqut lin hand tear source code 实现思路 Spring主要也是通过DispatcherServlet实现了Servlet这个接口 又叫前端控制器 来自前端的
  • 51单片机的波特率

    最近使用51单片机的时候 设置串口的波特率 需要多种 固先记下来 晶振更改的时候可以通过excel中的改动来调整 excel在126中email的网盘中 51单片机的波特率 et 下面列表是基于定时器2的方式2 自动重装的方式 晶振 11
  • 安卓Activity跳转的几种方式

    本文转载于http blog sina com cn s blog 5140274d0100q4j7 html 本人仅作为学习交流之用 请大家尊重原创 第一种方式 用action来跳转 使用Action跳转 如果有一个程序的 Android
  • Java从小白到大牛第1篇 Java基础-关东升-专题视频课程

    Java从小白到大牛第1篇 Java基础 3042人已学习 课程介绍 本视频是智捷课堂推出的一套 Java语言学习立体教程 的视频第一部分 读者以及观看群是初级小白 通过本视频的学习能够成为Java大牛 本主要内容包括 Java语法基础 J
  • 波特率_通信基本概念扫盲(波特率与带宽的关系)

    在工作和学习中 通常会遇到一些比较基础的技术性问题 比如波特率为B的信号 它的频谱宽度是多少 说这个问题基础 但答案并不简单 今天分享的一些基本概念 就是希望能解答上述的问题 1 信号的快慢 表示信号快慢通常会用速率相关的参数 比如 码元速
  • 计算机主机内部结构连接,电脑主机内部结构图详解

    电脑主机内部结构分为多种硬件组合而成 硬件可以理解为看得到摸得着的东西 计算机硬件通常包括主板 CPU 内存 硬盘 光驱 电源 以及其他输入输出控制器和接口 如 USB 控制器 显卡 网卡 声卡等等 位于主机箱内的通常称为内设 而位于主机箱
  • android设备SD卡文件扫描与同步(暂备份)

    package com owo contentresolvermedia import java io File import java util ArrayList import android app Activity import a
  • 同一页面、不同页面监听localStorage变化

    当同源页面的某个页面修改了localStorage 其余的同源页面只要注册了storage事件 就会触发 所以 localStorage 的例子运行需要如下条件 同一浏览器打开了两个同源页面 其中一个网页修改了 localStorage 另
  • 简单易懂的隐马尔可夫模型(HMM)讲解

    学习目标 了解什么是马尔科夫链 知道什么是HMM模型 知道前向后向算法评估观察序列概率 知道维特比算法解码隐藏状态序列 了解鲍姆 韦尔奇算法 知道HMM模型API的使用 一 马尔科夫链 在机器学习算法中 马尔可夫链 Markov chain
  • Top-1错误率、Top-5错误率等常见的模型算法评估指标解析

    Top 1 错误率 指预测输出的概率最高的类别与人工标注的类别相符的准确率 就是你预测的label取最后概率向量里面最大的那一个作为预测结果 如过你的预测结果中概率最大的那个分类正确 则预测正确 否则预测错误 比如预测100张图像的类别 每
  • Spring Cloud Alibaba和Spring Cloud的区别

    目录 Spring Cloud Netflix 和 Spring Cloud 是什么关系 为什么有了Spring Cloud又出来个Spring Cloud Alibaba呢 Spring Cloud Alibaba都有哪些功能呢 Clou
  • JAVA——注解和反射

    注解的理解 引用b乎大佬的比喻 注解就像一张标签 给人贴标签是一种行为 会使一个人身上 的特性只有一部分被放大出来 但是换个角度 标签就是对事物行为的某些角度的评价与解释 从代码的角度上看 注解就是对于代码中需要拥有某些特别意义的功能的部分
  • 计算个人所得税

    输入一个职工的月薪salary 输出应交的个人所得税tax 保留2位小数 tax rate salary 850 当 salary lt 850 时 rate 0 0 当 850 lt salary lt 1350 时 rate 0 05
  • centos 6 yum源不可用安装报YumRepo Error: All mirror URLs are not using ftp, http[s] or file

    项目场景 centos6 5 使用yum安装资源时 报如下错误 1 YumRepo Error All mirror URLs are not using ftp http s or file 解决方案 修改 etc yum repos d
  • Spring Data 与MongoDB 集成四:操作篇(查询)

    本文转载至 http blog csdn net congcong68 article details 47183209 一 简介 spring Data MongoDB提供了org springframework data mongodb
  • 论文阅读:Improved Denoising Diffusion Probabilistic Models

    本文是对ddpm简单的修改 但是能提高ddpm的性能 论文下载地址 https proceedings mlr press v139 nichol21a html 我们发现反向过程中可学习的方差允许一个数量级的采样 样本质量的差异可以忽略不
  • AOP中的代理对象

    先要了解spring容器初始化过程中Bean的生命周期 如果spring在启动过程中加上了 Transiation注释的话 spring会生成一个代理对象 来做事务控制 我们从容器中取出来的对象是代理对象 代理对象在执行方法之前会开启事务管
  • 浏览器兼容性问题解决

    样式兼容性 css 方面 解决方法 可以通过 Normalize css 抹平差异 也可以定制自己的 reset css 全局重置样式 firefox浏览器不支持cursor hand显示手型 解决方法 统一使用cursor pointer
  • C# 用Microsoft.Office.Interop.PowerPoint类库操作PPT

    前言 最近由于项目需求 需要使用此类库对PPT进行操作 1 引用 Microsoft Office Interop PowerPoint和 Microsoft Office Core 2 PPT操作 打开PPT PPT应用程序变量 Appl