AppleScript'te yenisiniz ve verdiğiniz komut dosyası sayısız basit hataya sahip olduğundan, bu yanıt betiği nasıl düzelteceğinizi ve neden hataların neden ortaya çıktığını açıklamanın uygun olacağını düşündüğüm sürece oldukça uzundur.
Ancak, bunun TL olduğu herhangi bir okuyucunun yararı için, DR , işte tam olarak her biri dosya (lar) ın aranması ve komutun açılması için Excel'e gönderilmesiyle farklı olan iki üç versiyonudur. o / onlar.
Feragatname: Microsoft Excel'in bir kopyasına sahip olmadığım için komut dosyalarını tam olarak test edemedim . Bu snippet'leri AppleScript sözlüğünün çevrimiçi sürümüne dayanarak formüle ettim . Herhangi bir komut dosyası hatasıyla karşılaşırsanız, geri bildiriminiz düzeltilmeme yardımcı olacaktır.
Version Bu sürüm open workbook
, yalnızca tek bir dosya referansını kabul eden orijinal komut dosyasına göre komutu kullanır . Bu nedenle, yapılan arama, uygun dosya adı bittikten sonra ilk bulduğu her dosyayı geri döndürecektir. Not: Excel komutunun neden işe yaramadığını ve bu durumda aşağıdaki komut dosyasının neden ikinci bir sürümünü verdiğimi öğrenin:
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
② Bu sürüm standart kullanan open
bir veya daha fazla kabul komutu file
veya alias
nesneleri. Birden çok dosyayı kolayca açmanız gerekirse veya bu komut dosyasının yukarıdaki sürümü dosyayı açamıyorsa, bu sürümü kullanın:
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
End Ek: Acil Senaryo:
Bu komut dosyalarını test etmek ve Microsoft Excel'den standart komuta nasıl yanıt verdiğiyle ilgili bazı tuhaf davranışlar bildirdiği için @ user3439894'e teşekkür ederiz (bu cevaba ekli olan yorumlar başlığına bakın).open
Temel olarak, Excel zaten çalışmıyorsa ve arka planda birden fazla dosya açacaksa beklendiği gibi davranır . Ancak, Excel zaten açıksa, belirli bir dosya listesinden yalnızca bir dosyayı açar ve açmayı seçtiği dosya görünüşte rasgeledir.
Bu nedenle, betiğin bu üçüncü sürümünü, birden fazla dosyayı açmak için daha az zarif bir yaklaşım olarak ekliyorum, ancak kesinlikle Excel'in kişilik sorunlarıyla başa çıkacak :
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
Sen, elbette, denemek ve yerini alabilecek open the sourcefile
ile open workbook workbook file name (sourcefile as text)
bu komutu sürümünde çalışıyor olması gerekir, ancak aksi takdirde sadece kullandım iyi olacak open
.
Detaylı Bir Dağılım
Dosyalarınızı alma
Orijinal komut dosyanızdaki ilk birkaç hata bu satırdan kaynaklanıyor:
set sourcefile to name of every file of sourcefilepath ¬
whose name ends with "DK.xlsx"
(Okunabilirlik için kodu iki satıra ayırdım; bu, AppleScript'in komutları nasıl yürüttüğünü etkilemez.)
▸ Öncelikle, bu komutun dosya ve klasör nesnelerini işleyebilecek bir uygulamaya gönderilmesi gerekir. Sahip olduğunuz iki seçenek, Finder ve Sistem Olaylarıdır . Bulucu uygundur ve en çok dosya komutları için kullanılır. Finder'a bir komut göndermek için tell
, satırın başına bir cümle eklemeniz yeterlidir :
tell application "Finder" to set sourcefile to ¬
name of every file of folder sourcefilepath ¬
whose name ends with "DK.xlsx"
Ayrıca , değişkenin önüne sourcefilepath
nesne belirteci ekleyerek yaptığım bir klasör nesnesi olduğunu da belirtmeniz gerekir folder
.
Stated Belirtildiği gibi sorunuz, seçtiğiniz AppleScript değişken adıyla birlikte, tek bir dosyanın açılmasını istediğinizi belirtir. Ancak, henüz aradığımız komut Finder'a bildirmesini sağlar every file
; bu, tek bir öğe yerine her zaman bir öğe listesi (her zaman yalnızca bir öğe içeren bir liste olsa da) döndürür . İsimleri "DK.xlsx" ile biten birden fazla dosya varsa, hepsi bu listeye geri dönecektir. O kullanarak dosyaları açmadan geldiğinde bu sorunlara neden olur Excel 'in open workbook
yalnızca komut deyimi için tek bir dosya işleyebilir komutu.
Eğer "DK.xlsx" ile biten tek dosya adı var oldukça eminseniz, o zaman değiştirebilir every
için first
:
tell application "Finder" to set sourcefile to ¬
the name of the first file of folder sourcefilepath ¬
whose name ends with "DK.xlsx"
( the
Daha okunaklı hale getirmek için bazı terimleri önceden ekledim; AppleScript var olan veya bulunmadan mutlu bir şekilde başa çıkıyor the
.)
Diğer husus, open workbook
dosyanın tam yolunun belirtilmesini gerektirmesidir. Bununla birlikte, Finder'ın sadece name
dosya (lar) ı döndürmesini talep ederek , yalnızca dosya yollarına yol isimleri verilmez. Tam yolu almak için, dosyanın name
özellik isteğini kaldırın ve bunun yerine metne zorlayabileceğiniz dosya nesnesini alın:
tell application "Finder" to set sourcefile to ¬
(the first file of folder sourcefilepath ¬
whose name ends with "DK.xlsx") as text
▸ Gerçekten de, “DK” ekinde biten birden fazla dosyayı almak istediğin ortaya çıkarsa, o zaman dosya nesnelerinin listesini bir zorunluluk haline getirmek için elinden gelenin en iyisini yap alias list
. Bu, eski open
komut yerine open workbook
birçok komutu tek bir komutla açmanızı sağlayan çoklu dosya takma adlarının bir listesini kabul edebileceği için standart komutu kullanabiliriz .
tell application "Finder" to set sourcefile to ¬
(every file of folder sourcefilepath ¬
whose name ends with "DK.xlsx") as alias list
Dosyaları Excel'de açma
Hangi Microsoft Excel sürümünü kullandığınızı söylemediniz , ki bu uygun bir bilgi olabilir. 2009'dan itibaren bu forum sorusu, open workbook
komutu kullanırken sorun yaşadığını bildiren bir kullanıcıdan geliyor .
▸ AMA ... komut şimdilik varsayalım edecek yalnızca tek bir dosyayı açmak istediklerini sürümü ile çalışırlar ve. Sahip olduğunuz sözdiziminin hepsi doğru ve tam dosya yolunu almak için yukarıda bahsettiğim ayar open workbook
komutun hatalı bir dosya başvurusu nedeniyle hata atmasını engelleyecektir . Stilistik bir not: İfadeyi tell
ve open workbook
komutu tek bir satıra yazabilir , sonra end tell
satırı silebilirsiniz :
tell application "Microsoft Excel" to open workbook workbook file name sourcefile
Hiç kimse bir diğerinden daha iyi değil, bu yüzden kişisel bir seçim.
▸ Yukarıda belirtilen bir hatalı çalışma bildiren forum yazısı open workbook
, standart open
komutu kullanırken de aynı sorunu gösterdi . Ancak, bu Yığın Taşması postası olası nedeni sağlar ve bu open
komutun, komutun çalışmayacağı yerlerde çalışacağına dair güvence verir open workbook
.
Temel olarak, Finder uygulamasının açıkça bir olarak belirtilmesi gereken bir klasör nesnesine ihtiyaç duyduğu şekilde folder
, Excel'in de dosya nesnesinin açıkça file
(veya alias
) olduğu belirtilmesi gerekir :
tell application "Microsoft Excel" to open file sourcefile
open
Command Bu komutun avantajı, birçok dosyayı aynı anda açmak için takma ad listelerini kabul edebilmesidir. Bu nedenle, birden fazla dosya alan Finder komutunun sürümünü tutmaya karar verirseniz alias list
, daha sonra bu şekilde kullanabileceğiniz bir baskı uyguladığınızdan emin olun :
tell application "Microsoft Excel" to open sourcefile
file
Değişken sourcefile
zaten doğru tipte olduğundan, birden fazla dosyayı açarken nesne belirticisinin bulunmadığını unutmayın alias list
.
Yorumları kapatma
Başlangıçta sağladığım betiğin son sürümleri, burada ayrıntılı olarak verdiğim değişiklikleri uygulamayı nasıl seçtiğim konusunda biraz farklı. Ayrıca, bir dosyanın bulunamaması durumunda bir hata yapıp kodun hatalı olup olmadığını merak etmenize yol açabilecek bazı temel hata işlemlerini eklemenin akıllıca olduğunu hissettim.
Dosyanın Excel'de başarıyla açıldığını ancak diğer uygulamaların arkasına gizlenmiş arka planda kaldığını tespit ederseniz, Excel'i ön plana getirmek ve odaklanmış uygulama yapmak için bu komutu betiğe ekleyebilirsiniz :
tell application "Microsoft Excel" to activate
veya — onu mevcut Excel komutlarıyla birleştirmek :
tell application "Microsoft Excel"
activate
open file sourcefile
end tell
Eğer açıklığa kavuşturulmuş bir şeye ihtiyacınız olursa veya bununla ilgili başka küçük sorularınız varsa, bir yorum bırakın ve size geri döneceğim. Bunu yararlı buluyorsanız veya sorununuzu çözerse, bu cevabı veya daha faydalı olduğunu gösteren başka bir soruyu seçmeyi düşünün, böylece diğer forum ziyaretçilerinin bu sorunun çözüldüğünü bilmeleri ve benzer bir sorun yaşarlarsa bundan yararlanmaları önerilir.