Abs*_*Abs 4 php java perl project-planning implementation
我被要求在今天的工作中自动执行特定任务,这占用了我们很多时间!以下是需要完成的工作,如果可能的话,我将非常感谢能够在我的知识范围内如何做到这一点(实施建议).
我有一个PowerPoint文档(.ppt).我想从那里提取文本(文本是子弹点格式).我想将这些子弹点插入Excel工作表,每个子弹点应该是一行.我还想把这个项目符号点文本的页面放在相邻的列中.
所以,基本上:从ppt中提取 - >插入到Excel工作表中,每一行都是一个项目符号点.
Perl,PHP和Java.
我更喜欢PHP,因为这是我的主要语言,但我很高兴考虑你们/ gals认为最好的其他事情.第二个是Perl,然后是Java.我不想为此编译类和安装JDK!:)
我会考虑MS技术(VB等),如果它让生活更轻松,但我从未使用它,我鄙视MS技术!希望我不被福音传道者焚烧!:)
它可以用Perl完成.几乎任何你可以用VBA做的事都可以用Perl通过Win32 :: OLE来完成.我使用Win32 :: OLE模块来处理MS-Office文档,包括提取和创建内容.虽然已经有一段时间了.从这里开始,关于页面中间的http://win32.perl.org/wiki/index.php?title=Win32_Perl_Modules.
关于每个对象的VBA文档对于参考,查找有哪些对象以及它们可用的方法和属性很有用.
Puh ......使用Perl,PHP或Java处理MS Office文件会很困难.当我不得不为MS Office文件做自动化时,我经常使用VBA(Visual Basic for Applications).看看吧.对于很多东西,你可以只记录一个宏,看看生成的代码并了解如何引用它们.然后获取生成的代码片段并创建自己的VBA模块和工具.我可以想象这样的功能可以完全适合作为Power Point的插件.
这是一个使用Win32 :: OLE的示例脚本.
顺便说一下,一旦将幻灯片转换为可以处理的格式,就可以在非MS系统上使用Spreadsheet :: WriteExcel来编写输出.因此,我建议使用两个程序:一个用于转换PowerPoint文档,另一个用于生成Excel文件.
请注意,Microsoft Office应用程序的一个极好的信息来源是对象浏览器.您可以通过工具→宏→Visual Basic编辑器访问它.进入编辑器后,单击F2以浏览Microsoft Office应用程序提供的接口,方法和属性.
#!/usr/bin/perl
use strict;
use warnings;
use FindBin qw( $Bin );
use File::Spec::Functions qw( catfile );
use Win32::OLE;
use Win32::OLE::Const 'Microsoft PowerPoint';
$Win32::OLE::Warn = 3;
my $ppt = get_ppt();
$ppt->{Visible} = 1;
my $ppt_file = catfile $Bin, 'test.ppt';
my $doc = $ppt->Presentations->open( $ppt_file );
my $slides = $doc->Slides;
my $num_slides = $slides->Count;
for my $slide_idx (1 .. $num_slides) {
print "=== Begin Slide $slide_idx ===\n";
my $slide = $doc->Slides->Item( $slide_idx );
my $shapes = $slide->Shapes;
my $num_shapes = $shapes->Count;
for my $shape_idx (1 .. $num_shapes) {
my $shape = $shapes->Item($shape_idx);
next unless $shape->HasTextFrame;
my $pars = $shape->TextFrame->TextRange->Paragraphs;
my $num_pars = $pars->Count;
for my $par_idx (1 .. $num_pars) {
my $par = $pars->Paragraphs($par_idx,1);
print_par( $par );
}
}
print "=== End Slide $slide_idx ===\n\n";
}
sub print_par {
my ($par) = @_;
my @bullets = qw( - * > + = @ );
my $bullet_format = $par->ParagraphFormat->Bullet;
my $bullet_type = $bullet_format->Type;
my $bullet_char = '';
if ($bullet_type == ppBulletNumbered) {
$bullet_char = $bullet_format->Number . "\t";
}
elsif( $bullet_type == ppBulletUnnumbered ) {
# Need a Unicode => ASCII mapping if you want to use
# $bullet_format->Character
my $indent = $par->IndentLevel % scalar @bullets;
$bullet_char = $bullets[$indent] . "\t";
}
my $text = $par->Text;
$text =~ s/\s+$//;
print $bullet_char, $text,"\n";
}
sub get_ppt {
my $app;
eval {
$app = Win32::OLE->GetActiveObject('PowerPoint.Application');
};
die "$@\n" if $@;
unless($app) {
$app = Win32::OLE->new(
'PowerPoint.Application', sub { $_[0]->Quit }
) or die "Oops, cannot start PowerPoint: ",
Win32::OLE->LastError, "\n";
}
return $app;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2122 次 |
| 最近记录: |