【问题标题】:AppleScript/Automator Folder Action to Convert Excel to CSVAppleScript/Automator 文件夹操作将 Excel 转换为 CSV
【发布时间】:2016-09-08 20:21:59
【问题描述】:

我遇到了 Office 2016 的“授予访问权限”问题,如果我使用 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”文件夹中移动的所有内容

但我愿意接受能够达到相同最终结果的更好建议。

到目前为止,这是我的 Automator 工作流程——但看起来我需要用 AppleScript 替换“转换 Excel 文件格式”步骤,才能让“授予访问权限”弹出窗口消失。这是一个文件夹操作,当有东西碰到“ForSQL”文件夹时开始:

【问题讨论】:

    标签: excel macos csv applescript automator


    【解决方案1】:

    我不确定你想用 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,而不会触发新的文件夹操作脚本。

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

    【讨论】:

    • 非常感谢!试图跟随并测试它。我是否应该不再使用 automator 文件夹操作 - 如果没有,我必须在下载文件夹中添加 on adding folder items 吗?此外,由于我们在同一个文件夹中创建 CSV,是否有在转换之前将文件移动到 SQL 文件夹,这样就不会发生这种情况?最后,我还没有让它工作,但 Automator 脚本的主要问题是弹出的 Excel 2016 for Mac 的“授予访问权限”页面,这让整个事情都崩溃了。这段代码也没有了吗?
    • 此外,TextWrangler 部分只是为了确保文件保持在 UTF-8 中,因为我注意到其中一些出于某种原因正在更改为 OS Roman。但如果这可以在 Excel 中发生,那么我就不需要这一步——只是想不出任何其他方式。
    • 一直在玩这个,当代码到达save in (sql & newname) as CSV file format 行时,我不断收到错误“错误“Microsoft Excel 出现错误:参数错误。”数字 -50”。显然这是一个已知的问题? mac-help.com/threads/automator-wont-convert-to-csv.221267 我的 Automator 脚本运行正常,它只是让我先手动授予访问权限,这破坏了自动化。
    • 在下载文件夹中使用文件夹操作脚本时要小心。如果文件是从 Safari 下载的,它会创建一个具有奇怪名称和扩展名的临时文件。只有在下载结束时,Safari 才会将名称/扩展名更改为正确的值。这意味着您的文件夹操作将在设置最终名称/扩展名之前以及完成下载之前触发。有一些解决方法,但没有那么简单(如果你愿意,我有一个代码示例)。 2)我没有 Excel 2016(只有 2011),但我确认“另存为”是敏感的。例如,我永远无法将其保存到源以外的其他文件夹!
    猜你喜欢
    • 2021-10-28
    • 2014-09-07
    • 1970-01-01
    • 2021-12-26
    • 2021-07-21
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多