0 votes

AppleScript exporter une variable vers Numbers / Excel / SQL

Je voudrais qu'AppleScript ajoute une nouvelle ligne sur une feuille de calcul Numbers ou Excel (ou sur une base de données SQL)

J'ai mes données enregistrées dans un fichier .plist que je peux récupérer avec

définir myDateFromPlist à la valeur de l'élément de liste de propriétés "myDate" de p_list

L'idée est de créer une base de données ou une feuille avec toutes les variables dans la même ligne (et ajouter une nouvelle ligne avec d'autres données lors de l'exécution du script à nouveau

ex

date |var1|var2|var3 date |var1|var2|var3

Ce que j'ai essayé jusqu'à présent

dire à l'application "Numbers"
    activer
    essayer
        si le document 1 n'existe pas alors erreur numéro 1000
        dire au document 1
            essayer
                dire à la feuille active
                    définir la table sélectionnée à ¬
                        (la première table dont la classe de la plage de sélection est plage)
                    dire à la table sélectionnée d'ajouter une ligne en dessous de la dernière ligne
                    dire à la table sélectionnée de définir la valeur de la première cellule sur myDateFromPlist
                    dire à la table sélectionnée de définir la valeur de la deuxième cellule sur myTimeFromPlist
                    dire à la table sélectionnée de définir la valeur de la troisième cellule sur theIDFromPlist

                fin dire
            en cas d'erreur
                erreur numéro 1001
            fin essayer
            dire à la table sélectionnée
                -- instructions d'édition vont ici
            fin dire
        fin dire

les problèmes avec ça :

1: Numbers doit être ouvert (mais je suppose que c'est peut-être une exigence de toute façon)

2: les données sont toujours ajoutées à la 1ère ligne

1voto

OnePablo Points 1

Allouer une ligne pour la saisie de données

Pour ajouter des données à une nouvelle ligne, vous étiez sur la bonne voie avec votre premier script où vous avez écrit dire à la table sélectionnée d'ajouter une ligne en dessous de la dernière ligne. Vous deviez simplement faire référence à cette nouvelle ligne créée lorsque vous définissiez les valeurs de cellule 1, cellule 2 et cellule 3, qui étaient autrement référencées comme appartenant à la table sélectionnée au lieu d'une ligne spécifique dans la table sélectionnée:

    set donnéesÀAjouter to {¬
        maDateDuFichierPlist, ¬
        monHeureDuFichierPlist, ¬
        l'IDDuFichierPlist}

    dire à l'application "Numbers" de dire ¬
        au document frontal de dire ¬
        à la feuille active de dire ¬
        à table 1

        set R to ajouter une ligne en dessous de la dernière ligne

        dire à R de ¬
            répéter avec i de 1 à compter donnéesÀAjouter

                définir la valeur de la cellule i à ¬
                    élément i dans donnéesÀAjouter

            fin répéter
    fin dire

J'ai décidé d'envelopper le réglage des valeurs de cellule à l'intérieur d'une boucle répéter, parce que—en théorie—vous pourriez avoir 50 cellules auxquelles assigner des valeurs, et cela sauve un peu de frappe, en plus de rendre le code un peu plus facile à lire.

Cependant, notez que cellule i à l'intérieur de la boucle répéter fait partie d'une déclaration dire à R, où R est la référence à la nouvelle ligne juste créée. Cela indique au script que c'est la cellule i de cette nouvelle ligne qui devrait se voir attribuer les valeurs stockées dans donnéesÀAjouter, et non simplement la cellule i de table 1 (je suppose que votre feuille n'a qu'une seule table, auquel cas il n'est pas nécessaire de s'embêter avec la longue phrase première table dont la classe de la plage sélectionnée est une plage. Cependant, s'il s'avère que j'ai eu tort, il est toujours préférable de donner des noms à vos tables, que vous pouvez ensuite référencer spécifiquement depuis votre script, plutôt que par le biais d'un espoir très ténu que la table sélectionnée sera toujours la bonne table).


Quelques points sur le contenu de votre question et l'extrait de code

Pour le moment, voici la meilleure aide que je puisse vous apporter.

Si je peux vous donner un conseil, lorsque vous posez une question, bien qu'il soit excellent que vous ayez posté votre extrait de code, il est bien plus utile de a) poster un extrait de code qui compile (le vôtre ne l'est pas ; l'Éditeur de Script signale une fin de fichier inattendue lors de sa compilation, car votre extrait de code est incomplet) ; b) inclure suffisamment de code parmi le grand tout pour qu'il puisse être exécuté sur le système d'une autre personne, ce qui signifie que les variables et autres devraient être définies dans l'extrait de code—actuellement, je n'ai aucune idée de ce que sont ou contiennent les variables maDateDuFichierPlist, monHeureDuFichierPlist et l'IDDuFichierPlist, je ne peux donc pas, par exemple, vous aider concernant la raison pour laquelle votre utilisation de la RAM a augmenté.

Je soupçonne qu'il y a toute une partie de code qui précède ce bloc Numbers, où vous avez accédé à votre fichier plist pour en récupérer les données. Il se pourrait que ce soit dans la manière dont vous avez fait cela que votre mémoire soit consommée.

En guise de dernière critique, bien que la gestion des erreurs soit une bonne idée, je laisserais cela de côté jusqu'à ce que votre script soit finalisé, car ses blocs actuels de piégeage incluent trop de lignes de code où des erreurs différentes pourraient être capturées : par exemple, si vous recevez un code d'erreur 1001, cela pourrait être dû au fait qu'il n'y a pas de feuille active ; ou qu'il n'y a pas de plage sélectionnée ; ou qu'il s'est produit quelque chose de mauvais en assignant des valeurs à une cellule, qui pourrait être cellule 1, cellule 2 ou cellule 3, mais aurait pu résulter d'un problème avec ligne 2 ou l'une des variables. De plus, vous avez deux blocs essayer emboîtés l'un dans l'autre, ce qui est assez cavalier.

**

Si vous avez besoin de plus d'aide...

Si vous êtes satisfait de la solution que cette réponse offre concernant votre problème d'allocation de ligne et d'insertion de données, alors je suis content que cela ait été facile à résoudre. Si vous avez d'autres questions à ce sujet, laissez un commentaire et je vous répondrai. Si vous souhaitez fournir plus d'informations concernant votre script, vos variables, etc., nous pouvons essayer de déterminer d'où vient cette consommation de mémoire. Comme vous l'avez mentionné dans votre commentaire "avec cette méthode, ma RAM s'envole par la fenêtre", il serait utile de savoir ce qui différait entre votre première méthode et celle qui a généré la consommation de mémoire, ce qui pourrait, bien sûr, vous obliger à poster deux scripts.

Pour les besoins de ceci, vous pouvez utiliser un service de partage en ligne. Pastery ne nécessite ni nom d'utilisateur ni mot de passe, et dispose d'une coloration syntaxique pour AppleScript, mais il n'est qu'un parmi tant d'autres. Pastebin ne nécessite aucune connexion du tout. C'est utile à utiliser sur les sites Web de la communauté Stack Exchange lorsque vous souhaitez/fournir un code supplémentaire spécifiquement demandé, mais qui n'est pas réellement nécessaire pour le point principal de la question elle-même, où un bloc de code a déjà été fourni et en fournir davantage risquerait d'engloutir la question dans une mer de gris.

**

0voto

Kevin Points 2006

Sûrement pas la meilleure façon mais semble fonctionner

    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
            tell

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X