如何在 C# 或 Perl 中以编程方式打开 PowerPoint 演示文稿并将其保存为 HTML/JPEG?
Posted
技术标签:
【中文标题】如何在 C# 或 Perl 中以编程方式打开 PowerPoint 演示文稿并将其保存为 HTML/JPEG?【英文标题】:How can I programmatically open and save a PowerPoint presentation as HTML/JPEG in C# or Perl? 【发布时间】:2010-11-05 11:58:25 【问题描述】:我正在寻找可以做到这一点的代码 sn-p,最好是在 C# 甚至 Perl 中。
我希望这不是一项大任务;)
【问题讨论】:
我认为你最好的选择是一些 C# 和 PowerPoint 互操作程序集......也许可以尝试研究一下。 运行程序的电脑会安装PowerPoint吗? 【参考方案1】:以下将打开C:\presentation1.ppt
并将幻灯片另存为C:\Presentation1\slide1.jpg
等。
如果您需要获取互操作程序集,可以在 Office 安装程序的“工具”下获得,或者您可以从 here (office 2003) 下载。如果您有较新版本的 office,您应该能够从那里找到其他版本的链接。
using Microsoft.Office.Core;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
namespace PPInterop
class Program
static void Main(string[] args)
var app = new PowerPoint.Application();
var pres = app.Presentations;
var file = pres.Open(@"C:\Presentation1.ppt", MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);
file.SaveCopyAs(@"C:\presentation1.jpg", Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsJPG, MsoTriState.msoTrue);
编辑: Sinan's version 使用 export 看起来是更好的选择,因为您可以指定输出分辨率。对于 C#,将上面的最后一行更改为:
file.Export(@"C:\presentation1.jpg", "JPG", 1024, 768);
【讨论】:
+1 用于 C# 解决方案(当我可以再次投票时,应该再过八小时左右;-) 这太棒了。对于 Office 2010 及更高版本的所有用户,库 'Microsoft.Office.Core' lib is actually a COM library,而不是需要加载的扩展。【参考方案2】:正如Kev 指出的那样,不要在网络服务器上使用它。但是,以下 Perl 脚本非常适合离线文件转换等:
#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft PowerPoint';
$Win32::OLE::Warn = 3;
use File::Basename;
use File::Spec::Functions qw( catfile );
my $EXPORT_DIR = catfile $ENVTEMP, 'ppt';
my ($ppt) = @ARGV;
defined $ppt or do
my $progname = fileparse $0;
warn "Usage: $progname output_filename\n";
exit 1;
;
my $app = get_powerpoint();
$app->Visible = 1;
my $presentation = $app->Presentations->Open($ppt);
die "Could not open '$ppt'\n" unless $presentation;
$presentation->Export(
catfile( $EXPORT_DIR, basename $ppt ),
'JPG',
1024,
768,
);
sub get_powerpoint
my $app;
eval $app = Win32::OLE->GetActiveObject('PowerPoint.Application') ;
die "$@\n" if $@;
unless(defined $app)
$app = Win32::OLE->new('PowerPoint.Application',
sub $_[0]->Quit
) or die sprintf(
"Cannot start PowerPoint: '%s'\n", Win32::OLE->LastError
);
return $app;
【讨论】:
以上是关于如何在 C# 或 Perl 中以编程方式打开 PowerPoint 演示文稿并将其保存为 HTML/JPEG?的主要内容,如果未能解决你的问题,请参考以下文章
如果应用程序具有应用程序清单,如何在 C# 中以编程方式获取?
在 C# 中以编程方式创建防火墙规则以打开每个应用程序的端口
在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码