원본 보기 http://ngmsoftware.com
안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 RPA 매크로를 업무에 이용하는 빈도가 증가하고 있습니다. 엑셀 관련된 문의가 많은데요. 엔지엠 에디터에서 기본으로 제공하는 엑셀은 COM을 사용하고 있습니다. COM은 다들 아시는것처럼 느리다는 단점이 있습니다. 이외에도 엑셀에 엑세스하는 COM의 경우에는 세션 안에서만 연속적으로 처리할 수 있습니다. 이로인해 반복문과 같이 하나의 동작을 반복적으로 수행하면 리소스 낭비가 심합니다. 콤으로 마샬링할 때 항상 다시 요청하는 방식으로 동작하기 때문입니다. 그래서, 엑셀의 범위를 한번에 처리하는게 좋은데요. 이렇게하면 셀을 이동하면서 반복하는 구간마다 별도의 처리가 불가능해집니다. 엑지엠 RPA 매크로는 커스텀으로 확장할 수 있는 막강한 기능을 제공하고 있습니다. 이 기능을 이용해서 엑셀을 핸들링하는 방법에 대해 알아보도록 하겠습니다. Visual Studio Community를 실행하고, 새로운 프로젝트를 추가하세요. 프로젝트 이름은 CustomExcelReader로 만들었습니다.
이 프로젝트는 클래스 라이브러리로 만들어졌습니다. 항상 그렇지만~ 개발자들이 모든 기능을 직접 개발해서 사용하는건 아닙니다. 이미 다 만들어져 있는것들이 많거든요^^; 대부분의 개발자들이 구글에서 필요한 기능을 검색하고, 약간만 수정해서 적용하곤 합니다. 그렇다고해서 이미 만들어진 코드를 그대로 적용하는건 아닙니다. 프로젝트마다 업무 비즈니스 로직이 천차만별이라 어느정도는 직접 구현해야 합니다. 쉽게 개발하는건 절대 아닙니다-_-;
추가된 프로젝트에서 우클릭 후 "NuGet 패키지 관리"를 클릭하세요.
아래 그림과 같이 "찾아보기" 탭에서 "excel"을 검색하세요. ①ExcelDataReader와 ②ExcelDataReader.DataSet을 둘다 설치해줍니다.
원본 보기 http://ngmsoftware.com
전체 코드는 아래와 같습니다.
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에 넣어주고 있습니다. 결과는 아래와같이 확인할 수 있습니다.
배열로 처리하려면 아래와 같이 코드를 작성할수도 있습니다.
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차원 배열에 콤마로 구분되어 저장된것을 알 수 있습니다.
코드에서 Row와 Column을 반복하면서 처리하기 때문에 원하는 조건을 추가할 수 있습니다. 또한, 열과 행을 분리하거나 특정 핸만 저장할수도 있습니다. 이외에도 여러가지 방법으로 데이타를 가공할 수 있습니다. 개발자라면 얼마든지 응용해서 원하는 결과를 만들어 낼 수 있습니다. 일반인이 하기에는 다소 무리가 있겠지만요^^;
'업무 자동화 매크로' 카테고리의 다른 글
엔지엠 RPA 매크로 - 디자이너 또는 커스텀 모듈로 비활성 클릭 모듈 만들기. (0) | 2021.09.17 |
---|---|
엔지엠 RPA 매크로 - 웹 API의 HEADLESS를 사용해서 파일을 다운로드 하는 방법. (0) | 2021.09.16 |
무료 매크로 다운로드 - 1시간만 배우면 누구나 업무 자동화로 칼퇴 가능! (0) | 2021.09.12 |
무료 매크로에서 같은 이미지를 모두 찾고 싶을 때... (How to find all the same images in macro.) (0) | 2021.05.29 |
에너지 체크 매크로 플레이어 - 실행 속도를 조절하는 방법. (0) | 2021.05.23 |