(使用Win32:OLE
w / Perl)
如果多个工作簿已经打开,有没有办法指定运行Excel宏的工作簿?
我使用以下代码,但如果打开多个Excel工作簿,有时会失败。我知道有一个明显的解决方案只关闭其他工作簿,但我的工作通常涉及使用另一个Excel工作簿(这是一个麻烦,以保持关闭和重新打开)。所以我希望有一种方法可以指定运行宏的工作簿(可能类似于指定其他参数的方式,例如Win32::GUI
的标题)。
以下是一个当前只适用于一个工作簿的示例:
use Win32::OLE;
my $excel = Win32::OLE->GetActiveObject('Excel.Application');
$excel->Run("macroName");
我正在运行的宏导出当前工作簿的所有工作表,因此从正确的工作簿运行它是很重要的。我查看了这个问题(How do I use Perl to run a macro in an **already open** Excel workbook),但似乎并没有解决如何选择运行工作簿的宏的问题。
我还在阅读这篇文章(http://docs.activestate.com/activeperl/5.6/faq/Windows/ActivePerl-Winfaq12.html),但它似乎没有显示出如何从特定工作簿运行宏的方法。如果两个工作簿具有相同的宏名称,我可以看到,如果两个工作簿具有相同的宏名称,我可以看到无法指定哪个工作簿可以运行。但是由于某些原因,这些工作簿会做不同的事情。
有什么建议吗?
答案 0 :(得分:2)
您需要在工作簿中选择所需的工作表。例如打开文件,选择第二个工作簿(按名称)并激活它:
#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Excel';
my $excelfile = 'd:\\Book1.xls';
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
|| Win32::OLE->new('Excel.Application');
$Excel->{'Visible'} = 1;
my $Book = $Excel->Workbooks->Open("$excelfile") or die "$!";
my $Sheet = $Book->Worksheets("Sheet2");
$Sheet->Activate();
的绝佳参考