.NET 응용 프로그램에서 Excel API와 함께 사용자 정의 함수 사용하기 > 블로그 & Tips

본문 바로가기

.NET Core API

블로그 & Tips

.NET 응용 프로그램에서 Excel API와 함께 사용자 정의 함수 사용하기

페이지 정보

작성자 GrapeCity 작성일 20-10-13 16:05 조회 522회 댓글 0건

본문

Excel 계산에 사용자 정의 함수를 사용하면 스프레드시트 내 확장성이 더 향상됩니다. 예를 들어 여러 단계로 중첩된 수식, 재무팀의 회사 고유 수식 또는 표준 함수의 조합을 사용해 계산해야 하는 경우가 있습니다. 물론 기본 제공 함수를 사용해 셀 두 개를 추가해도 되지만, 만일 두 셀의 문자열 값을 연결하고 싶다면 어떻게 해야 할까요? 또한 일정 범위에 있는 셀의 합계를 계산해야 할 수도 있습니다. 이러한 상황에서는 기본 제공되는 표준 함수로 계산을 처리할 수 없고 사용자 정의 함수를 작성해야 합니다.


사용자 정의 함수의 이점

  • 이 함수는 모든 Excel 플랫폼(Win, Mac, 모바일, Office Online)에서 실행됩니다.

  • 속도가 빠릅니다.

  • 모양과 느낌이 네이티브 Excel 함수와 유사합니다(예: 수식 팁).

  • 웹 서비스 호출을 할 수 있습니다.

  • 웹에 의존하지 않는 경우 오프라인에서 실행할 수 있습니다.

  • 통합 문서가 실행되지 않을 때도 이 함수를 실행할 수 있습니다.

기본 제공 함수가 메모리 사용 측면에서 더 빠르고 효율적일 수 있지만 사용자 정의 함수를 이용하면 Excel 시트에서 데이터 계산의 확장성을 높일 수 있습니다.


GrapeCity Documents for Excel의 사용자 정의 함수

Spread.NetSpreadJS 컴포넌트는 항상 사용자 정의 함수를 지원해 왔습니다. 새로운 GcExcel 서비스 팩 릴리즈 - 1.5.0.4는 이러한 지원을 GrapeCity의 Documents 제품군으로 확장합니다. GcExcel API for .NET Core는 .NET Core 대상 응용 프로그램에서 스프레드시트에 대한 사용자 정의 함수를 도입했습니다.


사용자 정의 함수 시작하기:

.NET 사용자 정의 함수 도움말 | Java 사용자 정의 함수 도움말


이 튜토리얼에서는 사용자 정의 함수를 사용하는 것이 더 유리한 사용 사례를 다룹니다. 이 문서에서는 .NET Core 응용 프로그램에서 문제를 해결하는 단계를 안내합니다.

사용자 정의 함수의 사용 사례

이 예에서는 한 가족의 월수입과 월 지출을 비교해 봅니다. 이 스프레드시트에서는 가계 지출로 소비되는 소득의 비율을 계산합니다. 다음 달에는 해당 월의 정보로 대체하여 이 계산을 매달 반복합니다.

가족 지출 목록이 길거나 데이터가 여러 시트에 걸쳐 있는 경우 데이터를 분석하기가 어려울 수 있습니다. 행 전체를 검색하여 최고 지출액을 찾기가 어려울 수도 있습니다. 어떤 사람이 월별 지출을 분석하여 최고 지출액을 알아보려 한다고 가정합시다. 이 경우 표준 함수를 사용하면 쉽게 해결됩니다. =MAX(B11:B23) 함수를 사용하면 월 최고 지출액이 이 나옵니다.

데이터를 더 분석하여 현재의 지출을 줄일 방법을 알아보려 한다고 가정합시다. 해당 월의 최고 지출액 두 가지를 파악해야 합니다. 이것은 기본 제공되는 표준 함수를 조합하여 계산할 수 있습니다. 하지만 두 번째로 큰 값을 계산하려면 코딩을 약간 해야 합니다. 이렇게 되면 사용자 정의 함수로 계산하는 편이 더 쉽습니다.


사용자 정의 함수를 스프레드시트에 추가하여 월 최고 지출액 두 가지를 계산하는 방법


1단계:

월 수입 및 월 지출 데이터를 추가하려면 시작하기 단계에 따라 GcExcel로 기본적인 스프레드시트를 만드십시오. 블로그의 맨 아래에서 스프레드시트는 다음과 같은 모양이 됩니다.

GCExcel로 사용자 정의 함수 만들기

단순 예산


2단계:

CustomFunction 클래스에서 파생 클래스를 만듭니다.

public class HighestValues : CustomFunction
{
}


3단계:

클래스 내에서 사용자 정의 함수의 인스턴스를 함수의 이름, 반환 유형, 사용자 정의 함수의 매개 변수와 함께 초기화합니다.

public HighestValues(): base("HighestValues", FunctionValueType.Text, new Parameter[] { new Parameter(FunctionValueType.Object), new               Parameter(FunctionValueType.Number), new Parameter(FunctionValueType.Number) })
      {
​
      }


여기서 사용자 정의 함수의 이름은 Highest Values입니다. 함수의 반환 유형은 지출 항목의 이름 목록이므로 반환 유형은 Text value입니다. 이 함수는 최고값 두 개를 계산하기 위한 매개 변수 값을 받습니다.


4단계:

최고값 두 개를 찾기 위한 평가 함수를 정의합니다. 이 함수는 수신되는 배열의 길이와 그 안의 행 값 및 열 값 등 몇 가지 유효성 검사를 수행합니다. 그런 다음 주어진 배열을 Temp objects(셀 범위의 텍스트 및 숫자 값을 담은 클래스) 목록에 추가합니다. 이 목록은 배열을 정렬하고 가장 큰 숫자 두 개를 반환합니다.

public override object Evaluate(object[] arguments, ICalcContext context)
  {
      if (arguments.Length < 3)
      {
          return CalcError.Value;
      }
​
      var values = arguments[0];
      if (values is IEnumerable<object>)
      {
          values = (values as IEnumerable<object>).FirstOrDefault();
      }
      object[,] array = values as object[,];
      if (array == null)
      {
          return CalcError.Value;
      }
      int rowCount = array.GetLength(0);
      int colCount = array.GetLength(1);
      if (rowCount <= 0 || colCount <= 0)
      {
          return CalcError.Value;
      }
      int resultCol = (int)(double)arguments[1] - 1;
      if (resultCol < 0 || resultCol >= colCount)
      {
          return CalcError.Num;
      }
​
      int numberCol = (int)(double)arguments[2] - 1;
      if (numberCol < 0 || resultCol >= colCount)
      {
          return CalcError.Num;
      }
​
      List<temp> list = new List<temp>();
      for (int i = 0; i < rowCount; i++)
      {
          string text = array[i, resultCol]?.ToString();
          double number = array[i, numberCol] is double ? (double)array[i, numberCol] : 0;
          list.Add(new temp(text, number));
      }
      list.Sort((x, y) =>
      {
          if (x.Number > y.Number)
          {
              return -1;
          }
          else if (x.Number == y.Number)
          {
              return 0;
          }
          else
          {
              return 1;
          }
      });
      string result = null;
      int count = Math.Min(list.Count, 2);
      for (int i = 0; i < count; i++)
      {
          if (result != null)
          {
              result += ",";
          }
          result += list[i].Text;
      }
​
      return result;
  }
private class temp
  {
      public string Text;
      public double Number;
​
      public temp(string text, double number)
      {
          this.Text = text;
          this.Number = number;
      }
  }


5단계:

static void Main[] 함수에서 AddCustomFunction() 메서드를 호출합니다. 새로운 GcExcel 통합 문서를 만들고 이 통합 문서에서 Excel 스프레드시트를 엽니다.

Workbook.AddCustomFunction(new HighestValues());
var workbook = new Workbook();
workbook.Open("SimpleBudget.xlsx");


6단계:

HighestValues 사용자 정의 함수를 호출하고 가장 큰 값이 나와야 하는 셀 범위를 전달합니다. 그런 다음 변수에서 결과를 수집하고 이 결과를 셀에 설정합니다.

workbook.Worksheets[0].Range["B25"].Formula = "HighestValues(B11:C23, 1, 2)";
var result = workbook.Worksheets[0].Range["B25"].Value;
int rowIndex, columnIndex;           
GrapeCity.Documents.Excel.CellInfo.CellNameToIndex("C25", out rowIndex, out columnIndex);
workbook.Worksheets[0].Range[rowIndex, columnIndex].Value = result;


7단계:

통합 문서를 저장합니다.

workbook.Save("SimpleBudget.xlsx");


응용 프로그램을 실행하면 사용자 정의 함수가 수집한 최고 지출액이 C25 셀에 표시됩니다.

GCExcel로 사용자 정의 함수 만들기

사용자 정의 함수 결과


참고: MS Excel에서는 GcExcel의 사용자 정의 함수를 인식하지 못하므로 Excel에 저장하면 수식이 포함된 셀(B25)에 #NAME 오류가 표시됩니다.


전체 샘플 다운로드

  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그

인기글

더보기
  • 인기 게시물이 없습니다.
그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@grapecity.com | 전화 : 1670-0583 | 경기도 안양시 동안구 시민대로 230, B-703(관양동, 아크로타워) 그레이프시티(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 Copyright ⓒ 2021 GrapeCity inc.