0 votes

Comment ouvrir un classeur Excel qui se termine par une chaîne spécifique en utilisant Applescript

Je suis nouveau en Applescript et j'essaie d'ouvrir un fichier xlsx qui se termine par DK.xlsx. J'ai essayé d'utiliser le code suivant, mais cela ne fonctionne pas. Qu'est-ce que je fais de mal ici ? S'il vous plaît aidez-moi.

définir le chemin d'accès source à "Macintosh HD:Users:nprabu:Documents:Work:Project:Q1 2018:"

définir le fichier source comme nom de chaque fichier de source dont le nom se termine par "DK.xlsx"

dire à l'application "Microsoft Excel"

    ouvrir le classeur dont le nom du fichier est sourcefile

fin dire

0 votes

Pourquoi n'utilisez-vous pas la fonction de recherche de Finders?

0 votes

Avant de tenter d'ouvrir sourcefile, pourquoi ne pas essayer d'afficher le nom de sourcefile pour voir ce qui est assigné ? Une boîte de dialogue serait suffisante et c'est juste à des fins de débogage.

0 votes

@nprabu Avez-vous réussi à le trier ?

3voto

OnePablo Points 1

Parce que vous êtes novice en AppleScript et parce que le script que vous avez donné comportait une myriade d'erreurs rudimentaires, cette réponse est assez longue car j'ai jugé bon d'expliquer comment corriger le script et pourquoi les erreurs sont apparues en premier lieu.

Toutefois, pour les lecteurs pour qui cela serait TL;DR voici deux trois versions du script dans leur forme complète, chacune différant dans la façon dont le(s) fichier(s) est (sont) recherché(s) et la commande envoyée à Excel afin de l'ouvrir.

Avis de non-responsabilité : Je n'ai pas été en mesure de tester pleinement les scripts, car je ne possède pas une copie de Microsoft Excel . J'ai formulé ces extraits en me basant sur une version en ligne du dictionnaire AppleScript . Si vous rencontrez des erreurs de script, vos commentaires m'aideront à les corriger.

Cette version utilise le open workbook comme dans votre script original, qui n'accepte qu'une seule référence de fichier. Par conséquent, la recherche effectuée renverra le fichier unique qu'elle trouvera en premier avec la terminaison de nom de fichier appropriée. Note : Voir ci-dessous pourquoi le Excel pourrait ne pas fonctionner, et pourquoi j'ai fourni une deuxième version du script si tel était le cas :

    set sourcefilepath to "Macintosh HD:Users:nprabu:Documents:Work:Project:Q1 2018:"

    try
        tell application "Finder" to set sourcefile to ¬
            (the first file in the folder sourcefilepath whose ¬
                name ends with "DK.xlsx") as text
    on error
        return display notification ¬
            "No filenames ending in \"DK.xlsx\"" with title "File Not Found"
    end try

    tell application "Microsoft Excel" to ¬
        open workbook workbook file name sourcefile

Cette version utilise la norme open qui accepte une ou plusieurs file ou alias objets. Utilisez cette version si vous devez ouvrir plusieurs fichiers facilement ou si la version ci-dessus du script ne parvient pas à ouvrir le fichier :

    set sourcefilepath to "Macintosh HD:Users:nprabu:Documents:Work:Project:Q1 2018:"

    tell application "Finder" to set sourcefiles to ¬
        (every file in the folder sourcefilepath whose ¬
            name ends with "DK.xlsx") as alias list

    if sourcefiles is {} then return display notification ¬
        "No filenames ending in \"DK.xlsx\"" with title "File Not Found"

    tell application "Microsoft Excel" to open the sourcefiles

Addendum : Urgence script :

Merci à @user3439894 pour avoir testé ces scripts et rapporté un comportement étrange de la part de Microsoft Excel concernant la façon dont il répond à la norme open (voir le fil de commentaires joint à cette réponse).

Essentiellement, il se comporte comme prévu si Excel n'est pas déjà en cours d'exécution, et ouvrira plusieurs fichiers (en arrière-plan). Cependant, si Excel est déjà ouvert, il n'ouvrira qu'un seul fichier parmi une liste de fichiers donnée, et celui qu'il choisit d'ouvrir est apparemment aléatoire.

Par conséquent, j'ajoute cette troisième version du script comme une approche moins gracieuse de l'ouverture de fichiers multiples, mais qui fera sûrement face à Excel des problèmes de personnalité :

    set sourcefilepath to "Macintosh HD:Users:nprabu:Documents:Work:Project:Q1 2018:"

    tell application "Finder" to set sourcefiles to ¬
        (every file in the folder sourcefilepath whose ¬
            name ends with "DK.xlsx") as alias list

    if sourcefiles is {} then return display notification ¬
        "No filenames ending in \"DK.xlsx\"" with title "File Not Found"

    tell application "Microsoft Excel"
        activate -- Bring Excel into focus

        -- This loops through the list of files and
        -- opens them one at a time
        repeat with sourcefile in sourcefiles
            open the sourcefile
        end repeat
    end tell

Vous pouvez, bien sûr, essayer de remplacer open the sourcefile con open workbook workbook file name (sourcefile as text) si cette commande fonctionne dans votre version, mais sinon, vous pouvez vous contenter d'utiliser la commande open .


Une analyse détaillée

Récupération de votre/vos dossier(s)

Les premières erreurs de votre script original proviennent de cette ligne :

set sourcefile to name of every file of sourcefilepath ¬
    whose name ends with "DK.xlsx"

(J'ai réparti le code sur deux lignes pour des raisons de lisibilité ; cela n'affecte pas la façon dont AppleScript exécute les commandes).

Tout d'abord, cette commande doit être envoyée à une application capable de gérer des objets de type fichier et dossier. Les deux options dont vous disposez sont Buscador y Événements du système . Buscador est approprié et le plus souvent utilisé pour les commandes de fichiers. Pour envoyer une commande à Buscador vous ajoutez simplement un tell au début de la ligne :

tell application "Finder" to set sourcefile to ¬
    name of every file of folder sourcefilepath ¬
    whose name ends with "DK.xlsx"

Vous devez également préciser que sourcefilepath est un objet dossier, ce que j'ai fait en ajoutant le spécificateur d'objet folder devant la variable.

Votre question telle qu'elle est formulée, ainsi que votre choix de nom de variable AppleScript, implique que vous souhaitez qu'un seul fichier soit ouvert. Cependant, la commande que nous venons d'examiner indique que Buscador pour obtenir every file qui retournera toujours un liste d'éléments (bien qu'il puisse s'agir d'une liste ne contenant qu'un seul élément), plutôt qu'un seul élément. S'il existe plusieurs fichiers dont le nom se termine par "DK.xlsx", ils seront tous renvoyés dans cette liste. Cela posera des problèmes lorsqu'il s'agira d'ouvrir les fichiers à l'aide de la fonction Excel 's open workbook qui ne peut gérer qu'un seul fichier par instruction de commande.

Si vous êtes raisonnablement sûr qu'il n'y a qu'un seul nom de fichier qui se termine par "DK.xlsx", alors vous pouvez modifier every à first :

tell application "Finder" to set sourcefile to ¬
    the name of the first file of folder sourcefilepath ¬
    whose name ends with "DK.xlsx"

(J'ai préfixé certains termes par the pour le rendre plus lisible ; AppleScript se débrouille très bien avec ou sans the être présent).

L'autre considération est que open workbook exige que le chemin d'accès complet au fichier soit spécifié. Cependant, en demandant que Buscador ne renvoie que le name du ou des fichiers, vous ne recevrez que les noms de fichiers sans le chemin. Pour récupérer le chemin d'accès complet, supprimez la demande du nom du fichier. name et récupère à la place l'objet fichier, que vous pouvez ensuite convertir en texte :

tell application "Finder" to set sourcefile to ¬
    (the first file of folder sourcefilepath ¬
    whose name ends with "DK.xlsx") as text

S'il s'avère que vous souhaitez effectivement récupérer plusieurs fichiers se terminant par le suffixe "DK", il est préférable de contraindre le programme liste d'objets de fichiers dans un alias list (qui est une liste d'alias). Cela nous permet d'utiliser la fonction standard open au lieu de open workbook Le premier peut accepter une liste d'alias de fichiers multiples, ce qui vous permet d'ouvrir plusieurs fichiers avec une seule commande.

tell application "Finder" to set sourcefile to ¬
    (every file of folder sourcefilepath ¬
    whose name ends with "DK.xlsx") as alias list

Ouvrir le(s) fichier(s) dans Excel

Vous n'avez pas mentionné quelle version de Microsoft Excel que vous utilisez, ce qui peut s'avérer être une information pertinente. Este La question du forum de 2009 provient d'un utilisateur qui signale avoir rencontré des problèmes lors de l'utilisation de l'outil de gestion de l'environnement. open workbook commandement.

MAIS... Supposons pour l'instant que la commande sera fonctionne avec votre version, et que vous ne souhaitez ouvrir qu'un seul fichier. La syntaxe telle que vous la présentez est tout à fait correcte, et l'ajustement que j'ai mentionné ci-dessus pour récupérer le chemin d'accès complet au fichier empêchera l'échec de l'ouverture du fichier. open workbook d'éviter une erreur due à une mauvaise référence de fichier. Une remarque stylistique : vous pouvez écrire la commande tell et la open workbook sur une seule ligne, puis supprimez la commande end tell ligne :

tell application "Microsoft Excel" to open workbook workbook file name sourcefile

Aucune forme n'est meilleure que l'autre, c'est donc un choix personnel.

Le message du forum que j'ai mentionné ci-dessus et qui signalait un dysfonctionnement open workbook a également cité le même problème lors de l'utilisation de la commande standard open commandement. Cependant, ce Le post de Stack Overflow fournit la cause probable, et me rassure sur le fait que cette open fonctionnera là où l'option open workbook peut ne pas l'être.

Fondamentalement, de la même manière que le Buscador a besoin qu'un objet dossier soit spécifié explicitement comme étant une folder , Excel nécessite que l'objet fichier soit spécifié explicitement comme étant un file (ou alias ):

tell application "Microsoft Excel" to open file sourcefile

L'avantage de cette open est qu'elle peut accepter des listes d'alias pour ouvrir plusieurs fichiers à la fois. Par conséquent, si vous décidez de conserver la version de la commande Buscador qui récupère plusieurs fichiers, assurez-vous de le contraindre à une commande alias list que vous pouvez ensuite utiliser comme suit :

tell application "Microsoft Excel" to open sourcefile

Notez ici que le file est absent lors de l'ouverture de plusieurs fichiers, car la variable sourcefile est déjà du type correct, à savoir alias list .

Commentaires de clôture

Les versions finales du script que j'ai fourni au début sont les suivantes légèrement différent dans la façon dont j'ai choisi de mettre en œuvre les changements que j'ai détaillés ici. J'ai également estimé qu'il était judicieux d'inclure un traitement de base des erreurs au cas où un fichier ne pourrait être trouvé, ce qui entraînerait une erreur et pourrait vous amener à vous demander si le code est défectueux.

Si vous constatez que le fichier s'ouvre avec succès dans Excel mais qu'il reste en arrière-plan dissimulé derrière d'autres applications, vous pouvez ajouter cette commande au script pour amener Excel au premier plan et en faire l'application principale :

tell application "Microsoft Excel" to activate

ou en le combinant avec les Excel des commandes :

tell application "Microsoft Excel"
    activate
    open file sourcefile
end tell

Si vous avez besoin d'éclaircissements ou si vous avez d'autres petites questions à ce sujet, laissez un commentaire et je vous répondrai. Si vous trouvez cela utile ou si cela résout votre problème, pensez à sélectionner cette réponse ou toute autre réponse qui s'avère plus utile afin que les autres visiteurs du forum sachent que ce problème a été traité et puissent en bénéficier s'ils ont un problème similaire.

0 votes

Il peut s'agir d'un problème de version d'Excel, cependant, lorsque Excel est déjà ouvert, il n'ouvre qu'un seul des fichiers de la liste et pas nécessairement le premier fichier. Avec Excel toujours ouvert, si vous fermez le fichier ouvert dans la liste et exécutez le script à nouveau, un autre fichier s'ouvre mais encore une fois un seul fichier dans la liste, et ainsi de suite. Ce qui semble être un comportement vraiment étrange. Utiliser une répétition boucle sur la liste est une solution de contournement.

1 votes

@user3439894 Merci d'avoir testé cela pour moi. J'ai testé avec d'autres applications, telles que TextEdit et Keynote (toutes deux des applications Apple, notez bien), et cela a fait ce que je m'attendais et voulais. C'est dommage que Excel ne se conforme pas. On dirait que je vais devoir utiliser une boucle repeat. Au fait, comment se comporte-t-il lorsque Excel n'est pas déjà ouvert ? Excel est-il l'une de ces applications qui exigent que je l' active d'abord ?

0 votes

Avec Excel fermé et en testant avec une liste de 3 fichiers, il ouvre les trois, et Excel est en arrière-plan sauf si activate est utilisé.

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