NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET 매크로 프로그램 만들기. (구글 스프레드 시트에 데이터를 입력하거나 가져오는 방법)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 대부분의 사람들은 엑셀을 이용해서 데이터를 처리하고 계실텐데요. 엑셀을 대체할 수 있는 구글의 스프레드 시트를 사용하시는 분들도 점점 더 늘어나고 있습니다. 아무래도 무료로 이용할 수 있고, 다양한 기능들을 제공하고 있어서 엑셀보다 유리한 측면도 분명 존재하기 때문입니다. 테이블 형태의 데이터를 관리할 때 구글 스프레드 시트를 이용해보면, 엑셀에 비해 크게 부족하지 않은 성능을 보여줍니다.

     

    엔지엠 매크로에는 엑셀 처리에 대한 액션들도 존재하지만, 구글 스프레드 시트를 제어할 수 있는 기능도 존재합니다. 엑셀과 다르게 더 편리하게 이용할 수 있기도 한데요. 무엇보다 좋은점은 메모리에서 자유롭고 API가 잘 정리되어 있어서 퍼포먼스면에서 많이 유리합니다. 일단, 스프레드 시트 액션을 하나 추가하고 기능을 하나씩 개발 해볼께요.

    O1IFFT6.png

     

     

    스프레드 시트의 정보를 가져오는 속성들입니다.

    [LocalizedCategory("Data")]
    [LocalizedDisplayName("Result")]
    [LocalizedDescription("Result")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? Result { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("ResultArray")]
    [LocalizedDescription("ResultArray")]
    [Browsable(true)]
    [DefaultValue(null)]
    public List<string>? ResultArray { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("RowCount")]
    [LocalizedDescription("RowCount")]
    [Browsable(true)]
    [DefaultValue(0)]
    public int RowCount { get; set; }
    
    [LocalizedCategory("Data")]
    [LocalizedDisplayName("ColumnCount")]
    [LocalizedDescription("ColumnCount")]
    [Browsable(true)]
    [DefaultValue(0)]
    public int ColumnCount { get; set; }

     

    동작은 아래와 같이 설정해야 합니다. 수식으로 데이터를 처리할지 여부도 함께 제공 해줍니다.

    [LocalizedCategory("Action")]
    [LocalizedDisplayName("InputValue")]
    [LocalizedDescription("InputValue")]
    [Browsable(true)]
    [DefaultValue(null)]
    [EditorAttribute(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string? InputValue { get; set; }
    
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("UseExpression")]
    [LocalizedDescription("UseExpression")]
    [Browsable(true)]
    [DefaultValue(false)]
    public bool UseExpression { get; set; }

     

    아래 2개의 속성이 중요한 내용인데요. 필수로 입력해야 합니다. 구글 스프레드 시트의 문서 링크 주소와 여러개의 시트중에서 액션을 수행할 시트 이름을 설정해야 합니다.

    [LocalizedCategory("Action")]
    [LocalizedDisplayName("SheetURL")]
    [LocalizedDescription("SheetURL")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? SheetUrl { get; set; }
    
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("SheetName")]
    [LocalizedDescription("SheetName")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? SheetName { get; set; }

     

    아래는 구글 시트에서 데이터를 가져올 때 어떤 방식으로 처리할지를 결정하는 속성들입니다. 데이터를 하나만 가져올 때는 문제가 안되지만, 여러개의 데이터를 가져와서 원하는 가공 처리를 하려면 열과 행을 분리해서 처리할 수 있습니다. 커스텀 모듈을 하나 만들어서 데이터 테이블을 처리하면 더 편리하겠지만 커스텀 모듈을 만드는건 어느정도 개발 코딩 지식이 필요하므로 가급적이면 엔지엠 매크로의 배열 액션들을 사용해서 데이터를 추출하는게 좋습니다. 배열이 아니더라도 정규식을 사용하면 좀 더 쉽게 원하는 데이터를 추출할수도 있습니다.

    [LocalizedCategory("DataSelect")]
    [LocalizedDisplayName("CellLocation")]
    [LocalizedDescription("CellLocation")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? CellLocation { get; set; }
    
    [LocalizedCategory("DataSelect")]
    [LocalizedDisplayName("RowSeperator")]
    [LocalizedDescription("RowSeperator")]
    [Browsable(true)]
    [DefaultValue("@")]
    public string DataRowSeperator { get; set; } = "@";
    
    [LocalizedCategory("DataSelect")]
    [LocalizedDisplayName("ColumnSeperator")]
    [LocalizedDescription("ColumnSeperator")]
    [Browsable(true)]
    [DefaultValue(",")]
    public string DataColumnSeperator { get; set; } = ",";

     

    일반적으로 개발 실무 환경에서 언포멧티드(Unformatted) 문자열이라면 파서(Parser)를 만들어서 파싱(Parsing) 룰을 만듭니다. 이 내용은 흔한 상황은 아닌데요. 제가 일하는 반도체 분야의 장비들은 각자 데이터 포멧이 다릅니다. 이런 데이터를 중앙 서버에 정형화된 형태로 가공해서 넣으면 장비 수율을 분석할 수 있습니다. 물론, 다 되는건 아니지만요. 아무튼 제조 분야의 RMS 시스템에서 필수로 사용되는 기술입니다.

     

    아래는 구글 스프레드 시트의 데이터를 가져오거나 추가 및 삭제할 때 처리 내용입니다.

    public override string? Execute(IPlayer player)
    {
        var id = base.Execute(player);
    
        switch (Operation)
        {
            case Definition.DataOperation.Add:
            case Definition.DataOperation.Insert:
                Ai.Api.GoogleService.SpreadSheet.SpreadSheetAddValue(player, SheetUrl, SheetName, CellLocation, DataRowSeperator, DataColumnSeperator, InputValue, UseExpression);
                break;
            case Definition.DataOperation.Modify:
                Ai.Api.GoogleService.SpreadSheet.SpreadSheetModifyValue(player, SheetUrl, SheetName, CellLocation, DataRowSeperator, DataColumnSeperator, InputValue, UseExpression);
                break;
            case Definition.DataOperation.Select:
                var result = Ai.Api.GoogleService.SpreadSheet.SpreadSheetGetValue(player, SheetUrl, SheetName, CellLocation, DataRowSeperator, DataColumnSeperator);
                Result = result.ResultValue;
                ResultArray = result.ResultArray;
                RowCount = result.RowCount;
                ColumnCount = result.ColumnCount;
                break;
        }
    
        return id;
    }

     

    테스트에 사용할 데이터를 미리 만들어 두었습니다. 엔지엠소프트웨어의 홈페이지 접속 통계를 구글 스프레드 시트에 정리한 내용입니다.

    3CQcGjE.png

     

     

    이 데이터로 테스트를 해볼께요. 테스트 내용은 유튜브 동영상을 참고하시면 됩니다.

     

     

    여기까지 해서 매크로가 갖춰야 할 최소한의 기능들은 대부분 개발이 완료된거 같습니다. 이제는 디테일한 부분들을 처리하고, 배포를 위한 시스템을 설계해야 할거 같네요. 그리고, 홈페이지도 하나 더 만들어야 할거 같아요. 이외에도 그동안 하지 못했던 자동 결제나 인증 처리 부분들을 개선한 후 서비스를 오픈해야겠습니다. 이런것들이 모두 완료되는데까지 얼마의 시간과 노력이 들어갈지 모르겠지만, 틈틈히 관련 소식들을 전하도록 할께요!

     

    이 글이 도움이 되셨다면~ 커피 한잔이라도 후원 부탁드립니다^^

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.