Использование AppleScript для программного создания файла AppleScript в текстовом формате - PullRequest
0 голосов
/ 18 мая 2018

У меня есть AppleScript, который используется для программного создания файла тестового сценария в одной из следующих папок приложения Office 2016:

~/Library/Application Scripts/com.microsoft.Excel
~/Library/Application Scripts/com.microsoft.Word
~/Library/Application Scripts/com.microsoft.Powerpoint

Это содержимое файла test.scpt, которое генерируется программным путем:

on handlerTest(thisPhrase)
    say thisPhrase
end handlerTest

Этот файл test.scpt содержит один обработчик, который произносит переданную ему фразу.

Когда сценарий создается в одной из этих папок, я не вижу содержимое файла сценария.в Finder и вызов обработчика из приложения Microsoft Office с использованием нового VBA AppleScriptTask вызывает сбой приложения Office.Я думаю, что сценарий создается как файл, скомпилированный байтами, потому что он не может быть просмотрен в Finder как обычный текст.

Если я затем скопирую файл сценария, сгенерированный программно моим сценарием создателя сценария, в папку «Документы»,Содержимое сценария в виде обычного текста можно просмотреть в Finder.

Теперь, если я скопирую файл сценария из папки «Документы» обратно в соответствующую папку com.microsoft (не изменяя его), теперь я могу видеть простой-текстовое содержимое в Finder и вызов обработчика с помощью функции VBA AppleScriptTask работает должным образом.Я не понимаю, как видимо меняется формат из-за действий копирования / вставки?

Как программно создать файл сценария в папке com.microsoft.xyz в текстовом формате?

Вот моя процедура VBA:

Sub TestScript()
    AppleScriptTask "test.scpt", "handlerTest", "hello world"
End Sub

Вот мой пример сценария создания сценария, который программно создает файл test.scpt в папке сценариев com.microsoft.Powerpoint: (слава eliteproxy для оригинального исходного скрипта )

property theFolders : {"~/Library/'Application Scripts'/com.microsoft.Powerpoint"}

try
    tell application "Finder" to set targetFolder to (target of the front window) as alias
on error -- no window
    set targetFolder to (choose folder)
end try

# build a parameter string from the folder list
set {tempTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, space}
set {theFolders, AppleScript's text item delimiters} to {theFolders as text, tempTID}

do shell script "cd " & quoted form of POSIX path of targetFolder & "; mkdir -p " & theFolders

--Write the Script file if it does not exist
if ExistsFile("~/Library/'Application Scripts'/com.microsoft.Powerpoint/test.scpt") is false then
    tell application "Finder"
        --GET THE WORKING DIRECTORY FOR FILE COPY OF SCRIPT
        get folder of (path to me) as Unicode text
        set workingDir to POSIX path of result

        --Write the new script in the current working directory
        set textFile to workingDir & "test.scpt"

        --Delete script if it exists
        set posixPath to POSIX path of textFile as string
        do shell script "rm -rf \"" & posixPath & "\""

        --Create Script Interface file for Microsoft PowerPoint VBA Applications
        set fd to open for access textFile with write permission

        -- Create test handler which speaks the passed phrase parameter
        write "on handlerTest(thisPhrase)" & linefeed to fd as «class utf8» starting at eof
        write "say thisPhrase" & linefeed to fd as «class utf8» starting at eof
        write "end handlerTest" & linefeed to fd as «class utf8» starting at eof

        close access fd

        --Copy the script file into the MACOS-Specific 'safe' folder
        set fromPath to quoted form of POSIX path of (workingDir) & "test.scpt"
        set toPath to quoted form of "~/Library/'Application Scripts'/com.microsoft.Powerpoint"
        do shell script "cp -R " & fromPath & space & "~/Library/'Application Scripts'/com.microsoft.Powerpoint" with administrator privileges
    end tell
end if

--Delete the temp script file from the working directory
set posixPath to POSIX path of textFile as string
do shell script "rm -rf \"" & posixPath & "\""

--Provide confirmation
set theAlertTitle to "TEST"
set theAlertMsg to "The script has been successfully installed."
display alert theAlertTitle message theAlertMsg as informational buttons {"OK"} default button "OK" cancel button "OK"

--For use when checking if a file exists
on ExistsFile(filePath)
    tell application "System Events" to return (exists disk item filePath) and class of disk item filePath = file
end ExistsFile 

1 Ответ

0 голосов
/ 19 мая 2018

Я могу ошибаться в моей интерпретации вашего вопроса, но похоже, что вы хотите создать файл «Test.scpt» с вашим обработчиком «handlerTest» в качестве кода в папке с именем «com.microsoft.Excel»." (например).Если это все, чего вы хотите достичь, я считаю, что это решение должно работать для вас ...

script theHandler
    on handlerTest(thisPhrase)
        say thisPhrase
    end handlerTest
end script

storeScript()

on storeScript()
    set thisScript to store script theHandler in (path to home folder as text) ¬
        & "Library:Application Scripts:com.microsoft.Excel:Test.scpt" replacing yes
end storeScript
...