1

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

例如,如果我的任何值(3001、3004、5003)在 CI 列中,则希望保留包含该值的行。如果该行不包含我在 CI 列中的值之一,则要删除该行。我在这里找到了这个applescript,但它所做的只是删除除第2行之外的所有内容,我无法让它保持我的值范围。

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

tell application "Microsoft Excel"

    set autofilter mode of active sheet to false
    set lastRow to first row index of last row of used range

    autofilter range row ("1:" & lastRow) field 10 criteria1 "(Not NY State)"
    select row ("2:" & lastRow)
    delete selection -- if you want to delete 
    #clear contents selection -- if you only wish to clear the data

end tell
4

1 回答 1

1

我只会遍历查看值的行:

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
于 2013-05-14T20:57:57.363 回答