我编写了一些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操作系统上更容易完成的任务。
答案 0 :(得分:1)
这听起来像是OSX Folder Action
的完美应用。基本上,你启动Automator
并告诉它你想要创建一个Folder Action
它会给你一个分屏,你可以做的事情在左边,你在右边开发你的脚本。 / p>
将操作Run shell script
从左侧拖动到右侧,然后选择要应用于顶部的文件夹。然后将其从运行bash
更改为使用/usr/bin/perl
中的Perl解释器并粘贴您的脚本。
然后您需要做的就是删除文件夹上的文件,它将在其上运行Perl脚本。
您可以在System Preferences-> Sharing
中使用Samba与Windows用户共享该文件夹,以便他们从OS X的强大功能中受益。
答案 1 :(得分:0)
您可以使用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
调用,因为对文件存在的测试有时会捕获尚未删除的文件,或者没有捕获未完全创建的文件。
我确实在StackOverflow上的其他地方的executing stuff in an Apple environment找到了一些东西。