C#操作PPT删除图片
需求:用c#把PPT里删除每一页的图片,而且PPT有三十多页
Spire.Presentation for .NET组件可以轻松删除图片,但这个组件商业版需要购买(没钱),免费版只能操作十页,且自带水印,很明显不符合需求。
剩下的就一种方案,用微软自带的office组件。在项目里引入 Microsoft.Office.Interop.PowerPoint 和 Office。通过NuGet方式下载组件,会自动适配当前.NET FrameWork版本
下面是主要代码:
using Microsoft.Office.Core;
using Microsoft.Office.Interop.PowerPoint;
using System;
namespace ClearPPTImage
{
class Program
{
///
/// ppt文件地址
///
private static readonly string filePath = @"E:\bk\demo.pptx";
static void Main(string[] args)
{
Application pptApp = new Application();
try
{
// 以只读方式打开,方便操作结束后保存.
Presentation presentation = pptApp.Presentations.Open(filePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
//判断当前PPT是不是空PPT
if (presentation == null || presentation.Slides.Count <= 0)
{
Console.WriteLine("[Error]当前PPT对象为空");
return;
}
//注意 Slides的下标要从1开始,如果从0开始会报索引越界
for (int i = 1; i <= presentation.Slides.Count; i++)
{
Slide slid = presentation.Slides[i];
//判断当前ppt页有没有元素
if (slid.Shapes.Count <= 0)
{
continue;
}
//采用倒叙删除的方式删除图片,这样才能删除干净
for (int j = slid.Shapes.Count; j >= 1; j--)
{
var shapes = slid.Shapes[j];
//判断是否是图片
if (shapes.Type == MsoShapeType.msoPicture)
{
shapes.Delete();
}
}
}
//保持到新文件
presentation.SaveAs(@"E:\bk\demo112.pptx");
}
catch (Exception ex)
{
Console.WriteLine("[Error]" + ex.Message);
}
finally
{
//无论什么操作,最后都必须关闭ppt对象
pptApp.Quit();
}
Console.WriteLine("[Success]Success");
Console.ReadLine();
}
}
}
注意点:
1、presentation.Slides的下标要从1开始而不是0,否则会报下标越界错误
2、删除图片或者内容时,要采用倒叙方式删除,否则会有遗留