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
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 desourcefile
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 ?