Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Perl脚本转换为VBA脚本_Perl_Excel_Vba - Fatal编程技术网

将Perl脚本转换为VBA脚本

将Perl脚本转换为VBA脚本,perl,excel,vba,Perl,Excel,Vba,我有一个可以工作的Perl脚本,我想将其转换为VBA,在Excel宏中运行,以便可以轻松地共享给其他PC。我有一个shell脚本,在其中传递驱动perl脚本的参数。 我使用Perl脚本从一个固定宽度的文件中读取所有行数据的每个指定列,起始值为54,63,并将该数据与另一个文件进行比较,然后打印差异。我将在Shell脚本中以runpro.pl filea.txt fileb.csv>myoutput.txt的形式传递参数 任何帮助都会很好!特别是如果有人能给我指出正确的方向,因为代码相当简单。谢谢

我有一个可以工作的Perl脚本,我想将其转换为VBA,在Excel宏中运行,以便可以轻松地共享给其他PC。我有一个shell脚本,在其中传递驱动perl脚本的参数。 我使用Perl脚本从一个固定宽度的文件中读取所有行数据的每个指定列,起始值为54,63,并将该数据与另一个文件进行比较,然后打印差异。我将在Shell脚本中以runpro.pl filea.txt fileb.csv>myoutput.txt的形式传递参数 任何帮助都会很好!特别是如果有人能给我指出正确的方向,因为代码相当简单。谢谢

#!/usr/bin/perl
#Perl Script runpro.pl
#***************************************************

use strict;
use warnings;

my ($fa, $fb) = @ARGV;

@ARGV  = $fa;
my %codes;
while(<>) {
 s/[\r\n]+\z//;
 $_ = substr($_, 54, 63);
 s/\s+\z//;
 next if $_ eq "";
 $codes{$_} =1;
}

@ARGV  = $fb;
my %descrip;
while(<>) {
 s/[\r\n]+\z//;
 s/,.*//;
 s/"//g;
 $descrip {$_} = 1 if s/^1234//; 
}

for (sort keys %codes) {$   
print "$_\n" unless ($descrip{$_});
}
有两点:

1 VBA与Perl非常不同,因此一行程序中的一行程序在另一行程序中会很棘手

2如果您没有在Excel中使用VBA,我建议您先录制宏,使功能区中的“开发人员”选项卡可见,然后选择“录制宏”,然后开始执行打开文件、导入固定宽度的文件等操作。停止录音后,您将看到执行这些操作的语法-这将非常有用

3您必须决定如何将参数传递给VBA-工作表、对话框中的单元格。。。没有从命令行运行VBA这样的事情


我想知道您是否真的需要/想要VBA,还是最好编译一个独立的程序.exe。这意味着要在PC windows、Mac OS或两者上运行吗?例如,请参阅-如果不是您要求的,那么这可能就是您实际需要的…?

您能否举例说明如何使用VBA函数-如何传递参数,以及希望输出显示在何处?你的问题并不完全清楚……我用上面的一个例子进行了编辑。谢谢@FlorisCheck this:如果在MicrosoftOffice中录制宏,通常可以将其直接转换为Perl。