.NET 응용 프로그램에서 Excel API와 함께 사용자 정의 함수 사용하기
페이지 정보
작성자 GrapeCity 작성일 2020-10-13 16:05 조회 3,280회 댓글 0건본문
관련링크
사용자 정의 함수의 이점
이 함수는 모든 Excel 플랫폼(Win, Mac, 모바일, Office Online)에서 실행됩니다.
속도가 빠릅니다.
모양과 느낌이 네이티브 Excel 함수와 유사합니다(예: 수식 팁).
웹 서비스 호출을 할 수 있습니다.
웹에 의존하지 않는 경우 오프라인에서 실행할 수 있습니다.
통합 문서가 실행되지 않을 때도 이 함수를 실행할 수 있습니다.
기본 제공 함수가 메모리 사용 측면에서 더 빠르고 효율적일 수 있지만 사용자 정의 함수를 이용하면 Excel 시트에서 데이터 계산의 확장성을 높일 수 있습니다.
GrapeCity Documents for Excel의 사용자 정의 함수
및 컴포넌트는 항상 사용자 정의 함수를 지원해 왔습니다. 새로운 GcExcel 서비스 팩 릴리즈 - 1.5.0.4는 이러한 지원을 GrapeCity의 Documents 제품군으로 확장합니다. 는 .NET Core 대상 응용 프로그램에서 스프레드시트에 대한 사용자 정의 함수를 도입했습니다.
사용자 정의 함수 시작하기:
|
이 튜토리얼에서는 사용자 정의 함수를 사용하는 것이 더 유리한 사용 사례를 다룹니다. 이 문서에서는 .NET Core 응용 프로그램에서 문제를 해결하는 단계를 안내합니다.
사용자 정의 함수의 사용 사례
이 예에서는 한 가족의 월수입과 월 지출을 비교해 봅니다. 이 스프레드시트에서는 가계 지출로 소비되는 소득의 비율을 계산합니다. 다음 달에는 해당 월의 정보로 대체하여 이 계산을 매달 반복합니다.
가족 지출 목록이 길거나 데이터가 여러 시트에 걸쳐 있는 경우 데이터를 분석하기가 어려울 수 있습니다. 행 전체를 검색하여 최고 지출액을 찾기가 어려울 수도 있습니다. 어떤 사람이 월별 지출을 분석하여 최고 지출액을 알아보려 한다고 가정합시다. 이 경우 표준 함수를 사용하면 쉽게 해결됩니다. =MAX(B11:B23) 함수를 사용하면 월 최고 지출액이 이 나옵니다.
데이터를 더 분석하여 현재의 지출을 줄일 방법을 알아보려 한다고 가정합시다. 해당 월의 최고 지출액 두 가지를 파악해야 합니다. 이것은 기본 제공되는 표준 함수를 조합하여 계산할 수 있습니다. 하지만 두 번째로 큰 값을 계산하려면 코딩을 약간 해야 합니다. 이렇게 되면 사용자 정의 함수로 계산하는 편이 더 쉽습니다.
사용자 정의 함수를 스프레드시트에 추가하여 월 최고 지출액 두 가지를 계산하는 방법
1단계:
월 수입 및 월 지출 데이터를 추가하려면 단계에 따라 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 셀에 표시됩니다.
사용자 정의 함수 결과
참고: MS Excel에서는 GcExcel의 사용자 정의 함수를 인식하지 못하므로 Excel에 저장하면 수식이 포함된 셀(B25)에 #NAME 오류가 표시됩니다.
댓글목록
등록된 댓글이 없습니다.