files
weekbogo_template_generator/weekbogo.ps1
2025-07-31 06:18:28 +00:00

213 lines
7.1 KiB
PowerShell

# 실행시 권한 및 파일 서명관련 문제 생기면 실행 정책 변경(수동실행)
# Set-ExecutionPolicy Remotesigned -Scope CurrentUser
# 필요한 어셈블리 로드
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 "메인 스크립트에서 오류 발생: $_"
}