기술 · 실용 가이드
Teams 참석 보고서를 하나의 통합 문서로 합치는 방법
영문 Teams 참석 CSV가 들어 있는 폴더를 통합하면서 참석자 이름, 모임 정보, 원래 참석 시간과 모든 입력 파일의 기록을 보존하는 방법을 알아보세요.

이 보고서들을 합치려면 각 보고서의 Participants 표에 해당 보고서의 Summary 필드를 붙인 다음 행을 하나로 모으면 됩니다. 아래 변환 도구는 지원 형식의 영문 Teams CSV 파일이 담긴 폴더를 처리해 Participants, Meetings, Files 시트가 있는 통합 문서 하나를 만듭니다.
결과에는 이름, 원래의 참가·퇴장 값, 참석 시간, 원본 파일명이 함께 담깁니다. 원래의 참석자 값과 요약 값을 담은 audit.json도 생성되므로 통합 문서를 입력 파일과 대조할 수 있습니다. Python 3.11 또는 그보다 새로운 지원 버전과 데스크톱 컴퓨터의 터미널이 필요합니다. 변환 도구는 다운로드한 파일을 사용자의 컴퓨터에서 처리합니다.
보고서가 이 형식에 맞는지 확인하기
보고서 하나를 텍스트로 열거나 변경 사항을 저장하지 않은 채 살펴보세요. 이 버전은 섹션 이름이 1. Summary, 2. Participants, 3. In-Meeting Activities 순서로 나오는 형식을 전제로 합니다. 이 형식은 별도로 공개된 원본 보고서와 대조해 확인했습니다. 지원하는 입력 형식을 정해 둔 것이며, 모든 Teams 내보내기 파일의 구조가 같다는 뜻은 아닙니다.
Summary에는 Meeting title, Attended participants, Start time, End time, Meeting duration, Average attendance time이 있어야 합니다. 순서는 달라도 되며, 추가 요약 필드도 보존됩니다. Meeting title의 값은 비어 있어도 되지만, 나머지 필수 값 다섯 개는 모두 있어야 합니다.
Participants의 머리글에는 정확히 다음 일곱 필드가 이 순서대로 있어야 합니다: Name, First Join, Last Leave, In-Meeting Duration, Email, Participant ID (UPN), Role. Email과 Participant ID (UPN)의 값은 비어 있어도 됩니다. 나머지 필수 참석자 값은 모두 있어야 합니다.
Activities의 머리글에는 정확히 다음 여섯 필드가 이 순서대로 있어야 합니다: Name, Join Time, Leave Time, Duration, Email, Role. 변환 도구는 이 섹션의 구조를 검사하지만, 그 안의 개별 참가 구간 행을 Participants에 추가하지 않습니다. 바이트 순서 표시(BOM)가 있는 UTF-8 및 UTF-16 파일과 BOM이 없는 UTF-8 파일을 지원합니다. 전체 구조가 맞으면 탭, 쉼표 또는 세미콜론으로 구분된 파일을 처리할 수 있습니다.
합칠 보고서를 한 폴더에 모으기
Teams-Month라는 작업 폴더와 그 안에 reports라는 하위 폴더를 만드세요. 합치려는 CSV 파일을 reports 바로 아래에 넣으세요. 하위 폴더 안은 검색하지 않습니다. 다운로드한 원본은 보관하세요. 스프레드시트 프로그램에서 파일을 열고 다시 저장하면 변환 도구로 처리하기도 전에 날짜, 인코딩 또는 다른 값이 바뀔 수 있습니다.
포함하려는 각 모임 회차에 대해 최종 보고서 하나를 선택하세요. Microsoft는 되풀이 모임의 각 회차마다 별도 보고서를 제공합니다. 파일이 아직 없고 이끌이 또는 공동 이끌이 권한이 있다면, 지난 모임의 채팅을 열고 Attendance를 선택해 CSV를 다운로드하세요. 월별 자료를 모을 때는 모임 종료 후의 보고서를 사용하세요.
선택한 파일들이 이번 처리 대상 묶음이 됩니다. 같은 모임의 보고서 두 개라도 내용이 다를 수 있으므로, 파일 지문이 다르다고 해서 서로 다른 모임 회차라는 뜻은 아닙니다. 변환 도구는 보고서의 여러 수정본 중 어느 것을 남기려 했는지 대신 판단하지 않습니다.
변환 도구를 다운로드하고 실행하기
필요하다면 https://www.python.org/downloads/ 에서 지원되는 Python 3 버전을 설치하세요. Windows에서는 PowerShell을, macOS에서는 Terminal을 여세요. cd 뒤에 따옴표로 감싼 전체 경로를 입력해 Teams-Month 작업 폴더로 이동하세요. 예를 들어 Windows의 cd "C:\path\to\Teams-Month" 또는 macOS의 cd "/path/to/Teams-Month"에서 예시 경로를 실제 경로로 바꾸면 됩니다.
계속하기 전에 인터프리터를 확인하세요. Windows에서는 python --version을, macOS에서는 python3 --version을 실행하세요. Python 3.11 이상이 표시되어야 합니다. 명령을 찾을 수 없다고 나오면 공식 설치 과정을 마친 뒤 터미널을 다시 여세요. 인터프리터가 없는 문제는 보고서 형식 오류와 별개입니다.
Windows에서는 다음 PowerShell 명령으로 버전 1 도구를 다운로드하세요. 이 명령은 소스 파일을 저장하며, 실행하지는 않습니다:
Invoke-WebRequest -UseBasicParsing -Uri "https://watchatease.com/guide-tools/merge-teams-attendance-v1.py" -OutFile "merge-teams-attendance-v1.py"
macOS에서는 다음 명령으로 같은 파일을 다운로드하세요:
curl --fail --location "https://watchatease.com/guide-tools/merge-teams-attendance-v1.py" --output "merge-teams-attendance-v1.py"
다운로드가 완료되면 Windows에서 다음 명령을 실행하세요. reports 폴더는 이미 있어야 하고, month-output은 아직 없어야 합니다:
python "merge-teams-attendance-v1.py" "reports" --output-dir "month-output"
macOS에서는 다음 명령을 실행하세요:
python3 "merge-teams-attendance-v1.py" "reports" --output-dir "month-output"
정상적으로 처리되면 month-output 안에 teams-attendance.xlsx와 audit.json이 생성되고, 참석자 행 수, 보존된 보고서 수, 정확히 같은 복사본으로 건너뛴 파일 수가 표시됩니다. 통합 문서를 열어 내용을 확인하세요. 나중에 다시 실행할 때는 month-output-2처럼 새로운 출력 이름을 선택하세요. 이 도구는 기존 디렉터리를 덮어쓰지 않습니다. 추가 Python 패키지가 필요 없으며, 보고서를 처리하는 동안 네트워크 요청을 보내지 않습니다.
통합 문서의 세 시트 읽기
Participants는 상세 데이터를 합친 표입니다. 처음 일곱 열에는 원래 참석자 필드가 보존됩니다. Source file과 Source SHA256은 입력 보고서를 식별하며, 그 뒤의 Summary:로 시작하는 열에는 해당 보고서의 모임 정보가 담깁니다. Source file을 필터링하면 보고서 하나의 내용을 볼 수 있고, Name이나 Email을 필터링하면 선택한 여러 보고서에 걸친 항목을 살펴볼 수 있습니다.
Meetings에는 보존된 보고서마다 한 행씩 있으며, 원본 정보, 참석자 행 수, 개수 비교 결과, Summary 값이 들어 있습니다. 이 시트의 행 수는 보존된 보고서 파일 수입니다. 포함하려는 각 모임 회차마다 보고서 하나를 선택했다면 유용한 모임 목록으로 쓸 수 있습니다.
Files에는 정확히 같은 복사본을 포함해 모든 입력 CSV가 기록됩니다. Status는 included 또는 exact_duplicate_skipped이며, Duplicate of는 복사본에 대응하는 보존된 파일을 나타냅니다. Participants rows와 Activities rows excluded를 보면 두 섹션이 각각 어떻게 처리되었는지 알 수 있습니다. Summary의 Attended participants 값이 십진수 숫자로만 이루어져 있으면 Count check에서 그 값과 Participants 행 수를 비교합니다.
audit.json에는 같은 파일 목록과 수치, 통합 문서의 지문이 기록됩니다. 여기에 원래 Participants 행과 순서가 유지된 Summary 키/값 쌍을 담은 retained_reports도 포함됩니다. 원본 CSV와 함께 보관하세요. 나중에 스프레드시트 프로그램에서 저장하면서 셀 값이나 줄바꿈 형식이 바뀌더라도, 입력값을 직접 확인할 수 있는 기록이 됩니다.
합계를 사용하기 전에 파일 묶음 확인하기
먼저 reports 바로 아래에 있는 CSV 파일 수를 세어 Files 시트 및 audit.json의 input_file_count와 비교하세요. 포함하려던 모든 파일에 해당하는 항목이 있어야 합니다. 정확히 같은 복사본도 Files에는 집계되지만, Participants나 Meetings에 추가 행을 만들지는 않습니다.
다음으로 Files에서 included만 필터링한 뒤, 별도의 작업용 사본에서 Participants rows의 개수 셀을 숫자로 변환하고 합산하세요. 또는 audit.json의 participant_rows_written을 사용해도 됩니다. 이 합계는 머리글을 제외한 Participants의 데이터 행 수와 같아야 합니다. 값을 보존하기 위해 통합 문서의 모든 셀은 처음에는 텍스트로 저장됩니다.
포함된 원본 파일마다 Summary 필드와 참석자 항목 하나를 원래 보고서와 대조하세요. 특히 이름, In-Meeting Duration, 해당 모임의 시작 값을 확인하세요. 비어 있는 모임 제목은 그대로 비어 있으므로 Source file이 맥락을 파악하는 데 도움이 됩니다.
Count check가 DIFFERS로 표시되어도 통합 문서는 열리고 데이터는 보존됩니다. 다만 해당 원본 보고서에서 불일치 원인을 확인해야 합니다. 개수가 일치한다는 것은 비교한 두 수치가 같다는 뜻일 뿐입니다. 각 행이 서로 다른 사람을 나타내는지, 원본 보고서가 완전한지까지 검증하는 것은 아닙니다.
날짜, 참석 시간, 반복되는 이름을 맥락에 맞게 해석하기
3/04/24 같은 값은 그 텍스트 그대로 남습니다. 변환 도구는 이것이 3월 4일인지 4월 3일인지 추측하지 않습니다. 별도의 분석용 사본에서 날짜 계산을 하기 전에 내보낸 파일의 날짜 표기 규칙을 확인하고, 원래 값이 담긴 열도 계속 보관하세요.
In-Meeting Duration은 보고서에 기록된 그대로 보존됩니다. 이 도구는 Last Leave에서 First Join을 빼거나, 활동 구간을 합산하거나, 출석 인정 기준을 적용하거나, 이수 인정 시간을 계산하지 않습니다. 그런 작업은 각기 별도의 가정이 필요한 추가 계산입니다. 이 통합 문서는 그 바탕이 되는 보고서 필드를 제공합니다.
이름, 이메일 또는 Participant ID (UPN)를 기준으로 행을 합치지 않습니다. 같은 표시 이름이 서로 다른 항목에 나올 수 있으며, 비어 있는 이메일은 그대로 비어 있습니다. 여러 모임 회차를 모으면 같은 사람이 여러 번 나타나는 것이 자연스러울 수 있습니다.
Microsoft는 원본 보고서 자체의 한계를 안내합니다. 대기실에서 입장이 허용되지 않은 사람과 보기 전용 참석자가 누락되는 경우 등이 이에 해당합니다. 다운로드한 파일을 통합해도 파일에 없는 정보를 복원할 수는 없습니다. 통합 문서는 이런 한계를 그대로 가진 보고서들을 정리한 자료로 사용하세요.
파일이 거부되는 경우
지원하지 않는 머리글, 누락된 섹션, 따옴표 형식이 잘못된 필드, 비어 있는 필수 값 또는 읽을 수 없는 파일이 있으면 해당 파일명을 알려 주는 오류가 발생합니다. 변환 도구는 출력을 생성하기 전에 파일 묶음을 검사합니다. 거부된 CSV를 알리지 않고 건너뛴 뒤 나머지 데이터를 완전한 결과로 표시하지 않습니다.
오류에 나온 파일을 위의 세 섹션 형식과 대조하세요. 실수로 다시 저장했거나 파일이 손상되었다면, 새 원본 내보내기 파일을 구할 수 있는 경우 그것을 사용하세요. 다른 제품의 보고서나 형식이 다른 보고서는 이 입력 폴더 밖에 보관하세요. 검사를 통과시키기 위해 익숙하지 않은 열 이름만 바꾸지는 마세요. 이름이 비슷해도 서로 다른 데이터를 뜻할 수 있습니다.
실제 보고서가 다른 언어나 구조를 사용한다면 이 도구는 지원하지 않습니다. 실제 형식에 맞춰 조정한 Power Query 변환을 대안으로 사용할 수 있습니다. Microsoft의 폴더 파일 결합 문서는 샘플 파일의 변환을 조건에 맞는 모든 파일에 적용하면서 원본 파일명을 유지하는 방법을 설명합니다.
출력 디렉터리 오류가 나면 새로운 저장 대상을 선택해야 하고, Python을 찾을 수 없다는 오류가 나면 인터프리터 설치를 해결해야 합니다. 어느 쪽도 보고서 내용을 바꿀 이유가 되지는 않습니다. 해당 문제가 해결될 때까지 오류 내용과 원본 파일을 보관하세요.
다른 작업 방식이 더 적합한 경우
Tom Riha가 공개한 기존 Power Automate 안내는 보고서가 업로드될 때 Participants를 추출하므로, 파일이 계속 업로드되는 작업 흐름에 적합할 수 있습니다. 권한이 있는 관리자는 보고 또는 감사 데이터 작업 흐름을 통해 모임 정보를 수집할 수도 있습니다. 여기서 소개하는 방법은 이미 가지고 있는 보고서 폴더에서 시작해 한 번의 실행으로 통합 문서를 만듭니다.
변환 도구는 명시된 형식을 따르며 값을 수식이 아닌 텍스트 셀에 그대로 저장합니다. 검사는 가상의 보고서를 사용하며, 따옴표가 포함된 이름, 비어 있는 식별 필드, 여러 인코딩, 반복된 파일과 실패 사례 등을 포함합니다. 이는 사용자의 Teams 테넌트에서 테스트했다는 뜻이 아니며, 모든 스프레드시트 프로그램이 다시 저장할 때 모든 문자열을 보존한다는 보장도 아닙니다. 원본 CSV와 원래 값을 담은 감사 기록을 기준 자료로 보관하세요.
