[SQA] 엑셀 문서 취합 DLL

  1. 개요
  2. 요구사항
  3. 기존 SQA Tool의 산출물
  4. 하나의 파일에 통합 된 워크시트 결과
  5. 빌드 된 dll 모습
  6. 소스코드
  7. 동작 방법
  8. 마치며

개요


  • 앞서 작성한 SQATool의 경우 모든 모듈의 변경 사항을 Diff하여 각각의 Excel 문서로 떨궈준다.
  • 근데 이러한 경우 여러 파일이 쌓이게 되어 보기 불편할 수 있다는 의뢰가 들어왔다.
  • 따로 이에 대한 문제 해결 요구하는 말은 없으셨지만 말이 나온 김에 여러 모듈 Excel파일을 하나의 Excel파일에 여러 워크시트로 만들어주는 DLL을 만들어봤다.

요구사항


  • SQATool 작동 시 모든 모듈의 변경 사항을 Diff하여 각각의 Excel 문서로 떨궈주게 된다.
  • 이러한 여러 엑셀 문서를 읽는 데에 불편함이 있어 하나의 엑셀 파일에 여러 워크시트를 포함하는 방식으로 수정하길 원한다.

기존 SQA Tool의 산출물


하나의 파일에 통합 된 워크시트 결과

빌드 된 dll 모습


소스코드


// 일부 소스 코드 생략
public List<string> getExcelFilePath(string directoryPath)
{
    List<string> result = new List<string>();

    DirectoryInfo di = new DirectoryInfo(directoryPath);
    FileInfo[] fi = di.GetFiles("*.xlsx");

    foreach (FileInfo f in fi)
    {
        // 작성하려는 엑셀 파일이 검출되면 패스함
        if (f.Name.Contains("TotalChangeList"))
        {
            continue;
        }
        result.Add(f.FullName);
    }

    return result;
}

public bool writeExcel(List<string> filePath, string outputPath)
{
    try
    {
        excel = new Excel.Application();
        workBook = excel.Application.Workbooks.Add();

        for (int i = filePath.Count - 1; i >= 0; i--)
        {
            Excel.Workbook tempwb = excel.Workbooks.Open(filePath[i]);
            Excel.Worksheet tempws = tempwb.Worksheets.Item[1];

            tempws.Copy(Type.Missing, workBook.Sheets["Sheet1"]);
            workBook.Sheets["복사 대상 워크시트명"].Name = getModuleName(filePath[i]);

            tempwb.Close(true);
        }
        workBook.Sheets["Sheet1"].Delete();

        string excelFileName = "TotalChangeList.xlsx";
        if (File.Exists(Path.Combine(outputPath, excelFileName)))
        {
            File.Delete(Path.Combine(outputPath, excelFileName));
        }
        excel.ActiveWorkbook.SaveAs(Path.Combine(outputPath, excelFileName));

        workBook.Close(true);
        excel.Quit();

        // 릴리즈 해제 해줘야 함
        ReleaseExcelObject(workSheet);
        ReleaseExcelObject(workBook);
        ReleaseExcelObject(excel);

        return true;

    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);

        return false;
    }
}

동작 방법


  • SQATool의 메인에서 ChangeList(Diff 요약 엑셀 파일)을 만들어주게 되는데, 이 작업이 끝난 후 위 DLL을 불러와 작동하게 했다.
  • SQATool에서는 위 DLL을 불러와 DirectoryPath 설정, 엑셀 파일들 경로 저장, TotalChangeList 작성 순으로 진행한다.

마치며


  • 이번 DLL을 제작하면서 어려웠던 점은 어떻게 엑셀 워크시트의 내용을 복사하여 하나의 엑셀 파일에 넣느냐였다. 사실 원리 자체는 쉬운데 구현이 어려웠다. ‘그냥 복사해서 띡! 갖다 놓으면 되는 거 아닌가??’ 맞는 말이고 실제 코드도 그러하나 Excel 접근에서 자꾸 이상하게 엉켜서 많은 시행 착오를 겪었다…그리고 처음 만들어보는 DLL, 메인 소스에서의 참조 등 이러한 경험으로 뭔가 방대한?(그렇진 않지만 ㅎ..) 프젝을 하는 것 같아 재밌었다.