Applescript kullanarak belirli bir dizeyle biten bir Excel çalışma kitabı nasıl açılır


0

xlsxApplescript için yeniyim ve DK.xlsx gibi biten bir dosyayı açmaya çalışıyorum . Aşağıdaki kodu kullanarak denedim, ancak çalışmıyor. Neyi yanlış yapıyorum burada? Lütfen yardım et.

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

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

tell application "Microsoft Excel"

    open workbook workbook file name sourcefile

end tell

Neden Finder arama fonksiyonunu kullanmıyorsunuz?
Harcker,

Açmaya teşebbüs etmeden önce sourcefile, sourcefileneyin atandığını görmek için neden adını çıkarmaya çalışmıyorsunuz ? Bir pencere iletişim kutusu yeterli olur ve bu sadece hata ayıklama amaçlıdır.
Allan,

@nprabu Sıralamayı ayarladınız mı?
CJK

Yanıtlar:


2

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 openbir veya daha fazla kabul komutu fileveya aliasnesneleri. 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 sourcefileile 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 sourcefilepathnesne 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 workbookyalnı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 everyiçin first:

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

( theDaha 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 workbookdosyanın tam yolunun belirtilmesini gerektirmesidir. Bununla birlikte, Finder'ın sadece namedosya (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 openkomut yerine open workbookbirç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 workbookkomutu 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 workbookkomutun hatalı bir dosya başvurusu nedeniyle hata atmasını engelleyecektir . Stilistik bir not: İfadeyi tellve open workbookkomutu tek bir satıra yazabilir , sonra end tellsatı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 openkomutu kullanırken de aynı sorunu gösterdi . Ancak, bu Yığın Taşması postası olası nedeni sağlar ve bu openkomutun, 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

openCommand 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

fileDeğişken sourcefilezaten 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.


Bu bir Excel sürümü sorunu olabilir, ancak already Excel zaten açıkken, yalnızca dosyadaki dosyalardan birini açar listve ilk dosya değil. Excel hala açıldığında, listedeki bir dosyayı kapatırsanız ve komut dosyasını yeniden çalıştırırsanız, farklı bir dosyayı açar, ancak listedeki yalnızca bir dosyayı vb. Bu gerçekten garip bir davranış olarak ortaya çıkıyor. Bir Kullanarak repeat döngü üzerinde listbir çözümdür.
user3439894

1
@ user3439894 Bunu benim için test ettiğiniz için teşekkür ederiz. TextEdit ve Keynote gibi diğer uygulamalarla (hem Apple uygulamaları, hem de sizin aklınızdakileri) test ettim ve beklediğim ve yapmasını istediğim şeyi yaptı. Excel'in uymadığı bir utanç . Ben edeceğiz gibi görünüyor sahip bir kullanmak için repeatdöngü. Bu arada, Excel zaten açık değilken nasıl davranıyor ? Mı Excel ben ısrar bu uygulamalar biri activateilk ona?
CJK

Excel kapalıyken ve bir 3 dosya listesiyle test edildiğinde, her üçünü de açar ve Excel activatekullanılmadıkça arka plandadır .
user3439894

1
JSYK Güncellenmiş sürüm ③ ve opsiyonel "yerine open the source filesahip open workbook workbook file name (source file as text)eserler". Mükemmel bir cevap için +1!
user3439894

@CJK, Böyle ayrıntılı bir cevap için çok teşekkür ederim, bu çok yardımcı olur. Verdiğiniz üç seçeneği de test ettim ve beklendiği gibi çalışıyorlar. Excel 2016 sürümünü kullanıyorum. Tekrar teşekkürler.
nprabu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.