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

我正在尝试将Excel电子表格导出到SharePoint。 我logging了Visual Basic代码,现在我想把它翻译成Perl。 我试过这样,但没有奏效。

我没有得到任何错误,但我也没有看到Sharepoint中的列表。 当我在Excel中使用macros时,它工作

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); 

这张图片显示了结果

在这里输入图像说明

你应该use strict use warnings 。 它会继续告诉你一些错误消息。

我可以从你发布而不运行它的Perl代码中得到的是:

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

请注意, PublishArray(之间有一个空格Array(这是一个问题,唯一的方法是让函数cal跟在不是(;或者)的地方,如果它有原型的话,但是在面向对象的Perl不能有原型,所以这是绝对错误的。

然后是Array(...) 。 没有内置函数称为Array ,我不认为Win32 :: OLE :: Const导出,虽然我没有看。 即使这样做,你告诉它只能导出'Microsoft Excel'False

我建议你阅读Win32 :: OLE :: Const的文档,并添加use strictuse warnings 。 在SinanÜnürs博客上还有一些关于如何使用Win32模块的资源。

你可以看看这个: 将perl脚本转换为vba这已经有一些答案。

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