如何在不使用命令行的情况下运行Perl脚本?
我写了几个Perl脚本,可以让我更快地完成工作。每个脚本的运行,像这样的命令:如何在不使用命令行的情况下运行Perl脚本?
perl PerlScript.pl InFile > OutFile
两个INFILE和OutFile将一般制表符分隔的文件,我的工作场所的其余部分只看到为Excel文件。我的同事可以从使用这些脚本中受益,但是他们被从命令行运行程序的想法吓倒了。 有没有一些方法可以从GUI等更友好的用户界面运行Perl脚本?我的理想解决方案是让他们将一个Excel文件拖入一个文件夹,然后用鼠标点击一个按钮,这会产生一个新的Excel文件,并将其拖回到他们需要的地方。
我对Visual Basic一无所知,除了它存在,但我有一个暗示它可能对这个问题有用。是否可以在Visual Basic脚本中运行Perl脚本?认为一般害怕命令行和计算机科学的人能够舒适地运行Visual Basic脚本是否合理?
注意:我使用Mac OS和大多数同事一样。 Windows特定的解决方案会很好,因为我们有几台Windows计算机专用于任务,无论出于何种原因,它们都可以在Windows操作系统上轻松完成。
您可以使用Shell
命令在VBA中执行此操作。这是Windows环境中的一个例子。我不确定这些命令在OSX环境中的工作情况。
感谢Onorio Catenacci直接窃取了一些代码。
Public Const CmdPath = "C:\Windows\system32\cmd.exe"
Public Const PerlExecPath = "C:\path\to\perl\bin\perl.exe"
Public Const ScriptPath = "C:\Temp\script.pl"
Public Const OutputDir = "C:\Temp"
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
Function GetWorkbookIfLoaded(ByVal FileName As String) As Workbook
Dim lWbName As String
lWbName = Dir(FileName)
If lWbName = "" Then
lWbName = FileName
End If
On Error Resume Next
Set GetWorkbookIfLoaded = Workbooks(lWbName)
On Error GoTo 0
End Function
Function DeleteFile(ByVal FileToDelete As String)
Dim lUserOK As Boolean
Dim lReturn As Boolean
Dim lWbName As String
Dim oBk As Workbook
lUserOK = True
lWbName = Dir(FileToDelete)
lReturn = (lWbName = "")
If Not lReturn Then
Set oBk = GetWorkbookIfLoaded(lWbName)
If Not oBk Is Nothing Then
oBk.Close
Set oBk = GetWorkbookIfLoaded(lWbName)
lUserOK = (oBk Is Nothing)
End If
If lUserOK Then
SetAttr FileToDelete, vbNormal
Kill FileToDelete
lReturn = True
End If
End If
DeleteFile = lReturn
End Function
Sub CreateNewExcel()
Dim lProceed As Boolean
Dim lRetVal As Double
Dim lMsgResult As VbMsgBoxResult
Dim lOutputPath As String
Dim lCommand As String
lOutputPath = OutputDir & "\output.tab"
lCommand _
= CmdPath & " /C " & PerlExecPath & " -e " _
& Chr(34) & "print qq[${\(scalar localtime)}\t1\t2\t3\t4\n]" _
& Chr$(34) & " > " & lOutputPath
lProceed = DeleteFile(lOutputPath)
If Not lProceed Then Exit Sub
DoEvents
lRetVal = Shell(lCommand, vbHide)
Application.Wait (Now + TimeValue("0:00:01"))
If lRetVal = 0 Or Not FileExists(lOutputPath) Then
MsgBox ("Failed to run script")
Else
Workbooks.Open (lOutputPath)
End If
End Sub
我不得不在Application.Wait
调用抛出,因为测试的文件存在,有时会赶上尚未删除的文件,或者没有赶上未完全创建的文件。
我在*的其他地方找到了一些executing stuff in an Apple environment的东西。
这听起来像是OSX Folder Action
的完美应用程序。基本上,你开始Automator
,并告诉它你想创建一个Folder Action
,它给你一个分屏,你可以做的事情在左边,你开发你的脚本在右边。
将动作Run shell script
从左侧拖动到右侧,并选择将其应用于顶部的文件夹。然后将其从运行bash
更改为使用/usr/bin/perl
中的Perl解释器并粘贴脚本。
然后,您只需将文件放在文件夹上,然后运行Perl脚本就可以了。
你可以在System Preferences-> Sharing
使用Samba您的Windows用户共享该文件夹,使他们受益于OS X.的功率
Automator的+1。出于某种原因,我总是忘记这个工具,但它确实为非终端用户提供了一个很好的选择。 – jimtut 2015-02-07 05:43:46
如果你设置了Perl作为一个文件关联,那么你可以双击脚本运行它。尽管你需要以不同的方式处理命令行参数。 – Sobrique 2015-02-06 15:37:20
你在使用什么操作系统? – 2015-02-06 15:38:06
鉴于对Excel和VB的参考,我将假定Windows ...... – Sobrique 2015-02-06 15:38:50