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数组值和范围的错误消息。 字符串值 也给出例如单元格的货币符号,所以它可能不适合所有情况。
我正在尝试将 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数组值和范围的错误消息。 字符串值 也给出例如单元格的货币符号,所以它可能不适合所有情况。