如何在C#或Perl中以编程方式打开并将PowerPoint演示文稿另存为HTML / JPEG?

时间:2022-09-02 15:51:11

I am looking for a code snippet that does just this, preferably in C# or even Perl.

我正在寻找一个代码片段,它可以做到这一点,最好是在C#甚至Perl中。

I hope this not a big task ;)

我希望这不是一项大任务;)

2 个解决方案

#1


The following will open C:\presentation1.ppt and save the slides as C:\Presentation1\slide1.jpg etc.

以下将打开C:\ presentation1.ppt并将幻灯片保存为C:\ Presentation1 \ slide1.jpg等。

If you need to get the interop assembly, it is available under 'Tools' in the Office install program, or you can download it from here (office 2003). You should be able to find the links for other versions from there if you have a newer version of office.

如果需要获取互操作程序集,可以在Office安装程序的“工具”下找到它,也可以从此处下载(office 2003)。如果您有更新版本的办公室,您应该能够从那里找到其他版本的链接。

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);
    }
  }
}

Edit: Sinan's version using export looks to be a bit better option since you can specify an output resolution. For C#, change the last line above to:

编辑:使用导出的Sinan版本看起来是更好的选择,因为您可以指定输出分辨率。对于C#,将上面的最后一行更改为:

file.Export(@"C:\presentation1.jpg", "JPG", 1024, 768);

#2


As Kev points out, don't use this on a web server. However, the following Perl script is perfectly fine for offline file conversion etc:

正如Kev所指出的,不要在Web服务器上使用它。但是,以下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 $ENV{TEMP}, '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;
}

#1


The following will open C:\presentation1.ppt and save the slides as C:\Presentation1\slide1.jpg etc.

以下将打开C:\ presentation1.ppt并将幻灯片保存为C:\ Presentation1 \ slide1.jpg等。

If you need to get the interop assembly, it is available under 'Tools' in the Office install program, or you can download it from here (office 2003). You should be able to find the links for other versions from there if you have a newer version of office.

如果需要获取互操作程序集,可以在Office安装程序的“工具”下找到它,也可以从此处下载(office 2003)。如果您有更新版本的办公室,您应该能够从那里找到其他版本的链接。

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);
    }
  }
}

Edit: Sinan's version using export looks to be a bit better option since you can specify an output resolution. For C#, change the last line above to:

编辑:使用导出的Sinan版本看起来是更好的选择,因为您可以指定输出分辨率。对于C#,将上面的最后一行更改为:

file.Export(@"C:\presentation1.jpg", "JPG", 1024, 768);

#2


As Kev points out, don't use this on a web server. However, the following Perl script is perfectly fine for offline file conversion etc:

正如Kev所指出的,不要在Web服务器上使用它。但是,以下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 $ENV{TEMP}, '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;
}