使用Applescript删除Excel中的行

使用Applescript删除Excel中的行,excel,applescript,Excel,Applescript,我正在尝试使用applescript删除excel中的特定行。我想根据给定列中的值删除行。在给定的列中,我有一个要保留的值列表(例如3001、3004、5003等) 例如,如果我的任何值(300130045003)在C列中,我希望保留包含该值的行。如果该行不包含C列中的某个值,我想删除该行。我在这里找到了这个applescript,但它所做的只是删除了除第2行以外的所有内容。我无法让它保留我的值范围 我将字段10替换为字段3,因为我正在处理C列,并且我将“(非纽约州)”更改为“(非3001)”,

我正在尝试使用applescript删除excel中的特定行。我想根据给定列中的值删除行。在给定的列中,我有一个要保留的值列表(例如3001、3004、5003等)

例如,如果我的任何值(300130045003)在C列中,我希望保留包含该值的行。如果该行不包含C列中的某个值,我想删除该行。我在这里找到了这个applescript,但它所做的只是删除了除第2行以外的所有内容。我无法让它保留我的值范围

我将字段10替换为字段3,因为我正在处理C列,并且我将“(非纽约州)”更改为“(非3001)”,但这不起作用。还有,我需要如何列出这些值,我是将它们列为“(300130045003)”还是“(3001;3004;5003)还是什么


我只需遍历行,查看值:

set myValues to {3001, 3004, 5003}
tell application "Microsoft Excel"
    tell active workbook

        (* Code to count the amount of rows *)

        repeat with i from rowCount to 1 by -1
            set cellValue to value of cell ("C" & i)
            if cellValue is not in myValues then
                delete row i
            end if
        end repeat
    end tell
end tell
请注意,它会向后遍历行。删除行时,Excel会将行上移。向后操作可确保每一行都得到处理

根据评论进行编辑:

为了获得更好的性能,请尝试获取列中的所有值并循环这些值,而不是在每次迭代期间从Excel获取单元格值

set columnValues to my quickExcelList("C1:C" & rowCount, return)
repeat with i from rowCount to 2 by -1
    if item i of columnValues is not in myValues then
        tell application "Microsoft Excel"
            delete row i
        end tell
    end if
end repeat

--Shane Stanley's routine to get tab/return delimited text from an Excel sheet
--------------------------------------------------------------------------------
on quickExcelList(theRange, theDelim)
    tell application "Microsoft Excel"
        tell active sheet
            copy range range theRange
            set copiedText to the clipboard
        end tell
    end tell

    set theList to strLib's explode(copiedText, theDelim)
    return theList
end quickExcelList

我只需遍历行,查看值:

set myValues to {3001, 3004, 5003}
tell application "Microsoft Excel"
    tell active workbook

        (* Code to count the amount of rows *)

        repeat with i from rowCount to 1 by -1
            set cellValue to value of cell ("C" & i)
            if cellValue is not in myValues then
                delete row i
            end if
        end repeat
    end tell
end tell
请注意,它会向后遍历行。删除行时,Excel会将行上移。向后操作可确保每一行都得到处理

根据评论进行编辑:

为了获得更好的性能,请尝试获取列中的所有值并循环这些值,而不是在每次迭代期间从Excel获取单元格值

set columnValues to my quickExcelList("C1:C" & rowCount, return)
repeat with i from rowCount to 2 by -1
    if item i of columnValues is not in myValues then
        tell application "Microsoft Excel"
            delete row i
        end tell
    end if
end repeat

--Shane Stanley's routine to get tab/return delimited text from an Excel sheet
--------------------------------------------------------------------------------
on quickExcelList(theRange, theDelim)
    tell application "Microsoft Excel"
        tell active sheet
            copy range range theRange
            set copiedText to the clipboard
        end tell
    end tell

    set theList to strLib's explode(copiedText, theDelim)
    return theList
end quickExcelList

谢谢,这很有效,但需要一段时间的循环b/c。有没有一个更短的方法来完成?还有,如何排除标题中的第一行?这是我使用的代码。将myValues设置为{3102,3104,3105}告诉应用程序“Microsoft Excel”将rowCount设置为((活动工作表使用范围的行数))+1)重复i从rowCount到1 by-1将cellValue设置为单元格的值(“C”&i)如果cellValue不在myValues中,则删除行i end如果end repeat end tell要排除标题,请将循环更改为“重复i从rowCount到-2 by-1”。“这将阻止它处理第一行。就性能而言,它可能有助于提前获取所有值,然后循环使用这些值。这将使你对卓越的要求减少一半。我还注意到,如果在脚本运行时隐藏Excel,它的运行速度将提高2-3倍。感谢所有帮助!它工作得很好,但结果是行数为“+2乘-1”,而不是“-2乘-1”。还有一个问题,你把所有的值都放在前面然后循环是什么意思?我的错。你说得对。我没有仔细阅读自己的代码。我不记得头顶上的确切代码,但类似“范围值”C2:C的内容会给出列中的所有值。然后,您可以循环使用这些值,而不是在每次迭代中获取单元格值。再次感谢所有帮助!在我的“repeat with I从rowcount到2by-1”行之前,我试图包含“value of range”脚本的变体,但我始终无法让它工作。我收到此错误消息“error”Microsoft Excel收到错误:您试图访问的对象不存在“number-1728 from value of range“C2:”。我是applescript的新手,非常感谢所有的基本帮助!谢谢,这很有效,但需要一段时间的循环b/c。有没有较短的方法?另外,如何排除标题中的第一行?这是我使用的代码。将myValues设置为{3102,3104,3105}告诉应用程序“Microsoft Excel”将rowCount设置为(((活动工作表使用范围的行数))+1)使用i从rowCount重复到1乘以-1将cellValue设置为单元格的值(“C”&i)如果cellValue不在myValues中,则删除行i end如果end重复结束则删除标头,将循环更改为“repeat with i from rowCount to-2 by-1”。这将阻止它处理第一行。就性能而言,它可能有助于提前获取所有值,然后循环使用这些值。这将使你对卓越的要求减少一半。我还注意到,如果在脚本运行时隐藏Excel,它的运行速度将提高2-3倍。感谢所有帮助!它工作得很好,但结果是行数为“+2乘-1”,而不是“-2乘-1”。还有一个问题,你把所有的值都放在前面然后循环是什么意思?我的错。你说得对。我没有仔细阅读自己的代码。我不记得头顶上的确切代码,但类似“范围值”C2:C的内容会给出列中的所有值。然后,您可以循环使用这些值,而不是在每次迭代中获取单元格值。再次感谢所有帮助!在我的“repeat with I从rowcount到2by-1”行之前,我试图包含“value of range”脚本的变体,但我始终无法让它工作。我收到此错误消息“error”Microsoft Excel收到错误:您试图访问的对象不存在“number-1728 from value of range“C2:”。我是applescript的新手,非常感谢所有的基本帮助!