我正在尝试将Excel电子表格导出到SharePoint。我录制了Visual Basic代码,现在我想把它翻译成Perl。我试过这样但是没用。
我没有收到任何错误,但我也没有看到Sharepoint中的列表。当我在Excel中使用宏时,它工作
use Win32::OLE::Const 'Microsoft Excel';
my $excel = Win32::OLE->new('Excel.Application');
$excel->{'Visible'} = 1;
$excel->{DisplayAlerts} = 1;
my $book = $excel->Workbooks->Open("C:\\Book1.xlsx")
|| die("Unable to open document ", Win32::OLE->LastError());
my $list = $book->ActiveSheet->ListObjects("Table1")->Publish Array("https:\/\/sponsor\/sites\/dev_test_site", "myname"), False;
原始的Visual Basic代码
Sub Macro1()
ActiveSheet.ListObjects("Table1").Publish Array( _
"https://sponsor/sites/dev_test_site", "myname"), False
Range("C2").Select
End Sub
最终我想出了这段代码
my $excel = Win32::OLE->new('Excel.Application');
$excel->{'Visible'} = 1;
$excel->{DisplayAlerts} = 1;
my $book = $excel->Workbooks->Open("C:\\Book1.xlsm")
|| die("Unable to open document ", Win32::OLE->LastError());
my @array=("https:\/\/sponsor\/sites\/dev_test_site", "aaaa");
my $list= $book->ActiveSheet->ListObjects("hhhh")->Publish(@array, 0);
此图像显示结果
答案 0 :(得分:3)
您应该use strict
和use warnings
。它会继续告诉你一些错误信息。
我可以从你发布的Perl代码中得到的结果是:
my $list= $book->ActiveSheet->ListObjects("Table1")->Publish Array("https:\/\/sponsor\/sites\/dev_test_site", "myname"), False;
请注意,Publish
和Array(
之间有一个空格。那一定是个问题。除了(
或;
或,
之外,使用函数cal的唯一方法是它是否具有原型。但是面向对象的Perl中的方法调用不能有原型。所以这绝对是错误的。
然后是Array(...)
。没有名为Array
的内置函数,我不认为Win32 :: OLE :: Const导出了,虽然我没看。即使它确实如此,你告诉它只导出'Microsoft Excel'
。 False
也是如此。
我建议您阅读documentation of Win32::OLE::Const并添加use strict
和use warnings
。还有一些资源可以在Sinan Ünürs blog上使用Win32模块。
答案 1 :(得分:1)
你可以看看这个:Convert perl script to vba这已经有了一些答案。
您可能需要遵循此脚本。 % pp -o hello hello.pl
或类似的东西。