2 votos

¿Cómo automatizar la búsqueda y sustitución en los números con una lista predefinida?

¿Cómo puedo automatizar la búsqueda y el reemplazo en un archivo de Numbers basándome en una lista maestra predefinida?

Por ejemplo, quiero encontrar y reemplazar todo:

  • "ABC" a "XYZ"
  • "123" con "789"

Algunas reflexiones / expectativas del flujo de trabajo:

  • Mi rutina de búsqueda y sustitución se ha convertido en una carga, ya que realizo manualmente más de 20 acciones de búsqueda y sustitución.
  • La búsqueda y el reemplazo serán para todo el documento, no se limitarán a una determinada columna, fila o celda
  • Quiero tener una lista maestra en funcionamiento a la que pueda añadir
  • Me gustaría abrir un archivo, ejecutar este script y que se haga el find/replace
  • Sería estupendo si pudiera incorporar un comodín en la búsqueda

2voto

user3439894 Puntos 5883

No estoy exactamente seguro de cómo tienes la Números documento formato o cómo se quiere almacenar exactamente el Lista maestra de Buscar y reemplazar artículos o cuando, sin embargo, lo siguiente ejemplo AppleScript código está configurado para mostrar el uso del Lista maestra de Buscar y reemplazar artículos como una sola tabla en un hoja en el Números documento y se compone de dos columnas y por mucho que filas que necesitas.

Las imágenes siguientes muestran el hojas El Lista maestra de Buscar y reemplazar artículos y el antes y el después de hoja 1 . Los datos son simplistas, pero el resultado es que funciona para encontrar y reemplazar rápidamente los pares de Buscar y reemplazar artículos en el Lista maestra .

Esto será mucho más rápido que cualquier proceso manual para lograr el mismo objetivo.

Tenga en cuenta que, tal y como está codificado, supone que no hay fórmulas en el células y se formatean como texto.


Ejemplo AppleScript código :

  • Tal y como está codificado, esto funciona sólo con el hoja de actividades en la parte delantera documento .

    tell application "Numbers" tell front document

        --  # Get the Find & Replace list.
    
        set theFindReplaceList to ¬
            the formatted value of ¬
                the cells of the rows 2 thru -1 of ¬
                    table "Find & Replace" of ¬
                    sheet "Master List" whose ¬
            value is not missing value
    
        --  # Clean up the List removing empty cells and rows 
        --  # so there are only pairs of find/replace items. 
    
        set theFindReplaceListItems to {}
        repeat with aListItem in theFindReplaceList
            if the length of aListItem is 2 then ¬
                copy aListItem to the end of theFindReplaceListItems
        end repeat
        copy theFindReplaceListItems to theFindReplaceList
    
        --  ### Find & Replace ###
    
        if the name of active sheet is not "Master List" then
    
            --  # For each table of the active sheet.
    
            repeat with i from 1 to the count of the tables of the active sheet
    
                --  # For each Find & Replace pair.
    
                repeat with thisListItem in theFindReplaceList
    
                    --  # For every cell containing the FIND text. 
    
                    set theReplaceCellsList to the (cells of table i of sheet 1 ¬
                        whose formatted value contains item 1 of thisListItem)
    
                    --  # Replace it with the REPLACE text.
    
                    --  # Uncomment 'considering case' and 'end considering'
                    --  # for case senstive find/replace operations.
    
                    --considering case
                    repeat with aCell in theReplaceCellsList
                        set the value of aCell to my findAndReplaceInCellValue(formatted value of aCell, ¬
                            item 1 of thisListItem, item 2 of thisListItem)
                    end repeat
                    --end considering
    
                end repeat
            end repeat
            tell table 1 of active sheet to set selection range to range "A1"
        end if
    end tell

    end tell

    -- ## Handler ##

    on findAndReplaceInCellValue(theFormatedCellValue, theFindValue, theReplaceValue) set AppleScript's text item delimiters to theFindValue set theTextItems to every text item of theFormatedCellValue set AppleScript's text item delimiters to theReplaceValue set theFormatedCellValue to theTextItems as string set AppleScript's text item delimiters to "" return theFormatedCellValue end findAndReplaceInCellValue


Notas:

Mientras que el ejemplo AppleScript código tal y como está codificado está utilizando un hoja dentro del objetivo documento por su Buscar y reemplazar no obstante, puede codificarse para utilizar una fuente externa, por ejemplo, otra Números documento .

En cualquiera de los dos casos código ejemplos, el Lista maestra hoja no se ve afectado por las operaciones de búsqueda/reemplazo.

Las operaciones de búsqueda y sustitución son no distingue entre mayúsculas y minúsculas . Si necesita distingue entre mayúsculas y minúsculas encontrar/reemplazar y luego descomentar el considering case y end considering declaraciones en el ejemplo AppleScript código .

Tal y como están codificadas, las operaciones de búsqueda y sustitución actúan sobre células que contiene el valor de ENCONTRAR texto y cualquier otra cosa en el célula . Si quieres limitarte a células que sólo tienen el ENCONTRAR texto y nada más, entonces:

Cambios:

set theReplaceCellsList to the (cells of table i of aSheet ¬
    whose formatted value contains item 1 of thisListItem)

Para:

set theReplaceCellsList to the (cells of table i of aSheet ¬
    whose formatted value is item 1 of thisListItem)

El ejemplo AppleScript código puede utilizarse en un Automatizador Servicio/Acción Rápida utilizando un Ejecutar AppleScript acción y se le asignó un atajo de teclado en Preferencias del sistema > Teclado > Atajos > Servicios o utilizado con cualquier aplicación de terceros que puede funcionar AppleScript scripts etc.


Ejemplo AppleScript código :

  • Tal y como está codificado, funciona con todos los hojas en la parte delantera documento .

    tell application "Numbers" tell front document

        --  # Get the Find & Replace list.
    
        set theFindReplaceList to ¬
            the formatted value of ¬
                the cells of the rows 2 thru -1 of ¬
                    table "Find & Replace" of ¬
                    sheet "Master List" whose ¬
            value is not missing value
    
        --  # Clean up the List removing empty cells and rows 
        --  # so there are only pairs of find/replace items. 
    
        set theFindReplaceListItems to {}
        repeat with aListItem in theFindReplaceList
            if the length of aListItem is 2 then ¬
                copy aListItem to the end of theFindReplaceListItems
        end repeat
        copy theFindReplaceListItems to theFindReplaceList
    
        --  ### Find & Replace ###
    
        --  # For each sheet in the document.
    
        repeat with aSheet in (sheets whose name is not "Master List")
    
            --  # For each table of the sheet.
    
            repeat with i from 1 to the count of the tables of aSheet
    
                --  # For each Find & Replace pair.
    
                repeat with thisListItem in theFindReplaceList
    
                    --  # For every cell containing the FIND text. 
    
                    set theReplaceCellsList to the (cells of table i of aSheet ¬
                        whose formatted value contains item 1 of thisListItem)
    
                    --  # Replace it with the REPLACE text.
    
                    --  # Uncomment 'considering case' and 'end considering'
                    --  # for case senstive find/replace operations.
    
                    --considering case
                    repeat with aCell in theReplaceCellsList
                        set the value of aCell to my findAndReplaceInCellValue(formatted value of aCell, ¬
                            item 1 of thisListItem, item 2 of thisListItem)
                    end repeat
                    --end considering
                end repeat
            end repeat
            tell table 1 of active sheet to set selection range to range "A1"
        end repeat
    end tell

    end tell

    -- ## Handler ##

    on findAndReplaceInCellValue(theFormatedCellValue, theFindValue, theReplaceValue) set AppleScript's text item delimiters to theFindValue set theTextItems to every text item of theFormatedCellValue set AppleScript's text item delimiters to theReplaceValue set theFormatedCellValue to theTextItems as string set AppleScript's text item delimiters to "" return theFormatedCellValue end findAndReplaceInCellValue


Lista maestra

enter image description here

El Buscar y reemplazar tabla deben ser siempre dos columnas Sin embargo, el script está codificado para procesar únicamente filas que contiene tanto un encontrar y sustituir artículo.


Antes:

enter image description here


Después:

enter image description here


Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>intente </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso de la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

0voto

HUSTEN Puntos 118

Hasta ahora esto es lo que tengo. Sé que la respuesta es incompleta, pero puedes ver si este es el camino correcto para ti. Editaré cuando lo tenga completo.

  1. "Hoja 1" con datos:

enter image description here

  1. Hoja maestra con valores de búsqueda/reemplazo:

enter image description here

  1. script hasta ahora:

enter image description here

Código:

on run {input, parameters}
tell application "Numbers"
    activate
    tell front document
        tell sheet "Master" -- use info from master sheet
            tell table 1
                set FIND to value of cell "B2" as text
                set REPLACE to value of cell "C2" as text
            end tell
        end tell
    end tell
    tell document 1 of application "Numbers"
        set active sheet to sheet 1 -- work data from Sheet 1
    end tell
end tell
tell application "System Events"
    key code 3 using {command down} -- Command+F to search/replace
    delay 0.15
    set the clipboard to FIND
    delay 3 -- enough time to perform search (should be tweaked for large documents)
    key code 9 using {command down} -- paste data to find
    delay 0.8
    key code 48 -- tab
    delay 0.8
    set the clipboard to REPLACE
    delay 0.8
    key code 9 using {command down} -- paste data to replace
    delay 0.8
    key code 48 -- tab
    delay 0.8
    key code 49 -- space (press "replace all" button)
end tell
end run
  1. Estado antes de "sustituir todo":

enter image description here

  1. Estado final:

enter image description here

Próximos pasos:

  • Bucle
  • Detectar celdas vacías en la hoja maestra
  • Terminar script

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X