前言:最近由于项目需求,需要使用此类库对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);
获取文字内容
- 所有文字
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());
}
}
}
- 指定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.youkuaiyun.com/qq_35398517/article/details/80184703