如何将此代码从Visual Basic转换为Perl?

时间:2013-12-19 10:56:39

标签: windows perl excel-vba sharepoint-2010 vba

我正在尝试将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);

此图像显示结果

enter image description here

2 个答案:

答案 0 :(得分:3)

您应该use strictuse warnings。它会继续告诉你一些错误信息。

我可以从你发布的Perl代码中得到的结果是:

my $list= $book->ActiveSheet->ListObjects("Table1")->Publish Array("https:\/\/sponsor\/sites\/dev_test_site", "myname"), False;

请注意,PublishArray(之间有一个空格。那一定是个问题。除了(;,之外,使用函数cal的唯一方法是它是否具有原型。但是面向对象的Perl中的方法调用不能有原型。所以这绝对是错误的。

然后是Array(...)。没有名为Array的内置函数,我不认为Win32 :: OLE :: Const导出了,虽然我没看。即使它确实如此,你告诉它只导出'Microsoft Excel'False也是如此。

我建议您阅读documentation of Win32::OLE::Const并添加use strictuse warnings。还有一些资源可以在Sinan Ünürs blog上使用Win32模块。

答案 1 :(得分:1)

你可以看看这个:Convert perl script to vba这已经有了一些答案。

您可能需要遵循此脚本。 % pp -o hello hello.pl或类似的东西。