如何自动在OneDrive和Applications.com.Excel之间移动文件

时间:2019-07-07 17:15:29

标签: excel vba applescript applescript-excel

我一直在用Excel对数据库进行编码,最近不得不支持Mac,Office 2016以及更高版本,实际上不支持内联代码,因此我不得不借用Mac。

我想制作一个“补丁” .app,当在最终用户计算机上运行时,它将把AppleScripts放入Microsoft所说的必需文件中。

我能够检测文件夹是否存在并根据需要创建它们。我可以使用桌面和文档目录在命令中移动文件,但是如果我使用onedrive目录(从中执行文件),将无法正常工作。

我尝试了几种不同的代码结构,我是Windows用户,所以我要学习操作系统。

我已经尝试过复制,有复制和无复制,在vs.使用文件,vs。文件或项目以及每一个中键入目录。

这是我现在的代码,几乎可以掌握正在运行的脚本的位置,然后删除应用程序的名称,并添加其他脚本的正确目录。

检查文件夹是否存在,如果不存在,则创建它们。

然后用于将源中的所有文件移动到目标。

set Source to POSIX path of ((path to me as text) & "::") & "AppleScripts/"
set ParentDestination to ("/Library/Application Scripts/")
set Destination to ("/Library/Application Scripts/com.microsoft.Excel/")
set ParentFound to false
set DestinationFound to false

tell application "System Events"
    if exists folder ParentDestination then 
        set ParentFound to true 
        if exists folder Destination then       
            set DestinationFound to true        
        end if  
    end if
end tell

tell application "Finder"
    if ParentFound = false then 
        make new folder at folder "Library" of startup disk with properties {name:"Application Scripts"}    
    end if
    if DestinationFound = false then    
        make new folder at folder "Application Scripts" of folder "Library" of startup disk with properties {name:"com.microsoft.Excel"}    
    end if
    duplicate (every item in Source) to Destination
end tell

我当前遇到的错误是:Finder got an error: Handler can’t handle objects of this class.

这取决于我尝试的代码变化,但始终取决于所有文件的移动。

我知道这可能很简单,但是我还没有开始让Excel调用代码,所以我需要一些帮助。

1 个答案:

答案 0 :(得分:0)

Finder对文件说明符有些敏感;这就是为什么我总是更喜欢使用系统事件的原因。但是系统事件没有功能性的“复制”命令,因此...以下内容应适用于本地副本(无论如何,它在我的机器上也可以):

set Source to POSIX path of ((path to me as text) & "::") & "AppleScripts/"
set libraryFolder to "~/Library"

tell application "System Events"
    if exists folder "Application Scripts" of folder libraryFolder then
        set AppScriptsFolder to folder "Application Scripts" of folder libraryFolder
    else
        set AppScriptsFolder to make new folder at folder libraryFolder with properties {name:"Application Scripts"}
    end if
    if exists folder "com.microsoft.Excel" of AppScriptsFolder then
        set targetFolder to folder "com.microsoft.Excel" of AppScriptsFolder
    else
        set targetFolder to make new folder at AppScriptsFolder with properties {name:"com.microsoft.Excel"}
    end if
    set targetFolder to (path of targetFolder) as alias
    set Source to (path of folder Source) as alias
end tell

tell application "Finder"
    duplicate (every item in Source) to targetFolder
end tell

我衷心怀疑您是否可以从云目录运行AppleScript。我的意思是,我从未尝试过自己,也无法访问OneDrive对其进行测试,但是能够从远程驱动器运行任意代码似乎是一场安全噩梦。我很想知道您是否可以管理它。