Rin*_*ini 4 excel perl command-line add-in
(请原谅我对Excel加载项的无知,并在适当的时候随意纠正我的女性主义.)
我有一个经常使用的Excel加载项.此加载项会插入一个带有许多按钮的工具栏.我想自动执行在Excel中打开电子表格然后"单击"其中一个按钮的任务.换句话说,我想使用Perl(或命令行)来激活此加载项的特定功能.
我没有立即访问加载项的源代码,但我应该能够请求特定信息,如过程名称,如果需要.
我无法使用CPAN模块执行此任务 - 仅使用我的ActivePerl版本安装 - 但我确实有Win32 :: OLE,这对其他Office自动化很有帮助.
有什么指针吗?
是否有工具栏按钮的键绑定?
如果有,您可以使用SendKeys方法将该密钥发送到Excel:http://msdn.microsoft.com/en-us/library/aa202943(office.10).aspx
或者,CommandBars集合可能很有用.请参阅http://msdn.microsoft.com/en-us/library/aa171356(office.11).aspx以供参考.
下面的示例代码列出了"标准"工具栏中的可见命令栏和控件.当它找到带有标题Open的控件时,它会调用该控件.这应显示"文件 - >打开"对话框:
#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE qw(in with);
$Win32::OLE::Warn = 3;
my $app = get_excel();
$app->{Visible} = 1;
my $book = $app->Workbooks->Add;
for my $bar (in $app->CommandBars) {
if ( $bar->{Visible} ) {
print $bar->{Name}, "\n";
}
}
print "Controls in the 'Standard' toolbar:\n";
my $bar = $app->CommandBars->{Standard};
for my $control (in $bar->{Controls}) {
print "\t", $control->{Caption}, "\n";
if ( $control->{Caption} =~ /^Open/ ) {
print "opening ...\n";
$control->Execute;
}
}
sub get_excel {
my $excel;
eval {
$excel = Win32::OLE->GetActiveObject('Excel.Application');
};
die "$@\n" if $@;
unless(defined $excel) {
$excel = Win32::OLE->new('Excel.Application', sub { $_[0]->Quit })
or die "Oops, cannot start Excel: ",
Win32::OLE->LastError, "\n";
}
return $excel;
}
__END__
Run Code Online (Sandbox Code Playgroud)
HTH