Arhn - архитектура программирования

AppleScript - если файл указан на листе Excel, добавьте другое значение столбца в качестве префикса

ФАКТЫ:

  • У меня есть папка, содержащая кучу файлов .pdf. Имена выглядят так (2-581.pdf, 131-681.pdf, 1138-4.pdf, ...)
  • Файлы .pdf разбиты на две части partA-partB.pdf, разделенные "-"
  • У меня есть лист excel, в котором перечислены все результаты в папке
  • На листе Excel перечислено много PDF-файлов, больше, чем в папке.
  • Первые 2 строки листа Excel - это заголовок и заголовки.
  • Первый столбец листа Excel — это тестовый номер, который будет префиксом
  • Четвертый столбец листа Excel представляет собой часть A исходного имени файла .pdf, часть 5-го столбца B.

Идеальный результат: я запускаю автомат или яблочный скрипт и указываю ему папку, содержащую .pdf-файлы и лист Excel, содержащий информацию. Он запускается и переименовывает все файлы .pdf в папке, которые находятся в Excel. Переименованные файлы будут состоять из тестового номера, пробела и исходного имени. Строка на листе Excel будет каким-то образом выделена/помечена, показывая, что она найдена.

Я искал несколько разных форумов, а также этот, и попытался собрать код, чтобы попытаться заставить что-то работать. Я не буду вставлять этот код, так как он не работает в моем сценарии.

Следующий код, который я объединил, скопирован с другого справочного форума и попытался настроить его для моего сценария. Он вроде работает для первых 6 элементов, а потом просто останавливается (думаю, потому что 7-го элемента нет в папке). Кроме того, чтобы заставить его работать, мне пришлось вручную создавать исходные имена файлов и новые имена файлов в Excel. Я сделал это, потому что не смог заставить его работать вне Excel.

Любая помощь, предложения, ссылки на возможные решения приветствуются. У меня есть МНОГО результатов тестов, которые нужно просмотреть на разных листах Excel, и это сэкономит мне массу времени. Я проиграл сегодня, пытаясь понять это сам. Я либо слишком много думаю об этом, либо не понимаю. Благодарю вас!

set KeyFileName to choose file with prompt "Choose the Excel file"
set WorkingDirectory to (choose folder with prompt "Please locate the folder  with the processed .pdf's.") as string
set KeyFilePath to WorkingDirectory & KeyFileName
set FileNamesKey to my GetFileNamesKey(KeyFilePath)
set theResult to ChangeFileNames(WorkingDirectory, FileNamesKey)
return theResult
end run

to GetFileNamesKey(KeyFilePath)
    tell application "Microsoft Excel"

    set ResultsRange to used range of active sheet of active workbook

    set FileNames to {}
    repeat with i from 1 to count of rows in ResultsRange
        set NewFileName to value of third column of row i of ResultsRange
        set OldFileName to value of second column of row i of ResultsRange
        set FileNames to FileNames & {{OldFileName, NewFileName}}

    end repeat

    return FileNames

end tell
end GetFileNamesKey

to ChangeFileNames(WorkingDirectory, FileNamesKey)

tell application "Finder"
    repeat with aFile in FileNamesKey
        set OldFileName to item 1 of aFile
        set NewFileName to item 2 of aFile



        set PathToFile to WorkingDirectory & OldFileName
        try
            set FileExtension to name extension of file (WorkingDirectory & (item 1 of aFile))
            set name of file PathToFile to NewFileName & "." & FileExtension
        on error
            exit repeat
            return false
        end try
    end repeat
end tell

return true
end ChangeFileNames
return input
end run

Ответы:


1

Если я правильно понимаю, у вас есть файл excel с col.A= #test, col.B= oldFileName (xx-yyy.pdf), col.C= NewName (пусто?), Col.D= PartA (xx), Колонка E= часть B (гггг)

Вы хотите перебрать все строки этого файла, найти, существует ли файл из Col.B в выбранной папке, и если да, вы хотите изменить имя файла (= colA + " " + старое имя) и сделать его видимым в строке Excel .

Если все в порядке, приведенный ниже скрипт делает то, что вы хотите. В случае, если файл найден в выбранной папке, я пометил строку Excel двумя способами: задал новое имя файла в столбце C (не уверен, что он был пуст до этого?) и установил его цвет на красный. Я добавил много комментариев, чтобы было понятно (надеюсь!):

set KeyFileName to choose file with prompt "Choose the Excel file"
set WorkingDirectory to (choose folder with prompt "Please locate the folder  with the processed .pdf's.") as string

tell application "Microsoft Excel"
open KeyFileName
set ResultsRange to used range of active sheet of active workbook
-- Data bloc starts row 2 with headers and then row 3 to x
-- col.A= #test, col.B= oldFileName (xx-yyy.pdf), col.C= NewName (empty), Col.D= PartA (xx), Col.E= PartB (yyy)
repeat with i from 2 to count of rows in ResultsRange
    -- loop through each Excel row only starting row 2 of the range to skip hearders
    set OldFileName to value of second column of row i of ResultsRange
    set NewName to (value of the first column of row i of ResultsRange) & " " & OldFileName
    set theFile to WorkingDirectory & OldFileName
    tell application "Finder" to set FileExist to (file theFile exists) --check file exists
    if FileExist then
        tell application "Finder" to set name of file theFile to NewName --change file name in the folder
        set (value of third column of row i of ResultsRange) to NewName -- set new name in Excel col.C
        set (color index of interior object of third column of row i of ResultsRange) to 3 -- = Red !
    end if
end repeat --- next Excel row
end tell

Строку «Open KeyFileName» можно пропустить, если файл Excel уже открыт. Также скрипт не сохраняет файл Excel после внесенных изменений!

26.01.2017
  • Я запустил это, и он возвращается с ошибкой, которая гласит: Finder получил ошибку: не удается преобразовать {1.0, , A-53.pdf} в текст Unicode. Выделенный код, сопровождающий эту ошибку, выглядит следующим образом: if FileExist then tell application "Finder" **to set name of file theFile to NewName** 26.01.2017
  • Странно, я проверил это нормально на моей стороне. Я думаю, что это может быть связано со значением вашего столбца A. Сначала добавьте строку непосредственно перед if FileExist.. с: log name= & NewName. он покажет значение NewName. судя по вашей ошибке, кажется, что это список, а не строка. если это так, то вам, возможно, придется изменить набор строк NewName.... сначала проверьте и дайте мне знать, я обновлю скрипт. 26.01.2017
  • Я попытался добавить строку журнала, которую вы упомянули выше, и получил ту же ошибку. Не совсем уверен, как проверить журналы, чтобы увидеть, что тянула эта переменная. Я смог добавить текст после установки OldName и NewName, и это сработало. теперь запускается скрипт, я вижу, что ячейки становятся красными, а файлы переименовываются! переименованные файлы именуются с префиксом числа с десятичным разрядом. Я удалил десятичные пробелы на листе Excel в форматировании, но, похоже, он все еще помещается в имя. ПРИМЕР: 75.0 769-315.pdf 26.01.2017
  • похоже, это значение вашего префикса test#. Конечно, это должно быть сделано только из символов, разрешенных в имени файла. Лично я избегаю чего-то вроде - , ; знак равно + ... Да, точка разрешена, но я предпочитаю зарезервировать ее для расширения файла. возможно, вам придется изменить свой префикс в Excel. если всегда число, вы можете привести его к целому числу в сценарии (как целое число, а не как текст). 26.01.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..