Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.24 KB | None | 0 0
  1. $objMissingValue = [System.Reflection.Missing]::Value
  2. [void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms");
  3.  
  4. # 指定した日付が平日かどうかを表す論理値を返す
  5. function IsWeekday($date)
  6. {
  7. $result = $true
  8.  
  9. switch((Get-Date $date).DayOfWeek)
  10. {
  11. 'Sunday' {$result = $false}
  12. 'Saturday' {$result = $false}
  13. }
  14.  
  15. $result
  16. }
  17.  
  18. # 指定した日付の前営業日を返す(祝日考慮なし)
  19. function Get-PreviousWeekday($date)
  20. {
  21. $date = $date.AddDays(-1)
  22. while(!(IsWeekday($date)))
  23. {
  24. $date = $date.AddDays(-1)
  25. }
  26. $date
  27. }
  28.  
  29. # 指定した日付の翌営業日を返す(祝日考慮なし)
  30. function Get-NextWeekday($date)
  31. {
  32. $date = $date.AddDays(1)
  33. while(!(IsWeekday($date)))
  34. {
  35. $date = $date.AddDays(1)
  36. }
  37. $date
  38. }
  39.  
  40. function CreateMail($title, $body, $sendto, $replaceTable)
  41. {
  42. #文字列置換
  43. foreach ($item in $replaceTable.GetEnumerator())
  44. {
  45. $title = $title -creplace ("\{" + $item.Key + "\}"), $item.Value
  46. $body = $body -creplace ("\{" + $item.Key + "\}"), $item.Value
  47. }
  48.  
  49. #Outlook Mail出力
  50. $outlook = New-Object -comObject Outlook.Application
  51. $mail = $outlook.CreateItem(0)
  52. $mail.BodyFormat = 2
  53. $mail.Subject = $title
  54. $mail.HtmlBody = $body
  55. $mail.To = $sendto
  56. $mail.save()
  57. }
  58.  
  59. #フィルター作成
  60. #順序を崩すと作成できないので、編集時は注意
  61. function CreateFilter
  62. {
  63. $date=@{}
  64. $date["+0"] =(Get-Date ((Get-Date).AddDays(0)) -format "yyyy/MM/dd 00:00:00")
  65. $date["+1"] =(Get-Date ((Get-Date).AddDays(1)) -format "yyyy/MM/dd 00:00:00")
  66. $date["+2"] =(Get-Date ((Get-Date).AddDays(2)) -format "yyyy/MM/dd 00:00:00")
  67. $date["wd+2"]=(Get-Date (Get-NextWeekday(Get-NextWeekday(Get-Date))) -format "yyyy/MM/dd 00:00:00")
  68.  
  69. [void]$project.FilterEdit("前日分",$true, $true , $true , $true, $objMissingValue, "達成率" , $objMissingValue , "より小さい", "100%" , "かつ" , $true, $true)
  70. [void]$project.FilterEdit("前日分",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "終了日" , "より小さい", $date["+0"] , "かつ" , $true, $true)
  71. [void]$project.FilterEdit("当日分",$true, $true , $true , $true, $objMissingValue, "達成率" , $objMissingValue , "より小さい", "100%" , "かつ" , $true, $true)
  72. [void]$project.FilterEdit("当日分",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "終了日" , "より小さい", $date["+1"] , "かつ" , $true, $true)
  73. [void]$project.FilterEdit("翌日分",$true, $true , $true , $true, $objMissingValue, "達成率" , $objMissingValue , "より小さい", "100%" , "かつ" , $true, $true)
  74. [void]$project.FilterEdit("翌日分",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "開始日" , "以上" , $date["+1"] , "かつ" , $true, $true)
  75. [void]$project.FilterEdit("翌日分",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "終了日" , "より小さい", $date["wd+2"], "かつ" , $true, $true)
  76. [void]$project.FilterEdit("仕掛中",$true, $true , $true , $true, $objMissingValue, "達成率" , $objMissingValue , "より小さい", "100%" , "かつ" , $true, $true)
  77. [void]$project.FilterEdit("仕掛中",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "開始日" , "より小さい", $date["+1"] , "かつ" , $true, $true)
  78. [void]$project.FilterEdit("仕掛中",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "サマリー タスク", "と等しい" , "いいえ" , "かつ" , $true, $true)
  79. [void]$project.FilterEdit("仕掛中",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "達成率" , "より大きい", "0%" , "または", $true, $true)
  80. [void]$project.FilterEdit("仕掛中",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "達成率" , "より小さい", "100%" , "かつ" , $true, $true)
  81. [void]$project.FilterEdit("仕掛中",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "開始日" , "以上" , $date["+1"] , "かつ" , $true, $true)
  82. [void]$project.FilterEdit("仕掛中",$true, $false, $false, $true, $objMissingValue, $objMissingValue, "サマリー タスク", "と等しい" , "いいえ" , "かつ" , $true, $true)
  83. }
  84.  
  85. #プロジェクトファイルオープン
  86. function OpenProject($MppPath)
  87. {
  88. $msprj = New-Object -comObject MSProject.Application
  89. $msprj.Visible = $true
  90. [void]$msprj.FileOpen($MppPath,$true,0,$true,"","",$false,"","","MSProject.mpp.9","",4)
  91. $msprj
  92. }
  93.  
  94. # クリップボード経由でタスクリスト取得
  95. function GetFilterTasks($filter)
  96. {
  97. # フィルター適用
  98. [void]$project.FilterApply($filter)
  99. [void]$project.OutlineShowAllTasks()
  100.  
  101. # フィルター適用したタスクリストを全て選択
  102. [void]$project.SelectTaskColumn("アウトライン番号",8,$false,$false)
  103. [void]$project.Font("MS Pゴシック", 10, $false, $false, $false, [Microsoft.Office.Interop.MSProject.PjColor]::pjBlack, $false)
  104.  
  105. # タスクを赤文字にする
  106. # 未着手タスクを青文字にする
  107. $row = 1
  108. $rows_task = @()
  109. $rows_nostart = @()
  110. foreach ($task in $project.ActiveSelection.Tasks)
  111. {
  112. if ($task.Summary -eq $false)
  113. {
  114. if (((Get-Date $task.Start -format "yyyy/MM/dd") -eq (Get-Date -format "yyyy/MM/dd")) -and ($task.PercentComplete -eq 0))
  115. {
  116. $rows_nostart += $row
  117. }
  118. else
  119. {
  120. $rows_task += $row
  121. }
  122. }
  123.  
  124. $row = $row + 1
  125. }
  126.  
  127. foreach ($row in $rows_task)
  128. {
  129. [void]$project.SelectRow($row, $false, 0, $false, $false)
  130. [void]$project.Font("MS Pゴシック", 10, $true, $false, $false, [Microsoft.Office.Interop.MSProject.PjColor]::pjRed, $false)
  131. }
  132. foreach ($row in $rows_nostart)
  133. {
  134. [void]$project.SelectRow($row, $false, 0, $false, $false)
  135. [void]$project.Font("MS Pゴシック", 10, $true, $false, $false, [Microsoft.Office.Interop.MSProject.PjColor]::pjGreen, $false)
  136. }
  137.  
  138. # クリップボード経由でタスクリスト取得
  139. [void]$project.SelectTaskColumn("アウトライン番号", 8, $false, $false)
  140. [void]$project.EditCopy()
  141. $stream = [System.Windows.Forms.Clipboard]::GetData("Html Format")
  142. if ($stream -eq $null)
  143. {
  144. "全て完了"
  145. }
  146. else
  147. {
  148. $reader = New-Object System.IO.StreamReader($stream)
  149.  
  150. # 余計な行を先読みして除去
  151. foreach ($i in 1..6) { [void]$reader.ReadLine() }
  152.  
  153. $reader.ReadToEnd()
  154. }
  155. }
  156.  
  157. function Get-MSProjectTasks($MpjPath, $filters)
  158. {
  159. $resTable=@{}
  160.  
  161. # プロジェクトファイルオープン
  162. $project=OpenProject -MppPath $MpjPath
  163.  
  164. # フィルター作成
  165. CreateFilter
  166.  
  167. # フィルターかけてクリップボード経由で表取得
  168. foreach($key in $filters.Keys)
  169. {
  170. $resTable[$key]=GetFilterTasks -filter $filters[$key]
  171. }
  172.  
  173. #プロジェクトファイルクローズ
  174. [void]$project.FileClose(0)
  175. [void]$project.Quit()
  176.  
  177. $resTable
  178. }
  179.  
  180. function CreateProjectMail($config)
  181. {
  182. $table=@{}
  183.  
  184. # 置換文字列のテーブル生成
  185. foreach($item in $config.config.replacetable.replace)
  186. {
  187. $table[$item.key]=$item.value
  188. }
  189. $table["Now"]=Get-Date -format "M/d H:mm"
  190. $table["Yesterday"]=Get-Date (Get-PreviousWeekday(Get-Date)) -format "M/d(ddd)"
  191. $table["Today"]=Get-Date ((Get-Date).AddDays(0)) -format "M/d(ddd)"
  192. $table["Tomorrow"]=Get-Date (Get-NextWeekday(Get-Date)) -format "M/d(ddd)"
  193.  
  194. # Microsoft Projectの読み込み設定
  195. foreach($item in $config.config.msprojects.project)
  196. {
  197. $table[$item.key+"."+"name"]=$item.name
  198. $table[$item.key+"."+"path"]=$item.projectpath
  199.  
  200. $_filters=@{}
  201. foreach($keyValue in $item.filter)
  202. {
  203. $_filters[$keyValue.key]=$keyValue.value
  204. }
  205.  
  206. $taskTable=(Get-MSProjectTasks -MpjPath $item.projectpath -filters $_filters)
  207. foreach($key in $taskTable.keys)
  208. {
  209. $table[$item.key+"."+$key]=$taskTable[$key]
  210. }
  211. }
  212.  
  213. CreateMail -title $config.config.template.title -body (Get-Content (Join-Path $config.config.CurrentDir $config.config.template.htmlbody)) -sendto $config.config.template.sendto -replaceTable $table
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement