เนื่องจากคุณใหม่กับ AppleScript และเนื่องจากสคริปต์ที่คุณให้มีข้อผิดพลาดพื้นฐานมากมายคำตอบนี้ค่อนข้างยาวเพราะฉันคิดว่าเหมาะสมที่จะอธิบายวิธีแก้ไขสคริปต์และสาเหตุข้อผิดพลาดเกิดขึ้นตั้งแต่แรก
อย่างไรก็ตามเพื่อประโยชน์ของผู้อ่านที่จะใช้TL; DRนี่คือสองเวอร์ชันของสคริปต์ในรูปแบบที่สมบูรณ์ของพวกเขาแต่ละไฟล์ที่ต่างกันในการค้นหาไฟล์และคำสั่งที่ส่งไปยังExcelเพื่อเปิด มัน / พวกเขา
Disclaimer: ฉันยังไม่ได้สามารถที่จะทดสอบอย่างเต็มที่สคริปต์ที่ผมไม่ได้เป็นเจ้าของสำเนาของโปรแกรม Microsoft Excel ผมมีสูตรตัวอย่างเหล่านี้ขึ้นอยู่กับรุ่นออนไลน์ของพจนานุกรม AppleScript หากคุณพบข้อผิดพลาดของสคริปต์ความคิดเห็นของคุณจะช่วยฉันแก้ไข
version รุ่นนี้ใช้open workbook
คำสั่งตามสคริปต์ต้นฉบับของคุณซึ่งยอมรับเฉพาะการอ้างอิงไฟล์เดียว ดังนั้นการค้นหาที่ดำเนินการจะส่งคืนไฟล์ใดไฟล์หนึ่งที่พบก่อนด้วยชื่อไฟล์ที่เหมาะสมซึ่งลงท้ายด้วย หมายเหตุ:ดูด้านล่างว่าทำไมคำสั่งExcelอาจใช้งานไม่ได้และทำไมฉันจึงให้สคริปต์เวอร์ชันที่สองในกรณีนี้:
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
version รุ่นนี้ใช้open
คำสั่งมาตรฐานที่รับอย่างน้อยหนึ่งวัตถุfile
หรือ alias
ใช้เวอร์ชันนี้หากคุณต้องการเปิดหลายไฟล์อย่างง่ายดายหรือสคริปต์เวอร์ชั่นด้านบนไม่สามารถเปิดไฟล์ได้:
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
③ภาคผนวก: สคริปต์ฉุกเฉิน:
ขอบคุณที่@ user3439894สำหรับการทดสอบสคริปต์เหล่านี้และรายงานพฤติกรรมแปลก ๆ จากMicrosoft Excelเกี่ยวกับวิธีการตอบสนองต่อopen
คำสั่งมาตรฐาน(ดูหัวข้อความคิดเห็นที่แนบมากับคำตอบนี้)
โดยพื้นฐานแล้วมันจะทำงานตามที่คาดไว้หากExcelยังไม่ได้ทำงานและจะเปิดหลายไฟล์ (ในพื้นหลัง) อย่างไรก็ตามหากExcelเปิดอยู่แล้วจะเปิดเพียงหนึ่งไฟล์จากรายการไฟล์ที่กำหนดและไฟล์ที่เลือกเปิดดูสุ่ม
ดังนั้นฉันจึงเพิ่มสคริปต์รุ่นที่สามนี้เป็นวิธีการที่สง่างามน้อยกว่าในการเปิดหลายไฟล์ แต่สิ่งหนึ่งที่จะรับมือกับปัญหาบุคลิกภาพของExcel :
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
แน่นอนว่าคุณสามารถลองและแทนที่open the sourcefile
ด้วยopen workbook workbook file name (sourcefile as text)
คำสั่งนั้นควรทำงานในเวอร์ชันของคุณ แต่ไม่เช่นนั้นคุณก็สามารถใช้งานopen
ได้
รายละเอียดโดยละเอียด
การดึงไฟล์ของคุณ
ข้อผิดพลาดเล็กน้อยแรกในสคริปต์ต้นฉบับของคุณเกิดขึ้นจากบรรทัดนี้:
set sourcefile to name of every file of sourcefilepath ¬
whose name ends with "DK.xlsx"
(ฉันแบ่งรหัสเป็นสองบรรทัดเพื่อให้สามารถอ่านได้ซึ่งจะไม่มีผลกับวิธีที่ AppleScript เรียกใช้งานคำสั่ง)
▸ประการแรกคำสั่งนี้จะต้องส่งไปยังแอปพลิเคชันที่สามารถจัดการวัตถุไฟล์และโฟลเดอร์ สองตัวเลือกที่คุณต้องมีการค้นหาและระบบกิจกรรม Finderเหมาะสำหรับการใช้งานกับคำสั่งไฟล์ทั่วไป ในการส่งคำสั่งไปยังFinderคุณเพียงเพิ่มส่วนtell
คำสั่งที่จุดเริ่มต้นของบรรทัด:
tell application "Finder" to set sourcefile to ¬
name of every file of folder sourcefilepath ¬
whose name ends with "DK.xlsx"
คุณต้องระบุว่าsourcefilepath
เป็นวัตถุในโฟลเดอร์ซึ่งฉันได้ทำไปแล้วโดยการเพิ่มตัวระบุวัตถุไว้folder
ด้านหน้าของตัวแปร
question คำถามของคุณตามที่ระบุไว้พร้อมกับชื่อตัวแปร AppleScript ที่คุณเลือกหมายความว่าคุณต้องการเปิดไฟล์เดียว อย่างไรก็ตามคำสั่งที่เราเพิ่งดูจะบอกให้Finder Finderได้รับevery file
ซึ่งจะส่งคืนรายการของรายการ (แม้ว่ามันอาจจะเป็นรายการที่มีเพียงหนึ่งรายการ) แทนที่จะเป็นรายการเดียว หากมีหลายไฟล์ที่ชื่อลงท้ายด้วย "DK.xlsx" ไฟล์เหล่านั้นทั้งหมดจะถูกส่งกลับในรายการนี้ นี้จะทำให้เกิดปัญหาเมื่อมันมาถึงการเปิดไฟล์โดยใช้คำสั่งของExcelopen workbook
ซึ่งสามารถจัดการได้เพียงหนึ่งไฟล์ต่อคำสั่งคำสั่ง
หากคุณแน่ใจว่ามีชื่อไฟล์เดียวเท่านั้นที่ลงท้ายด้วย "DK.xlsx" คุณสามารถเปลี่ยนevery
เป็นfirst
:
tell application "Finder" to set sourcefile to ¬
the name of the first file of folder sourcefilepath ¬
whose name ends with "DK.xlsx"
(ฉันนำหน้าข้อกำหนดบางข้อไว้ด้วยthe
เพื่อให้อ่านได้ง่ายขึ้น AppleScript ยินดีที่จะมีหรือไม่the
อยู่ด้วย)
ข้อควรพิจารณาอื่น ๆ คือopen workbook
ต้องการให้ระบุพา ธ เต็มไปยังไฟล์ อย่างไรก็ตามเมื่อขอให้Finderส่งคืนเฉพาะname
ไฟล์คุณจะได้รับชื่อไฟล์โดยไม่มีพา ธ เพื่อดึงข้อมูลพา ธ แบบเต็มให้ลบคำร้องขอสำหรับname
คุณสมบัติของไฟล์และแทนที่จะเรียกคืนอ็อบเจ็กต์ไฟล์ซึ่งคุณสามารถบีบอัดเป็นข้อความได้:
tell application "Finder" to set sourcefile to ¬
(the first file of folder sourcefilepath ¬
whose name ends with "DK.xlsx") as text
▸หากปรากฎว่าคุณต้องการกู้คืนไฟล์หลายไฟล์ที่ลงท้ายด้วยคำต่อท้าย "DK" จากนั้นจึงเป็นการดีที่สุดที่จะบังคับรายการของวัตถุไฟล์ให้เป็นalias list
(ซึ่งเป็นรายการของนามแฝง) นี่คือเพื่อให้เราสามารถใช้open
คำสั่งมาตรฐานแทนopen workbook
เนื่องจากเดิมสามารถยอมรับรายการของชื่อแทนไฟล์หลาย ๆ ไฟล์ทำให้คุณสามารถเปิดไฟล์จำนวนมากด้วยคำสั่งเดียว
tell application "Finder" to set sourcefile to ¬
(every file of folder sourcefilepath ¬
whose name ends with "DK.xlsx") as alias list
การเปิดไฟล์ในExcel
คุณไม่ได้พูดถึงรุ่นของMicrosoft Excel ที่คุณใช้ซึ่งอาจกลายเป็นข้อมูลที่เกี่ยวข้อง คำถามในฟอรัมนี้จากปี 2009 มาจากผู้ใช้ที่รายงานปัญหาเมื่อใช้open workbook
คำสั่ง
▸ แต่ ... สมมติว่าในตอนนี้คำสั่งจะทำงานกับเวอร์ชันของคุณและคุณต้องการเปิดไฟล์เพียงไฟล์เดียว ไวยากรณ์ตามที่คุณได้รับมันถูกต้องทั้งหมดและการปรับปรุงที่ฉันกล่าวถึงข้างต้นเพื่อดึงเส้นทางไฟล์แบบเต็มจะป้องกันopen workbook
คำสั่งจากการโยนข้อผิดพลาดเนื่องจากการอ้างอิงไฟล์ที่ไม่ดี หนึ่งสำนวนโวหาร: คุณสามารถเขียนtell
คำสั่งและopen workbook
คำสั่งในบรรทัดเดียวแล้วลบend tell
บรรทัด:
tell application "Microsoft Excel" to open workbook workbook file name sourcefile
ไม่มีแบบฟอร์มใดที่ดีไปกว่าแบบฟอร์มอื่นดังนั้นจึงเป็นตัวเลือกส่วนบุคคล
post โพสต์ฟอรั่มที่ฉันกล่าวถึงข้างต้นซึ่งรายงานopen workbook
คำสั่งการชำรุดยังอ้างถึงปัญหาเดียวกันเมื่อใช้open
คำสั่งมาตรฐาน แต่นี้โพสต์กองมากเกินให้สาเหตุและให้ความมั่นใจกับผมว่านี้open
คำสั่งจะทำงานที่open workbook
คำสั่งอาจจะไม่
โดยทั่วไปในทางเดียวกันว่าFinderโปรแกรมต้องวัตถุโฟลเดอร์ที่จะได้รับการระบุไว้อย่างชัดเจนว่าเป็นfolder
, Excelความต้องการวัตถุไฟล์ที่จะระบุไว้อย่างชัดเจนว่าเป็นfile
(หรือalias
):
tell application "Microsoft Excel" to open file sourcefile
benefit ประโยชน์ของopen
คำสั่งนี้คือสามารถรับรายการของนามแฝงเพื่อเปิดหลายไฟล์พร้อมกัน ดังนั้นหากคุณตัดสินใจที่จะเก็บเวอร์ชันของคำสั่งFinderที่ดึงข้อมูลหลายไฟล์ตรวจสอบให้แน่ใจว่าคุณได้บังคับให้มันเป็นไฟล์alias list
ซึ่งคุณสามารถใช้ดังนี้:
tell application "Microsoft Excel" to open sourcefile
หมายเหตุที่นี่ที่file
ระบุวัตถุจะขาดเมื่อเปิดไฟล์หลายเพราะตัวแปรที่มีอยู่แล้วของประเภทที่ถูกต้องคือsourcefile
alias list
การปิดความคิดเห็น
สคริปต์รุ่นสุดท้ายที่ฉันให้ไว้ที่จุดเริ่มต้นแตกต่างกันเล็กน้อยในวิธีที่ฉันเลือกที่จะใช้การเปลี่ยนแปลงที่ฉันมีรายละเอียดที่นี่ ฉันรู้สึกว่าควรรวมการจัดการข้อผิดพลาดพื้นฐานในกรณีที่ไม่พบไฟล์ซึ่งจะทำให้เกิดข้อผิดพลาดและอาจทำให้คุณสงสัยว่ารหัสผิด
หากคุณพบว่าไฟล์เปิดในExcel ได้สำเร็จแต่ไฟล์นั้นยังคงอยู่ในพื้นหลังที่ซ่อนอยู่หลังแอปพลิเคชันอื่นคุณสามารถเพิ่มคำสั่งนี้ลงในสคริปต์เพื่อให้Excelเข้าสู่เบื้องหน้าและทำให้แอปพลิเคชันเพ่งความสนใจ
tell application "Microsoft Excel" to activate
หรือ - รวมเข้ากับคำสั่งExcelที่มีอยู่:
tell application "Microsoft Excel"
activate
open file sourcefile
end tell
หากคุณต้องการคำชี้แจงใด ๆ นี้หรือหากคุณมีคำถามเล็กน้อยเกี่ยวกับเรื่องนี้โปรดแสดงความคิดเห็นและฉันจะติดต่อกลับ หากคุณพบว่ามีประโยชน์หรือแก้ไขปัญหาของคุณให้ลองเลือกคำตอบนี้หรือสิ่งอื่นที่พิสูจน์ว่ามีประโยชน์มากกว่าเพื่อให้ผู้เยี่ยมชมฟอรัมคนอื่นรู้ว่าปัญหานี้ได้รับการแก้ไขแล้วและสามารถได้รับประโยชน์จากปัญหานั้น ๆ