Add weekbogo.ps1
This commit is contained in:
213
weekbogo.ps1
Normal file
213
weekbogo.ps1
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
# 실행시 권한 및 파일 서명관련 문제 생기면 실행 정책 변경(수동실행)
|
||||||
|
# Set-ExecutionPolicy Unrestricted
|
||||||
|
|
||||||
|
# 필요한 어셈블리 로드
|
||||||
|
Add-Type -AssemblyName System.Drawing
|
||||||
|
|
||||||
|
# 날짜 가져오기
|
||||||
|
$today = Get-Date
|
||||||
|
|
||||||
|
# 이번 주 토요일
|
||||||
|
$this_week_saturday = $today.AddDays((6 - $today.DayOfWeek.value__) % 7)
|
||||||
|
|
||||||
|
# 이번 주 월요일
|
||||||
|
$this_week_monday = $this_week_saturday.AddDays(-5)
|
||||||
|
|
||||||
|
# 저번 주 토요일
|
||||||
|
$last_week_saturday = $this_week_saturday.AddDays(-7)
|
||||||
|
|
||||||
|
# 파일 경로 및 시트명
|
||||||
|
$file_path = 'C:\Users\LHK\OneDrive - ks.ac.kr\주간보고\'
|
||||||
|
$file_writer = '이호경'
|
||||||
|
$file_prefix = '_주간보고_'
|
||||||
|
$file_ext = '.xlsx'
|
||||||
|
|
||||||
|
$this_week_file_path = Join-Path $file_path ($file_writer + $file_prefix + $this_week_saturday.ToString("yyyyMMdd") + $file_ext)
|
||||||
|
$last_week_file_path = Join-Path $file_path ($file_writer + $file_prefix + $last_week_saturday.ToString("yyyyMMdd") + $file_ext)
|
||||||
|
|
||||||
|
$plan_sheet_name = $file_writer
|
||||||
|
$commute_sheet_name = $file_writer + '_출퇴근'
|
||||||
|
|
||||||
|
# 달력 현재 1달전 2달전
|
||||||
|
$calendar_this_month = 'B1:E33'
|
||||||
|
$calendar_month_1_ago = 'G1:J33'
|
||||||
|
$calendar_month_2_ago = 'L1:O33'
|
||||||
|
|
||||||
|
# 저번달 달력 이동 거리(1당 1셀)
|
||||||
|
$calendar_move_right = 5
|
||||||
|
$calendar_move_bottom = 0
|
||||||
|
|
||||||
|
# 1일이 시작 되는 row
|
||||||
|
$calendar_start_row = 3
|
||||||
|
|
||||||
|
# 셀 채우기 색상
|
||||||
|
$white = 16777215 # RGB(255, 255, 255)
|
||||||
|
$grey = 15132390 # RGB(230, 230, 230)
|
||||||
|
|
||||||
|
# 금주, 차주계획 내용범위
|
||||||
|
$this_week_plan = 'B7:B18'
|
||||||
|
$progress = 'C7:C18'
|
||||||
|
$next_week_plan = 'E7:E18'
|
||||||
|
|
||||||
|
function Cell-Move-Range {
|
||||||
|
param (
|
||||||
|
$worksheet,
|
||||||
|
$cell_range,
|
||||||
|
$rows,
|
||||||
|
$cols
|
||||||
|
)
|
||||||
|
|
||||||
|
$range = $worksheet.Range($cell_range)
|
||||||
|
$range.Copy() | Out-Null
|
||||||
|
$destination = $worksheet.Cells($range.Row + $rows, $range.Column + $cols)
|
||||||
|
$worksheet.Paste($destination)
|
||||||
|
}
|
||||||
|
|
||||||
|
function Update-Calendar {
|
||||||
|
$excel = $null
|
||||||
|
try {
|
||||||
|
$excel = New-Object -ComObject Excel.Application
|
||||||
|
$excel.Visible = $false
|
||||||
|
$workbook = $excel.Workbooks.Open($this_week_file_path)
|
||||||
|
$worksheet = $workbook.Worksheets.Item($commute_sheet_name)
|
||||||
|
|
||||||
|
$this_month = ' ' + $this_week_saturday.Year + '/' + $this_week_saturday.Month
|
||||||
|
|
||||||
|
# 월 변경시 기본 달력 처리
|
||||||
|
$month = $worksheet.Range($calendar_this_month).Cells(1,1).Text
|
||||||
|
if ($month -ne $this_month) {
|
||||||
|
# 전월 달력 이동
|
||||||
|
Cell-Move-Range $worksheet $calendar_month_1_ago $calendar_move_bottom $calendar_move_right
|
||||||
|
Cell-Move-Range $worksheet $calendar_this_month $calendar_move_bottom $calendar_move_right
|
||||||
|
$worksheet.Range($calendar_this_month).Cells(1,1).Value = $this_month
|
||||||
|
|
||||||
|
# 당월 날짜 채움
|
||||||
|
$first_day = Get-Date -Year $this_week_saturday.Year -Month $this_week_saturday.Month -Day 1
|
||||||
|
$last_day = $first_day.AddMonths(1).AddDays(-1)
|
||||||
|
|
||||||
|
$insert_range = $worksheet.Range($calendar_this_month)
|
||||||
|
for ($row = $calendar_start_row; $row -le $insert_range.Rows.Count; $row++) {
|
||||||
|
for ($col = 1; $col -le $insert_range.Columns.Count; $col++) {
|
||||||
|
$cell = $insert_range.Cells($row, $col)
|
||||||
|
$cell.Value = $null
|
||||||
|
$cell.Interior.Color = $white
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($i = 0; $i -lt $last_day.Day; $i++) {
|
||||||
|
$insert_day = $first_day.AddDays($i)
|
||||||
|
|
||||||
|
$insert_row = $insert_range.Rows($i + $calendar_start_row)
|
||||||
|
$insert_row.Cells(1, 1).Value = $insert_day.ToString("yyyy-MM-dd")
|
||||||
|
if ($insert_day.DayOfWeek -eq 'Sunday') {
|
||||||
|
$insert_row.Interior.Color = $grey
|
||||||
|
} else {
|
||||||
|
$insert_row.Interior.Color = $white
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$workbook.Save()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Update-Calendar 함수에서 오류 발생: $_"
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if ($workbook) { $workbook.Close() }
|
||||||
|
if ($excel) {
|
||||||
|
$excel.Quit()
|
||||||
|
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Ready-To-Write {
|
||||||
|
$excel = $null
|
||||||
|
try {
|
||||||
|
$excel = New-Object -ComObject Excel.Application
|
||||||
|
$excel.Visible = $false
|
||||||
|
$workbook = $excel.Workbooks.Open($this_week_file_path)
|
||||||
|
$worksheet = $workbook.Worksheets.Item($plan_sheet_name)
|
||||||
|
|
||||||
|
$worksheet.Range("B4").Value2 = "업무기간 : $($this_week_monday.ToString('yyyy.MM.dd')) ~ $($this_week_saturday.ToString('yyyy.MM.dd'))"
|
||||||
|
$worksheet.Range("C4").Value2 = "작 성 일 : $($this_week_saturday.ToString('yyyy.MM.dd'))"
|
||||||
|
|
||||||
|
$value_arr = @()
|
||||||
|
$next_week_range = $worksheet.Range($next_week_plan)
|
||||||
|
foreach ($cell in $next_week_range.Cells) {
|
||||||
|
if ($cell.Value2 -ne $null) {
|
||||||
|
$value_arr += $cell.Value2
|
||||||
|
}
|
||||||
|
$cell.Value2 = $null
|
||||||
|
}
|
||||||
|
|
||||||
|
$progress_range = $worksheet.Range($progress)
|
||||||
|
foreach ($cell in $progress_range.Cells) {
|
||||||
|
$cell.Value2 = $null
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($value_arr.Count -gt 0) {
|
||||||
|
$this_week_range = $worksheet.Range($this_week_plan)
|
||||||
|
$i = 0
|
||||||
|
foreach ($cell in $this_week_range.Cells) {
|
||||||
|
if ($i -lt $value_arr.Count) {
|
||||||
|
if ($value_arr[$i] -ne $null) {
|
||||||
|
$value = $value_arr[$i]
|
||||||
|
Write-Host "Value to assign: $value"
|
||||||
|
|
||||||
|
# 값을 문자열로 명시적 변환
|
||||||
|
$stringValue = [string]$value
|
||||||
|
Write-Host "String value to assign: $stringValue"
|
||||||
|
|
||||||
|
# 값 할당
|
||||||
|
$cell.Value2 = $stringValue
|
||||||
|
|
||||||
|
# 할당 직후 값 확인
|
||||||
|
$assignedValue = $cell.Value2
|
||||||
|
Write-Host "Assigned value in cell: $assignedValue"
|
||||||
|
|
||||||
|
if ($assignedValue -eq $null -or $assignedValue -eq '') {
|
||||||
|
Write-Host "Assignment failed, trying alternative method"
|
||||||
|
$worksheet.Cells.Item($cell.Row, $cell.Column) = $stringValue
|
||||||
|
$assignedValue = $worksheet.Cells.Item($cell.Row, $cell.Column).Value2
|
||||||
|
Write-Host "Value after alternative assignment: $assignedValue"
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$cell.Value2 = $null # 남은 셀을 비웁니다
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$workbook.Save()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Ready-To-Write 함수에서 오류 발생: $_"
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if ($workbook) { $workbook.Close() }
|
||||||
|
if ($excel) {
|
||||||
|
$excel.Quit()
|
||||||
|
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script
|
||||||
|
try {
|
||||||
|
if (Test-Path $this_week_file_path) {
|
||||||
|
Remove-Item $this_week_file_path -Force
|
||||||
|
}
|
||||||
|
|
||||||
|
Copy-Item $last_week_file_path $this_week_file_path
|
||||||
|
|
||||||
|
Update-Calendar
|
||||||
|
Ready-To-Write
|
||||||
|
|
||||||
|
Write-Host "작업이 완료되었습니다."
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "메인 스크립트에서 오류 발생: $_"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user