Applescript для пакетного преобразования текста с разделителями .txt в .xls - PullRequest
0 голосов
/ 12 октября 2018

Каждый день мне доставляют ~ 5 .txt файлов данных, разделенных «^».Ручные шаги, предпринятые для преобразования каждого в электронную таблицу: • Откройте файл .txt в Excel • Текст-в-столбцы • Запустите мастер разграничения

Хотелось бы иметь appleScript или апплет для перетаскивания 5 файлов.Скрипт Google Sheets будет еще более волшебным.Заранее спасибо за любые рекомендации.

Пример данных:

developer^project^lender^uuid^id^remarks^code^transfer_date
1500^1502^009^f1e97d20-b311-41cf-a40f-59db90b25ba8^73890^a10a46e8-bca8-4f0d-8938-8f2803a8bf90^9^2018-10-23 10:17:23.0
1500^1502^009^5dfc330d-0b9a-407d-a9e6-36895207b89e^74460^4a9c046a-a544-45b5-a627-f567b94f2b87^9^2018-10-23 10:17:25.0
1500^1502^009^d3295a4a-235d-4b9d-8775-5c079571193e^74901^de8f7b66-0c14-450f-8f29-c30c9a8329fa^9^2018-10-23 10:17:26.0

1 Ответ

0 голосов
/ 25 октября 2018

Вам необходимо изменить пути к файлам, указанные в начале скрипта внутри переменной CSVFiles.Файл Excel сохраняется в том же каталоге, что и файл CSV, из которого он получает свои данные, и использует то же имя файла, добавляя к нему расширение ".xlsx".

use Excel : application "Microsoft Excel"
use scripting additions

# Used to split the CSV data into columns
property text item delimiters : {"/", "^"}

# These represent the 5 CSV files you are sent on a given day
set CSVFiles to {¬
    "/Users/CK/Desktop/sample.csv", ¬
    "/Users/CK/Desktop/sample2.csv", ¬
    "/Users/CK/Desktop/sample3.csv", ¬
    "/Users/CK/Desktop/sample4.csv", ¬
    "/Users/CK/Desktop/sample5.csv"}

repeat with fp in CSVFiles
    try
        # Make sure CSV file exists
        fp as POSIX file as alias
    on error
        false
    end try
    set f to the result

    if f ≠ false then
        # Obtain directory and filename to use for saving Excel document
        set [dirpath, filename] to [¬
            text items 1 thru -2 of POSIX path of f as text, ¬
            text item -1 of POSIX path of f]

        # Read the CSV data into an array (list)
        set CSVrows to paragraphs of (read f)
        if the last item of CSVrows = "" then ¬
            set CSVrows to items 1 thru -2 of CSVrows

        repeat with r in CSVrows
            set r's contents to text items of r
        end repeat

        set n to count CSVrows
        set cellrange to "A1:H" & n
        set colHrange to "H2:H" & n

        # Create the Excel sheet
        make Excel new document
        set S to active sheet of window 1 of Excel
        # Copy in CSV data
        set value of range cellrange to CSVrows
        # Format the last column to handle dates & times
        set number format of range colHrange to "dd/mm/yyyy hh:mm:ss"

        # Save & Close
        save S in (dirpath & "/" & filename & ".xlsx")
        Excel's (close front window)
    end if
end repeat

Если у вас была выделенная папка, в которую вы сохранили только что полученные CSV-файлы, тогда эту строку:

set CSVFiles to {¬
    "/Users/CK/Desktop/sample.csv", ¬
    "/Users/CK/Desktop/sample2.csv", ¬
    "/Users/CK/Desktop/sample3.csv", ¬
    "/Users/CK/Desktop/sample4.csv", ¬
    "/Users/CK/Desktop/sample5.csv"}

можно заменить следующей строкой:

tell app "System Events" to set CSVFiles to the POSIX path of ¬
    every file in the folder named "/Path/To/Folder for CSV files" whose ¬
    name extension = "CSV"

Тогда все, что вы 'мне нужно сделать, это удалить вчерашние файлы CSV из этого каталога (вы не хотите, чтобы они обрабатывались второй раз);передача в современных файлах CSV;затем выполните сценарий.

В качестве альтернативы, как вы указали в своем вопросе, вы можете создать апплет, в который могут быть добавлены и обработаны файлы CSV.Это будет сделано через Automator .

...