AppleScriptTask 在 Excel VBA 中选择文件

问题描述 投票:0回答:1

我有一个 Excel 宏,要求用户选择两个“csv”文件,并且它必须在 MacOS 和 Windows 上运行。我研究了如何在 Mac 上使用 AppleScript 来实现此目的,但它没有按预期工作。这是我在脚本编辑器中测试的脚本“ChooseFiles.scpt”:

SelectFiles("csv")

on SelectFiles(fileType)
    set fileNames to choose file with prompt "Please select before and after treatment csv files:" of type {fileType} with multiple selections allowed
    return fileNames
end SelectFiles

选择两个文件的结果是有效的,尽管我不认识格式:

Result:
{alias "Untitled:Users:billw:Documents:Testing:CSV:01_06_2024_RowSur385589.csv", 
alias "Untitled:Users:billw:Documents:Testing:CSV:11_04_2023_RowSur1823781.csv"}

这就是我在 VBA 代码中使用脚本的方式。 SelectedCSV 未使用 Dim 语句声明。

SelectedCSV = AppleScriptTask("ChooseFiles.scpt", "SelectFiles", "csv")

如果我只选择一个文件,SelectedCSV 包含 Variant/String 类型的有效文件名:

File:///Users/billw/Documents/Testing/CSV/01_06_2024_RowSur385589.csv

但是,当我选择两个文件时,SelectedCSV 仅包含一个空字符串。测试脚本的两个文件的列表似乎是某种数组。请告诉我需要在脚本本身或 Excel VBA 代码中修复什么,以便我得到两个文件而不是空字符串。

excel vba macos applescript
1个回答
0
投票

有2个问题:

  1. 当您发回单个文件路径时,存在从 Applescript 到 VBA 的隐藏转换。 Applescript 发送 Finder 格式的文件路径,这意味着每个文件夹级别与下一个文件夹级别之间用半列字符“:”分隔,但是当它返回到 VBA 时,它会使用 / 作为文件夹分隔符转换为 Unix 文件路径。仅当系统将变量识别为有效文件路径时才会发生此转换
  2. 当选择多个文件时,Applescript 发送回一个列表,而不是字符串,但 VBA 指令 ApplescriptTask 只返回一个字符串。结果,列表不作为字符串查看,也没有完成转换!

要解决这个问题,您需要 2 个步骤:您需要强制 AppleScript 发回一个字符串(而不是列表)并强制 AppleScript 将 Finder 文件路径显式转换为 Unix 文件路径。 要将列表转换为字符串,我只需连接文件路径分隔符,但使用 ascii char 10。当返回到 VBA 时,您必须使用 Split 将该字符串转换为数组。

这是 AppleSrcipt:

on SelectFiles(fileType)
    set fileNames to choose file with prompt "Please select before and after treatment csv files:" of type {fileType} with multiple selections allowed
    set myList to {}
    repeat with aFile in fileNames
        set end of myList to POSIX path of aFile
    end repeat
    set text item delimiters to {ASCII character 10}
    return myList as text
end SelectFiles

这是 VBA:

Sub Macro()
 myscriptresult = AppleScriptTask("selectcvs.scpt", "SelectFiles", "csv")
 myArray = Split(myscriptresult, Chr(10))
 End Sub

警告:数组中的每一项都是文件的 Unix 路径,但只能从文件夹 /Users/...开始。在 VBA 中,您必须添加“File://”才能获取完整路径。

© www.soinside.com 2019 - 2024. All rights reserved.