VBA(Excel)에서 Bash 스크립트를 호출하는 방법
어떻게 실행합니까?bash
OSX에서 VBA 파일
나는 다음 코드를 시도했습니다.
location = FolderPath(ThisWorkBook.FullName)
현재 디렉터리에서 파일 이름을 뺀 값을 반환합니다.
다음에
Shell(location &"runmybatch.sh")
bash 스크립트가 excel 스프레드시트와 동일한 폴더 안에 있기 때문에 이렇게 했습니다.
이것을 까다롭게 만드는 몇 가지 놀라운 점이 있습니다!
- 셸 함수는 경로가 /가 아닌 :로 구분되어야 합니다.
- 스크립트가 실행되면 루트(/) 디렉토리가 작업 디렉토리로 사용됩니다.
그 외에는 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 ruby
manager 후)(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 오류보다 문제 해결 중에 더 나은 통찰력을 제공합니다.
AppleScript Editor를 사용하여 스크립트가 실제로 모든 사용자 및 사용되는 환경 변수로 작동하는지 확인합니다.
- Spotlight(스포트라이트)에서 "Applescript Editor(애플 스크립트 편집기)"가 표시될 때까지 입력한 다음 클릭합니다.
- 새 AppleScript Editor 파일 만들기
큰따옴표를 두 번 사용하지 않고 간단한 스크립트를 새 파일에 입력합니다(내 파일 읽기).
do shell script "parseCsvAndOpen.sh"
- 스크립트의 "실행" 버튼을 누릅니다.
- AppleScript Editor에서 실행할 때까지 문제를 추적하고 변경한 후 "실행" 버튼을 반복합니다.
- 여기서 좋은 소식은 StackOverflow 또는 Google로 돌아가서 도움을 받아야 할 경우 검색 범위가 좁다는 것입니다;-)
이제 AppleScript Editor에서 vba로 간단한 스크립트를 복사하고 여전히 작동하는지 확인합니다.
나는 맥스크립트 코드 뒤에 큰따옴표를 두 배로 묶을 수 있었습니다.
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
'your programing' 카테고리의 다른 글
파일 내용에서 변수 확장 (0) | 2023.08.30 |
---|---|
WCF: 시스템.Net.SocketException - 각 소켓 주소(프로토콜/네트워크 주소/포트)는 일반적으로 하나만 사용할 수 있습니다. (0) | 2023.08.30 |
jQuery: 양식 제출 시 어떤 버튼을 클릭했는지 확인하는 방법은 무엇입니까? (0) | 2023.08.30 |
오라클의 다른 스키마에서 데이터 선택 (0) | 2023.08.30 |
Python의 파일에서 문자 읽기 (0) | 2023.08.30 |