Applescript 获取 Excel 列的所有值

Applescript get all values of Excel column

我正在尝试将 excel 列的所有值存储在一个数组中。

        set rangeDate to {value of range "A14:A100"}
        repeat with date in rangeDate
            if (date as string is equal to "01/01/2001") then
                log "It works"
            end if
        end repeat

在我的 Excel 中,我确实在指定列中设置了格式为 01/01/2001 的确切日期。当我删除范围时,它只是单元格 A14(日期所在的位置)有效。但是当我包含范围 A14:A100 时,它不起作用。

我是 applescript 的新手,我猜它不会将值存储为数组值而是字符串对象?任何帮助将不胜感激

您有 4 个问题:

1) range的值不能在{}之间,而是在()

之间

2) 'Date' 是 Applescript 中的保留字,因此您不应将其用作循环中的变量。我用 'myDate'.

替换了它

3) 与其将日期转换为字符串以与“01/01/2001”进行比较,不如继续比较 2 个日期,然后与日期“01/01/2001”进行比较更快

4) 我认为这是一个错误(至少对于我的 Excel 版本),但 rangeDate 变量不是预期的日期列表,但对我来说是一个列表列表:{{01 /02/01},{02/02/01},…………} 因此,'rangeDate'的每个成员都不是一个日期,而是在一个项目上列出的一个日期!我不确定,但也可能是范围定义可以是范围列表...所以我正在使用子列表的第 1 项。

无论如何,下面的脚本正在运行:

tell application "Microsoft Excel"
    activate
    tell active sheet of document 1
        set rangeDate to (value of range "A14:A100")
        repeat with mydate in rangeDate
            set TheDate to item 1 of mydate
            if TheDate = (date "lundi 1 janvier 2001 00:00:00") then
                log "It works"
            end if
        end repeat
    end tell
end tell

快速获取一系列单元格的值是个好消息!但更好的是,您可以通过定义该范围的值来填充该范围的值。这比一次处理一个单元格快得多。

当我尝试获取一列(一系列单元格)的值时,我收到了一个列表列表。列表中的每一项只有一个值 - 即单元格的值。

要加快复杂操作的速度,一旦您获得值列表,就将过程从“告诉 Excel”块中取出,让 AppleScript 进行计算。然后将结果转回列表的列表,并在Excel.

中定义范围的值

我在读取某些包含#VALUE 的单元格的范围时遇到问题! (失败的公式)。我没有在 Internet 上找到解决方案,所以我认为在这里分享我的解决方案是个好主意。欢迎提出意见和改进。我倾向于认为有比这更直接的解决问题的方法。 :)

获取范围值范围的所有值可能会导致脚本输出混乱的问题。 AppleScript 不考虑单元格的内容“#VALUE!” (= 缺失值) 一个值,因为它是缺失的。因此,该脚本不会将单元格的内容包含在值列表中。这显然打乱了值列表中的单元格顺序,因为它的项目少于实际范围中的单元格。在这种情况下,几乎不可能 return 每个值到其在工作簿中的原始单元格。在代码中添加“of ranges”包括所有具有缺失值的单元格来解决问题。

N.B。这些值将显示为 one-dimensional 数组。处理 multi-column 范围需要更多工作。尽管如此,缺失值 已包括在内。

set celVals to (value of ranges of range "A1:A4")

例如{2.2.2022、1.1.2011、缺失值、3.3.2033}

为了 return 将值返回到工作簿,需要重新构建列表列表。 缺失值 将作为空字符串写入其单元格。当然,如果需要,可以改写原始的(失败的)公式。

N.B。再次。此代码仅适用于一列情况。需要多一点才能放回 multi-column 范围。我相信你会处理的。 :D

set returningCelVals to {}
repeat with i from 1 to count of celVals
   set end of returningCelVals to {item i of celVals}
end repeat
set value of range ("A1:A4") to returningCelVals

编辑:我知道有更好的解决方案。这是:

set celVals to string value of range "A1:A4"

字符串值给出一个two-dimensional数组值和范围的错误消息。 字符串值 也给出例如单元格的货币符号,所以它可能不适合所有情况。