your programing

VBA(Excel)에서 Bash 스크립트를 호출하는 방법

lovepro 2023. 8. 30. 23:48
반응형

VBA(Excel)에서 Bash 스크립트를 호출하는 방법

어떻게 실행합니까?bash OSX에서 VBA 파일

나는 다음 코드를 시도했습니다.

location = FolderPath(ThisWorkBook.FullName) 

현재 디렉터리에서 파일 이름을 뺀 값을 반환합니다.

다음에

Shell(location &"runmybatch.sh")

bash 스크립트가 excel 스프레드시트와 동일한 폴더 안에 있기 때문에 이렇게 했습니다.

이것을 까다롭게 만드는 몇 가지 놀라운 점이 있습니다!

  1. 함수는 경로가 /가 아닌 :로 구분되어야 합니다.
  2. 스크립트가 실행되면 루트(/) 디렉토리가 작업 디렉토리로 사용됩니다.

그 외에는 Shell 명령을 사용하여 bash 스크립트를 실행할 수 있어야 합니다.다음은 시작하기 위한 단계별 지침입니다.

  • 데스크톱 디렉토리에 다음 bash 스크립트를 생성하고 테스트 이름을 지정합니다.sh:
#!/bin/bash
open /Applications/Calculator.app/
  • 테스트를 확인합니다.sh는 실행 파일입니다(터미널 창에서 chmod +x 테스트).sh) s)
  • 실행해 보십시오(Terminal에 ./test.sh 입력).계산기 앱이 나타납니다.거기서 나가요.
  • Excel을 실행하고 새 워크북 워크북 1을 만듭니다.
  • 이 빈 워크북을 바탕 화면 디렉토리에 매크로 사용 워크북으로 저장
  • VB: 도구 > 매크로 > Visual Basic Editor 실행
  • 바로가기 창이 뜨지 않으면 View > Immediate Window
  • 바로 가기 창에서 다음 VBA 코드를 입력합니다.
 Shell ActiveWorkbook.Path & ":test.sh"
  • 계산기 앱이 실행되어야 합니다.

셸 명령어에 대한 운이 없었지만, Excel 2011의 애플스크립트를 통해 다음과 같은 이점이 있었습니다.

script_s = "do shell script ""/Users/user/path/to/script/rubyscript_09.rb"""
MacScript script_s

' 대의본에 '는셰을뱅 '사저할 '의 가 있다는 을 알게 되었습니다.#!/usr/bin/env rubymanager 후)(Ruby 버전설치후자리관)후)

호출 파일의 폴더 하위 폴더에 있는 파일의 주소를 지정하려면 다음을 사용합니다.

FilePathName_s = ThisWorkbook.Path & ":subfolder:filename"

은 경를반니다가 있는 합니다.:/의 경우는 을한위입니다do shell script Script, Apple Script로 할 수.quoted form of POSIX path of FilePathName_s 는또 VBA 께함과 .FilePathName_s = "/" & Replace(FilePathName_s, ":", "/")

처음에는 Joel의 훌륭한 튜토리얼이 저에게 도움이 되지 않았습니다(OS X 10.11.6 및 Mac용 Excel 2011).잠시 후, 저는 제 문제가 제 스크립트 파일인 test.sh 의 "잘못된 속성"으로 인해 발생했다는 것을 발견했습니다. 널에서터미,ls -l test.sh산출량:

  -rwxr-xr-x@ 1 tgk  staff  456 Mar 16 13:12 test.sh

속성의 ."@"는 확장 파일 속성의 존재를 나타냅니다.추가 정보는 호출을 통해 제공됩니다.ls -l@ test.sh다음과 같은 결과:

-rwxr-xr-x@ 1 tgk  staff  456 Mar 16 13:12 test.sh
      com.apple.FinderInfo   32 
      com.apple.TextEncoding     15

즉, 파일이 생성된 방법에 따라 확장 속성을 가질 수도 있고 가지지 않을 수도 있습니다. 그서확장속제성다거니습했을래된▁attrib▁extended다utes▁via▁the▁so▁off를 통해 확장된 속성을 제거했습니다.xattr -c test.sh그리고 조엘의 전화가 왔습니다.Shell ActiveWorkbook.Path & ":test.sh"완벽하게 작동했습니다!모두에게 감사드립니다.

____

에 확장 셸 를 저장하는 을 알게 .defaults write com.barebones.textwrangler WriteExtendedAttributes never터미널에서.그러나 이는 다음과 같은 기능을 추가하는 것을 방지할 뿐입니다.com.apple.FinderInfo 성속; 더com.apple.TextEncoding특성이 남아 있습니다.하지만 다행히도, 이제 Joel의 VBA Script 명령은 셸 스크립트가 단지 다음과 같은 경우에 작동합니다.com.apple.TextEncoding 저의 그래서, Text Wrangler는 저를 위한 편집자입니다!

FolderPath 명령어를 사용하지 않았는데, 사용할 수 없는 것 같으니 나중에 사용할 수 없는 이유를 알아보겠습니다.아래는 OSX Excel에서 .sh 파일을 실행할 수 있는지 확인하기 위해 테스트한 샘플 코드입니다.

테스트할 때 사용한 .sh 파일이 바탕 화면에 배치되었으며 "open /Applications/Calculator.app"이라는 행만 포함되어 있습니다.

OSX의 Excel에서 .sh를 호출하는 VBA 코드는 다음과 같습니다.

Dim DesktopFolder As String
DesktopFolder = MacScript("return (path to desktop folder) as string")

Dim ScriptFile As String
ScriptFile = DesktopFolder & "test.sh"

RetVal = Shell(ScriptFile, vbNormalFocus)

특정 폴더에서만 작동하는지 확인하기로 했기 때문에 .sh 파일을 /tmp 폴더로 이동했지만 파일을 실행할 수 없었습니다. 경로를 어떻게 인코딩하든 "file not found errors"(파일을 찾을 수 없음 오류)가 발생했습니다.마침내 OSX의 /tmp 파일이 /private/tmp에 매핑되는 심볼 링크라는 것을 알게 되었고, 제가 그 경로를 사용했을 때 모든 것이 다시 정상적으로 작동하는 것처럼 보였습니다.

Dim ScriptFile As String
ScriptFile = "Macintosh HD:private:tmp:test.sh"
RetVal = Shell(ScriptFile, vbNormalFocus)

어쨌든, 조금이나마 도움이 되길 바랍니다.저는 계속해서 더 나은 방법을 찾을 것이고, 파일 위치가 안정적으로 무엇인지 동적으로 찾을 수 있는 무언가가 필요합니다.

또한 글로벌 경로(/usr/bin)에 있는 사용자와 모든 사용자에게 읽기 및 실행 권한이 있음에도 불구하고 간단한 bash 스크립트를 실행하는 데 문제가 있었습니다.AppleScript 환경과 사용자의 bash 환경 간의 차이로 인한 사용 권한 및 경로라는 두 가지 이유로 인해 스크립트가 실패했습니다.Mac용 Office 2011의 VBA Shell 기능에 대한 논의가 문제 해결에 더 도움이 된다는 것을 알게 되었습니다.이것이 제가 최종적으로 결정한 과정입니다.

Excel은 기본적인 세부 정보를 마스킹하고 있었기 때문에 AppleScript Editor를 사용하는 것이 좋습니다. AppleScript Editor는 제가 본 의미 없는 Excel 오류보다 문제 해결 중에 더 나은 통찰력을 제공합니다.

  1. AppleScript Editor를 사용하여 스크립트가 실제로 모든 사용자 및 사용되는 환경 변수로 작동하는지 확인합니다.

    1. Spotlight(스포트라이트)에서 "Applescript Editor(애플 스크립트 편집기)"가 표시될 때까지 입력한 다음 클릭합니다.
    2. 새 AppleScript Editor 파일 만들기
    3. 큰따옴표를 두 번 사용하지 않고 간단한 스크립트를 새 파일에 입력합니다(내 파일 읽기).

      do shell script "parseCsvAndOpen.sh"
      
    4. 스크립트의 "실행" 버튼을 누릅니다.
    5. AppleScript Editor에서 실행할 때까지 문제를 추적하고 변경한 후 "실행" 버튼을 반복합니다.
      • 여기서 좋은 소식은 StackOverflow 또는 Google로 돌아가서 도움을 받아야 할 경우 검색 범위가 좁다는 것입니다;-)
  2. 이제 AppleScript Editor에서 vba로 간단한 스크립트를 복사하고 여전히 작동하는지 확인합니다.

    1. 나는 맥스크립트 코드 뒤에 큰따옴표를 두 배로 묶을 수 있었습니다.

      MacScript "do shell script ""parseCsvAndOpen.sh"""
      

      그것은 정말로 하나, 둘, 그리고 세 개의 이중 따옴표입니다! (중따옴표 탈출)

Mac용 MS Office가 설치되어 있지 않아서 제가 제안한 답변을 테스트할 수 없습니다.Bash를 이진수(즉, /bin/bash)로 부르고 실행할 스크립트의 이름을 인수로 전달할 수 있어야 한다고 생각합니다.이렇게 하면 권한 비트와 관련된 문제가 발생하지 않고 두 번째 인수의 경로 이름이 일반적인 UNIX 스타일 /-분리된 경로 이름이 됩니다.첫 번째 인수의 경우 경로 없이 bash를 이름으로 부르기에 충분할 수 있습니다. 이는 PATH 환경 변수를 사용해야 하기 때문입니다.

전반적으로, 그리고 여전히 테스트 없이, 저는 이것을 시도할 것입니다.

Shell("bash runmybatch.sh")

또는 잘못된 작업 디렉토리로 인해 작동하지 않는 경우

Shell("bash '" & location & "/runmybatch.sh'")

여기서 location은 워크북의 디렉토리에 대한 /분리된 경로입니다.작은따옴표는 경로에 있는 공백이나 다른 외래 문자를 처리해야 합니다.

VBA 매크로에 다음 명령을 기록해야 합니다.

Shell "C:Path\to\script\location\script.sh"

(경로 주위에 큰따옴표를 포함해야 함)

스크립트 위치를 가져오는 가장 좋은 방법은 매크로를 기록하여 bash 스크립트가 있는 동일한 폴더에 워크북을 저장하는 것입니다.이렇게 하면 나중에 Excel이 해당 경로를 어떻게 호출하고 위의 셸 명령에 복사/붙여넣는지 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/11042473/how-to-call-a-bash-script-from-vba-excel

반응형