首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Applescript获取Excel列的所有值

Applescript获取Excel列的所有值
EN

Stack Overflow用户
提问于 2018-10-08 13:50:03
回答 3查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
        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:A 100的范围时,它就不起作用了。

我对applescript还不熟悉,我猜它不会将值存储为数组值,而是一个string对象?如能提供任何帮助,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-08 18:03:27

你有四个问题:

1)范围的值不应在{}之间,而应在()之间。

2) 'Date‘是Applescript中的一个保留字,因此不应该将它用作循环中的变量。我把它换成了“myDate”。

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

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

不管怎么说,下面的脚本是有效的:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2020-12-05 05:44:25

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

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

为了加速复杂的操作,一旦得到了值列表,就把进程从"tell Excel“块中取出来,让AppleScript进行计算。然后将结果返回到列表列表中,并在Excel中定义范围的值。

票数 0
EN

Stack Overflow用户

发布于 2022-01-28 10:50:10

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

获取具有范围值的所有值可能会导致脚本输出混乱的问题。AppleScript不认为单元格的内容"# value !“(=缺失值)是一个值,因为它是缺失的。因此,脚本在值列表中不包含单元格的内容。这显然会扰乱值列表中的单元格顺序,因为它的项比实际范围中的单元格少。在这种情况下,很难将每个值返回到工作簿中的原始单元格。将“范围”添加到代码中包括了解决问题的所有缺少值的单元格。

注:这些值将显示为一维数组。处理多列范围需要更多的工作。尽管如此,缺失的值还是包括在内。

代码语言:javascript
复制
set celVals to (value of ranges of range "A1:A4")

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

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

又来了。此代码仅适用于一列情况。需要更多的时间才能将多列范围放回。我相信你能行的。:D

代码语言:javascript
复制
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

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

代码语言:javascript
复制
set celVals to string value of range "A1:A4"

String值给出了范围内值和错误消息的二维数组.字符串值也会给出例如单元格的货币符号,因此它可能并不适合所有情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52703780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档