AppleScript / Automator文件夹操作将Excel转换为CSV

时间:2016-05-12 20:02:29

标签: excel macos csv applescript automator

我遇到了#34; Grant Access" Office 2016的问题,我必须手动点击"授予访问权限#34;如果我用Automator打开一个新文件。我找到了如何绕过它的答案(通过使用文件对象或别名对象而不是字符串):

tell application "Microsoft Excel"
activate
open file "Macintosh HD:Users:path:to:file"
end tell

但是由于我使用的是Automator文件夹操作,我不知道如何获取所需的文件路径。我发现的大多数示例都使用了AppleScript choose folder with prompt,但由于这一点完全是自动化的,因此无法使用。

这个想法是:

  1. Excel文件被下载到" ForSQL"夹
  2. 文件夹操作会提示xls文件转换为csv
  3. csv然后在TextWrangle中打开以确保它保持在UTF-8
  4. 然后将其移至官方" SQL"夹
  5. 关闭它打开的所有应用程序并删除它从" ForSQL"夹
  6. 但我愿意接受更好的建议,以获得相同的最终结果。

    到目前为止,这是我的Automator工作流程 - 但看起来我需要更换Excel文件的转换格式'与AppleScript一起获得" Grant Access"弹出消失。这是一个文件夹操作,当某些东西击中" ForSQL"文件夹:

    AutomatorWorkflow

1 个答案:

答案 0 :(得分:0)

我不确定你想用textWrangle做什么,但是下面的脚本会执行前后的所有步骤,只使用Applescript(不需要Automator操作):

--this choose file must be replaced by your "input" of automator folder items 
set Fxl to choose file --the Excel file to be processed


-- define here your destination SQL folder
-- for my tests, I used a folder mySQL on my Desktop
set SQLFolder to ((path to desktop folder) as string) & "mySQL"

tell application "Finder" to set ForSQL to (container of Fxl) as string

--define new name by replacing current extension (xls, xlsx, xlsm, xml)  by "csv"
tell application "Finder"
set N to name of Fxl
set NbExt to length of ((name extension of Fxl) as string)
set newname to (text 1 thru -(NbExt + 1) of N) & "csv"
end tell

--convert to CSV and close
tell application "Microsoft Excel"
open Fxl
tell workbook 1
    tell sheet 1 to save in (ForSQL & newname) as CSV file format
    close without saving
end tell
end tell

-- add eventually your TextWrangle step here (?)

-- delete source file and move csv to proper folder
tell application "Finder"
delete Fxl
move file (ForSQL & newname) to folder SQLFolder
end tell

在实践中,您可以在完整的AppleScript文件夹操作中运行所有这些操作。 将“设置Fxl选择...”替换为“添加文件夹项目...”。 在这种情况下,您必须在重复循环中插入上面的脚本以处理文件夹中的所有文件丢弃。

但是,使用文件夹操作脚本时可能会遇到一些问题,因为系统会在您创建新CSV文件时再次触发您的脚本(同样在同一文件夹中!)。

我建议的工作是使用文件夹操作脚本来获取ForSQL中的文件,将其移动到其他“temp_ForSQL”并使用移动的文件运行此脚本。这样,cvs将被添加到temp_forSLQ,而不会触发新的文件夹操作脚本。

我希望它足够清楚......如果没有,请告诉我。