2012-12-06 44 views
0

我已經設法將所有這些代碼現在整合在一起,只需要最後一步的工作。任何幫助將不勝感激。Applescript爲文件夾中的文件重複完整的腳本

我已經設置了這個腳本來打開文件夾中的.xlsx文件,更改日期,然後將其保存到另一個文件夾中。然後,它創建通過查找客戶端代碼(在Excel文件中找到)隨後查找這個代碼在Database.xlsx文件,並返回客戶端的電子郵件地址,並把它添加到「收件人」字段中的郵件郵件。然後它將新創建的PDF附加到這封郵件,我可以點擊併發送。

腳本將停止第一.xlsx文件被打開後,只是讓我可以檢查的細節之前,PDF的正確,並創建郵件。

我的問題是:如何讓這個過程重複在初始文件夾中的每個文件?我嘗試過重複功能,但無濟於事。

任何幫助將不勝感激。

謝謝。

--Complete script for updating invoice, saving (as PDF too in seperate folder) and e-mailing invoices 

--Select the first file in a folder and then repeat for the next 

set theFolder to POSIX path of (choose folder with prompt "Choose Folder containing .xlsx invoices") 
set theFolderList to list folder theFolder without invisibles 

repeat with x from 1 to count of theFolderList 
    set theFile to theFolder & item x of theFolderList 
    set theNewFile to theFolder & theFile 
    tell application "Microsoft Excel" 
     activate 
     open theFile 
     set ActiveClientCode to value of range ("B1") 
    end tell 


--Change date of one cell to date of next month 

tell application "Microsoft Excel" 
    activate 
    open "/Users/pienaar0/Documents/AdminAssist/" & ActiveClientCode & ".xlsx" 
    set d to value of cell ("A1") 
    set d to my MonthAdd(d) 
    set value of cell ("A1") to d 
end tell 

on MonthAdd(d) 
    set m to ((month of d as integer) + 1) 
    set ddd to day of d 
    if m > 12 then 
     set m to m - 12 
     set year of d to (year of d) + 1 
    end if 
    if {m} is in {4, 6, 9, 11} and ddd = 31 then --AppleScript treats "Apr 31" as May 1, 
     set day of d to 30 
    end if 
    set month of d to m 
    if m = 2 and month of d as integer = 3 then --AppleScript treats "Feb 31" as Mar 3, 
     set day of d to 1 -- Mar 1 
     set d to d - (1 * days) -- last day of Feb 
    end if 
    return d 
end MonthAdd 

property dialog_timeout : 36000 
display dialog "Make sure the invoice is correct before clicking OK" buttons {"OK"} giving up after dialog_timeout 
set the user_choice to the button returned of the result 


--Save document and PDF 
tell application "Microsoft Excel" 
    save active workbook 
    save active workbook in "Macintosh HD:Users:pienaar0:Documents:AdminAssistPDF:" & ActiveClientCode & ".pdf" as PDF file format 


end tell 

--Find e-mail address, and Name in Database (Check filepath and ranges) 

tell application "Microsoft Excel" 
    open "Users/pienaar0/Documents/Database.xlsx" 
    set searchRange to range ("D2:D5") 
    set foundRange to find searchRange what ActiveClientCode with match case 
    set fRow to first row index of foundRange 
    set ClientEmail to value of range ("C" & fRow as text) 
    set ClientFirstname to value of range ("A" & fRow as text) 
    (* do something with the foundRange *) 
end tell 

--Create e-mail 

tell application "Mail" 
    set theMessage to make new outgoing message with properties {visible:true, subject:"Your monthly invoice", content:"Dear " & ClientFirstname & ", 

I trust this mail finds you well? 

Please find attached your monthly invoice for your immediate consideration. 

Regards, 

AdminAssist 

"} 
    set message signature of theMessage to signature "Replies & Forwards" 
    delay 1 
    tell content of theMessage 
     make new attachment with properties {file name:"/Users/pienaar0/Documents/AdminAssist/PDF/" & ActiveClientCode & " Sheet1.pdf"} 
     tell theMessage 
      make new to recipient at end of to recipients with properties {address:ClientEmail} 
     end tell 
    end tell 
end tell 
end repeat 

回答

1

您需要將您的處理重複塊之外:

property dialog_timeout : 36000 
--Complete script for updating invoice, saving (as PDF too in seperate folder) and e-mailing invoices 
--Select the first file in a folder and then repeat for the next 

set theFolder to POSIX path of (choose folder with prompt "Choose Folder containing .xlsx invoices") 
tell application "System Events" to set theFolderList to name of every file of folder theFolder whose visible is true 

repeat with x from 1 to count of theFolderList 
    set theFile to theFolder & item x of theFolderList 
    set theNewFile to theFolder & theFile 
    tell application "Microsoft Excel" 
     activate 
     open theFile 
     set ActiveClientCode to value of range ("B1") 
    end tell 

    --Change date of one cell to date of next month 
    tell application "Microsoft Excel" 
     activate 
     open "/Users/pienaar0/Documents/AdminAssist/" & ActiveClientCode & ".xlsx" 
     set d to value of cell ("A1") 
     set d to my MonthAdd(d) 
     set value of cell ("A1") to d 
    end tell 

    display dialog "Make sure the invoice is correct before clicking OK" buttons {"OK"} giving up after dialog_timeout 
    set the user_choice to the button returned of the result 

    --Save document and PDF 
    tell application "Microsoft Excel" 
     save active workbook 
     save active workbook in "Macintosh HD:Users:pienaar0:Documents:AdminAssistPDF:" & ActiveClientCode & ".pdf" as PDF file format 
    end tell 

    --Find e-mail address, and Name in Database (Check filepath and ranges) 

    tell application "Microsoft Excel" 
     open "Users/pienaar0/Documents/Database.xlsx" 
     set searchRange to range ("D2:D5") 
     set foundRange to find searchRange what ActiveClientCode with match case 
     set fRow to first row index of foundRange 
     set ClientEmail to value of range ("C" & fRow as text) 
     set ClientFirstname to value of range ("A" & fRow as text) 
     (* do something with the foundRange *) 
    end tell 

    --Create e-mail 

    tell application "Mail" 
     set theMessage to make new outgoing message with properties {visible:true, subject:"Your monthly invoice", content:"Dear " & ClientFirstname & ", 

I trust this mail finds you well? 

Please find attached your monthly invoice for your immediate consideration. 

Regards, 

AdminAssist 

"} 
     set message signature of theMessage to signature "Replies & Forwards" 
     delay 1 
     tell content of theMessage 
      make new attachment with properties {file name:"/Users/pienaar0/Documents/AdminAssist/PDF/" & ActiveClientCode & " Sheet1.pdf"} 
      tell theMessage 
       make new to recipient at end of to recipients with properties {address:ClientEmail} 
      end tell 
     end tell 
    end tell 
end repeat 


on MonthAdd(d) 
    set m to ((month of d as integer) + 1) 
    set ddd to day of d 
    if m > 12 then 
     set m to m - 12 
     set year of d to (year of d) + 1 
    end if 
    if {m} is in {4, 6, 9, 11} and ddd = 31 then --AppleScript treats "Apr 31" as May 1, 
     set day of d to 30 
    end if 
    set month of d to m 
    if m = 2 and month of d as integer = 3 then --AppleScript treats "Feb 31" as Mar 3, 
     set day of d to 1 -- Mar 1 
     set d to d - (1 * days) -- last day of Feb 
    end if 
    return d 
end MonthAdd 
+0

哦,是謝謝!我會嘗試這一點,但那肯定是一個問題。非常感謝! – coachpienaar

+0

它完美的工作。 – coachpienaar

+0

高興地幫助:) – adayzdone

相關問題