2015-02-06 2 views
1

나는 내 일을 더 빨리 할 수있는 몇 가지 펄 스크립트를 작성했다. 이 스크립트의 각이 같은 명령을 실행한다 :명령 줄을 사용하지 않고 Perl 스크립트를 어떻게 실행합니까?

perl PerlScript.pl InFile > OutFile 

InFile이과를 OutFile 모두 내 직장의 나머지 부분은 엑셀 파일로보고 일반적으로 탭으로 구분 된 파일이 있습니다. 동료들은이 스크립트를 사용하면 도움이되지만 커맨드 라인에서 프로그램을 실행한다는 생각에 겁 먹게됩니다. GUI와 같은보다 사용자 친화적 인 인터페이스에서 Perl 스크립트를 실행할 수있는 방법이 있습니까? 나의 이상적인 솔루션은 Excel 파일을 폴더로 드래그하여 마우스로 원하는 곳으로 드래그 할 수있는 새 Excel 파일을 생성하는 버튼을 클릭하는 것입니다.

Visual Basic에 관해서는 존재하지 않지만,이 문제에 유용 할 수도 있습니다. Visual Basic 스크립트에서 Perl 스크립트를 실행할 수 있습니까? 커맨드 라인과 컴퓨터 과학을 두려워하는 사람이 Visual Basic 스크립트를 편안하게 실행할 수 있다고 생각하는 것이 합리적입니까?

참고 : 대부분의 동료와 마찬가지로 Mac OS를 사용합니다. 우리가 몇 가지 Windows 컴퓨터를 가지고 있기 때문에 어떤 이유에서 건 Windows OS에서 더 쉽게 수행 할 수있는 작업 전용 Windows 컴퓨터가 있으므로 Windows 전용 솔루션이 좋을 것입니다.

+1

OS X의 전원 혜택 그것. 그러나 명령 행 인수를 다르게 처리해야합니다. – Sobrique

+2

어떤 OS를 사용하고 있습니까? –

+2

엑셀과 VB에 대한 참고 자료가 있다면, 나는 윈도우를 생각할 것이다. – Sobrique

답변

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 전화를 던져, 또는하지 않은 완전 생성 된 파일을 잡을했다.

다른 곳에서는 executing stuff in an Apple environment에 StackOverflow의 일부 항목을 찾았습니다.

1

이것은 OSX Folder Action의 완벽한 응용 프로그램처럼 들립니다. 기본적으로 Automator을 시작하여 Folder Action을 만들고 싶다고 말하면 할 수있는 작업이 왼쪽에 있고 오른쪽에 스크립트를 개발하는 분할 화면을 제공합니다.

왼쪽에서 오른쪽으로 동작 Run shell script을 끌어서 맨 위에 적용 할 폴더를 선택하십시오. 그런 다음 bash을 실행하여 Perl 인터프리터를 사용하여 /usr/bin/perl으로 변경하고 스크립트를 붙여 넣습니다.

그러면 폴더에 파일을 놓기 만하면 Perl 스크립트가 실행됩니다.

당신은 System Preferences-> Sharing에서 삼바를 사용하여 Windows 사용자와 폴더를 공유 할 수

는 그래서 그들은 다음 실행하는 스크립트를 더블 클릭하면 파일 연결로 펄을 설정하면

+0

+1 용 Automator. 어떤 이유로 나는이 도구에 대해 항상 잊어 버렸지 만 비 터미널 친화적 인 사용자에게는 훌륭한 옵션을 제공합니다. – jimtut

관련 문제