0 votos

Variable de exportación de AppleScript para números / Excel / SQL

Me gustaría AppleScript para agregar una nueva fila en un número o una hoja de excel (o en una base de datos SQL)

Tengo mis datos guardados en una .plist que puedo recuperar con

set myDateFromPlist to value of property list item "myDate" of p_list

la idea es crear una base de datos o una hoja con todas las variables en la misma fila (y añadir una nueva fila con más datos cuando se ejecuta la secuencia de comandos de nuevo

e.g

fecha |var1|var2|var3 fecha |var1|var2|var3

Lo que he probado hasta ahora

tell application "Numbers"
    activate
    try
        if not (exists document 1) then error number 1000
        tell document 1
            try
                tell active sheet
                    set the selectedTable to ¬
                        (the first table whose class of selection range is range)
                    tell the selectedTable to add row below last row
                    tell the selectedTable to set value of first cell to myDateFromPlist
                    tell the selectedTable to set value of second cell to myTimeFromPlist
                    tell the selectedTable to set value of third cell to theIDFromPlist

                end tell
            on error
                error number 1001
            end try
            tell selectedTable
                -- editing statements go here
            end tell
        end tell

los problemas con que :

1: los números tienen que ser abiertas (pero supongo que podría ser un requisito de todos modos)

2: los datos siempre se añade a la 1ª fila

1voto

qarma Puntos 71

Fila de Asignación para la Entrada de Datos

Para obtener datos que se añaden a una nueva fila, fueron en la pista de la derecha con su primer guión en la que escribió tell the selectedTable to add row below last row. Simplemente había que hacer referencia a este recién creado fila cuando la configuración de los valores de cell 1, cell 2y cell 3, que por otro lado se hace referencia como pertenecientes a la selectedTable en lugar de un determinado row en la selectedTable:

    set dataToAdd to {¬
        myDateFromPlist, ¬
        myTimeFromPlist, ¬
        theIDFromPlist}

    tell application "Numbers" to tell ¬
        the front document to tell ¬
        the active sheet to tell ¬
        table 1

        set R to add row below last row

        tell R to ¬
            repeat with i from 1 to count dataToAdd

                set value of cell i to ¬
                    item i in dataToAdd

            end repeat
    end tell

Decidí envolver el ajuste de los valores de las celdas dentro de una repeat de bucle, porque-en teoría-podría tener 50 células para asignar valores a, y esto ahorra un poco de escribir, además de hacer que el código sea un poco más fácil de leer.

Nota, sin embargo, que cell i dentro de la repeat de bucle es, en sí mismo, parte de una tell R declaración, donde R es la referencia a la nueva row acaba de crear. Esto indica la secuencia de comandos que es cell i de esta nueva row que se debe asignar los valores almacenados en dataToAdd, y no, simplemente, cell i de table 1 (estoy asumiendo su sheet sólo tiene una tabla, en cuyo caso no hay necesidad de molestarse con el extenso first table whose class of selection range is range. Si, sin embargo, he asumido, erróneamente, aún así es mejor dar sus nombres de tablas, que se puede hacer referencia específicamente a partir de su secuencia de comandos, en lugar de por la vía de una muy tenue esperanza de que la tabla seleccionada es siempre va a ser la tabla correcta).


Algunos Puntos Sobre Su Pregunta, el Contenido y el Fragmento de Código

Por el momento, esta es la mayor ayuda que puede dar.

Si me pueden asesorar, en la publicación de una pregunta, mientras que es genial que has publicado tu fragmento de código, es mucho más útil a) publicar un fragmento de código que se compila (el suyo no lo hace; el Editor de secuencias de Comandos informa de un fin de archivo inesperado al intentar compilar, porque el fragmento de código es incompleta); b) incluir suficiente de que el código de la mayor entero tal que se puede ejecutar en algún otro sistema, lo que significa que las variables y tal debe ser definida en el fragmento de código-en la actualidad, no tengo idea de lo que las variables myDateFromPlist, myTimeFromPlisty theIDFromPlist son o contienen, por lo que no se puede, por ejemplo, ayudar a usted con respecto a por qué su uso de la memoria RAM se intensificó.

Sospecho que hay un montón de código que precede a ésta Números de bloque, en la que ha accedido a su plist archivo para recuperar sus datos. Podría ser algo en la forma en que ha hecho este que tiene su memoria consumida.

Como final de la crítica, mientras que el control de errores es una buena idea, yo dejaría salir hasta que el guión está siendo finalizado, debido a que su actual atrapamiento bloques incluyen demasiadas líneas de código en diferentes errores podría ser capturado: por ejemplo, si recibe un código de error de 1001, podría ser debido a que no hay active sheet; o no hay selection range; o que algo salió mal con la asignación de valores a un cell, lo que podría ser cell 1, cell 2o cell 3, pero puede haber sido una consecuencia de un problema con row 2 o una de las variables. También, usted tiene dos try bloques anidados dentro de uno a otro, lo cual es bastante arrogante.


Si Desea Más Ayuda...

Si usted está contento con la solución de esta respuesta proporciona a su problema de fila de la asignación y la inserción de datos, entonces estoy contento es una solución fácil. Si tiene cualquier otra duda sobre esto, deja un comentario y me pondré en contacto con usted. Si desea proporcionar más información con respecto a la secuencia de comandos, variables, y lo que no, podemos tratar y suss donde esta el consumo de memoria. Como usted dice en su comentario "con este método, aunque es mi RAM es saltar de la ventana", sería útil saber cuál era la diferencia entre el primer método y el que genera el consumo de memoria, que puede, por supuesto, requieren la publicación de dos guiones.

Qué puede hacer usted para los fines de este se utilice una línea de pasta papelera. Pastery no requiere de nombres de usuario o contraseñas, y ha AppleScript resaltado de sintaxis, pero es uno entre muchos. Pegar Bin no requiere de registro alguno. Es útil el uso de la Pila de sitios web de Intercambio de cuando quiere/necesita suministro de código adicional que se solicite específicamente, pero no se necesita realmente para el principal foco de la pregunta en sí misma, donde un bloque de código ya fue suministrado y el suministro de más riesgo de ahogamiento la pregunta en un mar de grises.

0voto

KevinCork Puntos 82

Probablemente no la mejor manera pero parece que funciona

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