NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    커스텀 엔지엠 RPA 매크로 - 엑셀 라이브러리를 이용해서 커스텀 모듈 기능을 확장하는 방법.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 RPA 매크로를 업무에 이용하는 빈도가 증가하고 있습니다. 엑셀 관련된 문의가 많은데요. 엔지엠 에디터에서 기본으로 제공하는 엑셀은 COM을 사용하고 있습니다. COM은 다들 아시는것처럼 느리다는 단점이 있습니다. 이외에도 엑셀에 엑세스하는 COM의 경우에는 세션 안에서만 연속적으로 처리할 수 있습니다. 이로인해 반복문과 같이 하나의 동작을 반복적으로 수행하면 리소스 낭비가 심합니다. 콤으로 마샬링할 때 항상 다시 요청하는 방식으로 동작하기 때문입니다. 그래서, 엑셀의 범위를 한번에 처리하는게 좋은데요. 이렇게하면 셀을 이동하면서 반복하는 구간마다 별도의 처리가 불가능해집니다. 엑지엠 RPA 매크로는 커스텀으로 확장할 수 있는 막강한 기능을 제공하고 있습니다. 이 기능을 이용해서 엑셀을 핸들링하는 방법에 대해 알아보도록 하겠습니다. Visual Studio Community를 실행하고, 새로운 프로젝트를 추가하세요. 프로젝트 이름은 CustomExcelReader로 만들었습니다.

    Yg0Dk4A.png

     

     

    이 프로젝트는 클래스 라이브러리로 만들어졌습니다. 항상 그렇지만~ 개발자들이 모든 기능을 직접 개발해서 사용하는건 아닙니다. 이미 다 만들어져 있는것들이 많거든요^^; 대부분의 개발자들이 구글에서 필요한 기능을 검색하고, 약간만 수정해서 적용하곤 합니다. 그렇다고해서 이미 만들어진 코드를 그대로 적용하는건 아닙니다. 프로젝트마다 업무 비즈니스 로직이 천차만별이라 어느정도는 직접 구현해야 합니다. 쉽게 개발하는건 절대 아닙니다-_-;

     

    추가된 프로젝트에서 우클릭 후 "NuGet 패키지 관리"를 클릭하세요.

    POtm0iQ.png

     

     

    아래 그림과 같이 "찾아보기" 탭에서 "excel"을 검색하세요. ①ExcelDataReader와 ②ExcelDataReader.DataSet을 둘다 설치해줍니다.

    WFOhJ6c.png

     

     

    전체 코드는 아래와 같습니다.

    using ExcelDataReader;
    using System;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing.Design;
    using System.IO;
    using System.Xml.Serialization;
    
    namespace CustomExcelReader
    {
        [Serializable]
        public class ExcelDataReaderModel : NGM.Models.Interface.BaseCustomToolModel, NGM.Models.Interface.IDataTable
        {
            public override string DisplayCategory => "NGMsoftware";
    
            public override string DisplayName => "엑셀 데이타 리더";
    
            [XmlIgnore]
            [Category("Data")]
            [DisplayName("엑셀 데이타")]
            [Description("엑셀에서 읽어온 데이타를 표시합니다.")]
            [Browsable(true)]
            [ReadOnly(true)]
            [DefaultValue(null)]
            [Editor(typeof(NGM.Models.TypeEditor.DataTableEditor), typeof(UITypeEditor))]
            public DataTable ExecuteDataTable { get; set; }
    
            [Category("Action")]
            [DisplayName("엑셀 파일 선택")]
            [Description("데이타를 가져올 엑셀 파일을 선택하세요.")]
            [Browsable(true)]
            [DefaultValue(null)]
            [Editor(typeof(NGM.Models.TypeEditor.OpenFileSelectorEditor), typeof(UITypeEditor))]
            public string FullName { get; set; }
    
            public override void Execute()
            {
                using (var stream = File.Open(FullName, FileMode.Open, FileAccess.Read))
                {
                    using (var reader = ExcelReaderFactory.CreateReader(stream))
                    {
                        ExecuteDataTable = reader.AsDataSet().Tables[0];
                    }
                }
            }
        }
    }

     

    이 코드는 단순하게 엑셀의 데이타를 읽어서 DataTable에 넣어주고 있습니다. 결과는 아래와같이 확인할 수 있습니다.

    1JSniqm.gif

     

     

    배열로 처리하려면 아래와 같이 코드를 작성할수도 있습니다.

            public override void Execute()
            {
                if (RowDataList == null)
                    RowDataList = new List<string>();
    
                using (var stream = File.Open(FullName, FileMode.Open, FileAccess.Read))
                {
                    using (var reader = ExcelReaderFactory.CreateReader(stream))
                    {
                        do
                        {
                            for (int r = 0; r < 5; r++)
                            {
                                reader.Read();
                                List<string> newRow = new List<string>();
                                for (int c = 0; c < 3; c++)
                                {
                                    string value = reader.GetString(c);
                                    newRow.Add(value);
                                }
                                RowDataList.Add(string.Join(",", newRow));
                            }
                        } while (reader.NextResult());
                    }
                }
            }

     

     

    코드를 변경한 후 실행해보면, 아래와 같이 1차원 배열에 콤마로 구분되어 저장된것을 알 수 있습니다.

    5wGq8eD.gif

     

     

    코드에서 Row와 Column을 반복하면서 처리하기 때문에 원하는 조건을 추가할 수 있습니다. 또한, 열과 행을 분리하거나 특정 핸만 저장할수도 있습니다. 이외에도 여러가지 방법으로 데이타를 가공할 수 있습니다. 개발자라면 얼마든지 응용해서 원하는 결과를 만들어 낼 수 있습니다. 일반인이 하기에는 다소 무리가 있겠지만요^^;

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.