Пакетное преобразование * .numbers в * .csv AppleScript - PullRequest
0 голосов
/ 21 января 2020

Я искал скрипт, который бы конвертировал все файлы * .numbers в заданной папке в файлы * .csv.

Я нашел следующее на GitHub и добавил дополнительную строку, как предложено в комментариях предложение. Когда я запускаю скрипт, Numbers запускает и открывает тестовый файл из указанной папки, но файл не экспортируется. Номера просто остаются открытыми, а ошибки терминала выводятся с помощью:

/ Users / Shared / Untitled.scpt: ошибка выполнения: Numbers получили ошибку: неверный ключ. (-10002)

Сценарий (находится в / Users / Shared) имеет следующие разрешения: -rwxr-xr-x

#!/usr/bin/osascript

on run argv

    set theFilePath to POSIX file (item 1 of argv)
    set theFolder to theFilePath as alias
    tell application "Finder" to set theDocs to theFolder's items

    -- Avoid export privilege problem
    set privilegeFile to (theFolder as text) & ".permission"
    close access (open for access privilegeFile)

    repeat with aDoc in theDocs
        set docName to aDoc's name as text
        if docName ends with ".numbers" then
            set exportName to (theFolder as text) & docName
            set exportName to exportName's text 1 thru -9
            set exportName to (exportName & "csv")
            tell application "Numbers"
                open aDoc
                delay 5 -- may need to adjust this higher
                tell front document
                    export to file exportName as CSV
                    close
                end tell
            end tell
        end if
    end repeat

end run

Есть предложения?

1 Ответ

1 голос
/ 22 января 2020

Вот что я сделал и работает для меня в macOS High Sierra :

  1. В Терминал :
touch numb2csv; open -e numb2csv; chmod +x numb2csv

• При этом создается пустой текст ASCII файл с именем numb2csv .
• По умолчанию открывается numb2csv в TextEdit .
• Делает исполняемый файл numb2csv .

Скопируйте и вставьте пример AppleScript код , как показано ниже, в открытый numb2csv файл . Сохраните и закройте файл numb2csv . В Терминал выполнил исполняемый файл numb2csv файл , например:
./numb2csv "$HOME/Documents"
  • Это создало CSV файл с тем же именем как Numbers document в моей папке Documents , не пересекающей вложенные папки .

Пример AppleScript код :

#!/usr/bin/osascript

on run argv

    set theFilePath to POSIX file (item 1 of argv)
    set theFolder to theFilePath as alias
    tell application "System Events" to set theDocs to theFolder's items whose name extension = "numbers"

    repeat with aDoc in theDocs
        set docName to aDoc's name as text
            set exportName to (theFolder as text) & docName
            set exportName to exportName's text 1 thru -8
            set exportName to (exportName & "csv")
            tell application "Numbers"
                launch
                open aDoc
                repeat until exists document 1
                    delay 3
                end repeat
                tell front document
                    export to file exportName as CSV
                    close
                end tell
            end tell
    end repeat

    tell application "Numbers" to quit

end run
  • ПРИМЕЧАНИЕ: As кодированный , при этом будет перезаписан существующий CSV файл с тем же именем, что и каждый чисел файл обработан, если они уже существует. Дополнительное кодирование требуется, если вы не хотите перезаписывать существующие файлы

Если вы получаете Ошибка сценария :

Числа получили ошибку: документ «имя» не может быть экспортирован как «имя». У вас нет разрешения.

По моему опыту, Числа документ не были полностью открыты до экспорта и что увеличение значение команды delay решает эту проблему. Это, конечно, при условии, что на самом деле у пользователя есть права на запись в папке цель Номера документы существует.

Или можно ввести обработчик ошибок в блоке tell front document , который, если моя теория верна, что целевой документ не был полностью загружен перед экспортом, даст дополнительное время, например:

Изменение:

tell front document
    export to file exportName as CSV
    close
end tell

Кому:

tell front document
    try
        export to file exportName as CSV
        close
    on error
        delay 3
        export to file exportName as CSV
        close
    end try
end tell

Примечание: основной пример AppleScript код как раз и не содержит обработки ошибок в зависимости от ситуации. Пользователь должен добавить любую обработку ошибок , которая может быть уместной, необходимой или желаемой. Взгляните на оператор try и error оператор в Руководство по языку AppleScript . См. Также Работа с ошибками . См. Включенный пример непосредственно выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...