AppleScript esporta la variabile in Numbers / Excel / SQL

0

Desidero che AppleScript aggiunga una nuova riga su un numero o un foglio Excel (o su un database SQL)

Ho i miei dati salvati su un file .plist che posso recuperare con

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

l'idea è di creare un database o un foglio con tutte le variabili nella stessa riga (e aggiungi una nuova riga con più dati quando esegui di nuovo lo script

ad es.

data | var1 | var2 | var3 data | var1 | var2 | var3

Quello che ho provato fino ad ora

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

i problemi con questo:

1: i numeri devono essere aperti (ma suppongo che potrebbe essere comunque un requisito)

2: i dati vengono sempre aggiunti alla 1a riga

    
posta Kevin 10.03.2018 - 13:51
fonte

2 risposte

1

Assegnazione riga per immissione dati

Per ottenere i dati aggiunti a una nuova riga, eri sulla strada giusta con il tuo primo script in cui hai scritto tell the selectedTable to add row below last row . Dovevi semplicemente fare riferimento a questa riga appena creata quando imposti i valori di cell 1 , cell 2 e cell 3 , che venivano altrimenti referenziati come appartenenti a selectedTable invece di uno specifico row nella 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

Ho deciso di racchiudere l'impostazione dei valori di cella all'interno di un ciclo repeat , perché, in teoria, si potevano avere 50 celle per assegnare valori, e questo risparmia un po 'di digitazione, inoltre rende il codice un po' più facile lettura.

Tuttavia, nota che cell i all'interno del ciclo repeat è, a sua volta, parte di un'istruzione tell R , dove R è il riferimento al nuovo row appena creato. Questo dice allo script che è cell i di questo nuovo row a cui dovrebbero essere assegnati i valori memorizzati in dataToAdd , e non semplicemente cell i di table 1 (sto assumendo che il tuo sheet abbia solo una tabella , nel qual caso non c'è bisogno di preoccuparsi del lungo% difirst table whose class of selection range is range. Se, tuttavia, ho assunto erroneamente, allora è ancora meglio dare i nomi delle tabelle, che puoi quindi fare riferimento in modo specifico al tuo script, piuttosto che a modo di una speranza molto tenue che la tabella selezionata sarà sempre la tabella corretta).

Alcuni punti sul contenuto della domanda e sullo snippet di codice

Al momento, questa è la massima assistenza che posso dare.

Se posso consigliarti, nel pubblicare una domanda, mentre è bello che hai postato il tuo snippet di codice, è molto più utile per a) pubblicare un frammento di codice che compila (il tuo no; < em> Script Editor segnala una fine imprevista del file quando si tenta di compilarlo, perché lo snippet di codice è incompleto); b) include abbastanza codice del complesso più grande in modo che possa essere eseguito sul sistema di qualcun altro, il che significa che le variabili e tali devono essere definite all'interno dello snippet di codice: al momento, non ne ho idea quali sono le variabili myDateFromPlist , myTimeFromPlist e theIDFromPlist che sono o contengono, quindi non può, ad esempio, aiutarti a capire come mai l'utilizzo della RAM è aumentato.

Sospetto che ci sia un sacco di codice che precede questo blocco Numeri , in cui hai avuto accesso al tuo file plist per recuperare i suoi dati. Potrebbe essere qualcosa nel modo in cui hai fatto ciò che ha consumato la tua memoria.

Come ultima critica, mentre la gestione degli errori è una buona idea, lascerei da parte fino a quando il tuo script non sarà finalizzato, perché i suoi attuali blocchi di intrappolamento includono troppe righe di codice in cui diversi errori potrebbe essere catturato: ad esempio, se ricevi un codice di errore di 1001, potrebbe essere perché non c'è active sheet ; o non c'è selection range ; o che qualcosa è andato storto con l'assegnazione di valori a cell , che potrebbe essere cell 1 , cell 2 o cell 3 , ma potrebbe essere stato il risultato di un problema con row 2 o una delle variabili. Inoltre, hai due blocchi di% co_de annidati l'uno dentro l'altro, che è piuttosto sprezzante.

Se desideri ulteriore assistenza ...

Se sei soddisfatto della soluzione, questa risposta fornisce il tuo problema di allocazione delle righe e inserimento dei dati, quindi sono felice che sia stata una soluzione facile. Se hai altre domande su questo, lascia un commento e tornerò da te. Se vuoi fornire maggiori informazioni sul tuo script, sulle variabili e su cosa no, possiamo provare a scoprire da dove proviene questo consumo di memoria. Come hai detto nel tuo commento "con questo metodo sebbene la mia RAM stia saltando fuori dalla finestra", sarebbe utile sapere che cosa era diverso tra il tuo primo metodo e quello che generava il consumo di memoria , che potrebbe, ovviamente, richiedere di pubblicare due script.

Quello che puoi fare ai fini di questo è usare un cestino per incolla online. Pastery non richiede nomi utente o password e presenta l'evidenziazione della sintassi di AppleScript, ma è uno tra tanti. Copia spazio non richiede alcun tipo di accesso. È utile utilizzare i siti Web Stack Exchange quando si desidera / è necessario fornire codice aggiuntivo richiesto in modo specifico, ma non è effettivamente necessario per l'obiettivo principale della domanda stessa in cui è già stato fornito un blocco di codice e la fornitura di più rischierebbe di annegare il domanda in un mare di grigio.

    
risposta data 12.03.2018 - 12:41
fonte
0

Probabilmente non è il modo migliore ma sembra funzionare

    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 set value of cell 1 of row 2 to myDateFromPlist

                    tell the selectedTable to set value of cell 2 of row 2 to myTimeFromPlist

                    tell the selectedTable to set value of cell 3 of row 2 to theIDFromPlist

                    end tell
                on error
                    error number 1001
                end try
                tell selectedTable
                    -- editing statements go here
                end tell
            end tell
    
risposta data 11.03.2018 - 11:03
fonte

Leggi altre domande sui tag