스프레드시트를.
내 애플리케이션 안에.
sgcSpreadsheet는 sgcUI의 새로운 Excel 스타일 스프레드시트 컨트롤입니다. 사용자는 값과 수식을 입력하고, 여러 시트를 오가며 작업하고, 셀에서 바로 차트를 그립니다. 코드에서는 통합 문서를 채우고, 자체 함수를 추가하고, Excel에서 열리는 XLSX 파일을 읽고 쓸 수 있습니다.
- VCL
- FireMonkey
- C++ Builder
- WinForms
- WPF
- Avalonia

업무용 애플리케이션이라면 언젠가는 시트가 필요해집니다. 사용자는 예산을 세우고, 견적 가격을 매기고, 비용을 계산하고, 고객이 Excel 파일로 보낸 숫자를 확인하며, 그 과정에서 수식, 여러 시트, 차트를 기대합니다. 단순한 그리드로는 어느 것도 해결할 수 없습니다.
sgcSpreadsheet 는 sgcGrid와 sgcUICore에 공유된 수식 엔진을 기반으로 만든 Excel 스타일 스프레드시트 컨트롤입니다. 시트, 정의된 이름, 동적 배열을 갖춘 실제 통합 문서를 유지하고, 변경의 영향을 받는 셀만 다시 계산하며, XLSX를 불러오고 저장합니다. 같은 엔진이 Delphi와 C++ Builder용 VCL 및 FireMonkey 컨트롤과 .NET용 WinForms, WPF, Avalonia 컨트롤을 구동합니다.
sgcSpreadsheet 실행 모습
수식, 스필 배열, 여러 시트, 실시간 차트, XLSX 파일을 모든 플랫폼에서 보여 줍니다. YouTube에서도 볼 수 있습니다.
사용자에게 이미 익숙한 수식
숫자를 다루는 사람들은 Excel 수식으로 생각합니다. sgcSpreadsheet에서는 =로 시작하는 텍스트가 수식이며, 엔진은 수학, 통계, 텍스트, 날짜와 시간, 조회, 논리, 정보, 동적 배열 함수까지 211개의 워크시트 함수를 계산합니다. 엔진이 sgcUICore에 있으므로 sgcGrid 수식도 같은 결과를 냅니다.
=SUM(B2:B13)=XLOOKUP(C2,…)=Sheet2!A1처럼 다른 시트를 참조할 수 있습니다.=SORT(A2:A20)↓#SPILL!과 A1# 참조를 지원합니다.B2 → B14 → D3=SUM(Sales)*(1+Rate)'007
시트, 이름, 스필 배열
스프레드시트는 시트가 하나 이상 있는 통합 문서입니다. 그리드 아래의 탭으로 시트를 전환하고 + 탭으로 시트를 추가하며, 시트 이름을 바꾸면 그 시트를 참조하는 모든 수식에서도 이름이 바뀝니다. 코드에서는 AddSheet, ActiveSheet, SheetCount로 시트를 관리하고, Grid.Sheets.Names가 통합 문서의 정의된 이름을 보관합니다.
아래 메서드는 가격 목록을 채우고, 범위에 이름을 붙이고, 그 목록을 읽는 요약 시트를 만듭니다. SORT는 제품 전체 목록을 반환하여 아래 셀로 스필되고, A1#은 목록이 아무리 길어져도 그 스필 범위를 가리킵니다. XLOOKUP이 가격을 찾고 VAT 이름이 세금을 더합니다.
uses
sgcSpreadsheet_VCL;
procedure TForm1.BuildPriceList;
var
vSummary: Integer;
begin
// Sheet1: a price list, row and column are 0-based, (0, 0) is A1
sgcVCLSpreadsheet1.SetCellInput(0, 0, 'Product');
sgcVCLSpreadsheet1.SetCellInput(0, 1, 'Price');
sgcVCLSpreadsheet1.SetCellInput(1, 0, 'Monitor');
sgcVCLSpreadsheet1.SetCellInput(1, 1, '219');
sgcVCLSpreadsheet1.SetCellInput(2, 0, 'Keyboard');
sgcVCLSpreadsheet1.SetCellInput(2, 1, '49');
sgcVCLSpreadsheet1.SetCellInput(3, 0, 'Mouse');
sgcVCLSpreadsheet1.SetCellInput(3, 1, '25');
// defined names: formulas use them instead of cell addresses
sgcVCLSpreadsheet1.Grid.Sheets.Names.Add('Products', '=Sheet1!$A$2:$A$4');
sgcVCLSpreadsheet1.Grid.Sheets.Names.Add('Prices', '=Sheet1!$B$2:$B$4');
sgcVCLSpreadsheet1.Grid.Sheets.Names.Add('VAT', '0.21');
// a second sheet that reads the first one
vSummary := sgcVCLSpreadsheet1.AddSheet('Summary');
sgcVCLSpreadsheet1.ActiveSheet := vSummary;
// a dynamic array: the sorted names spill into A1:A3
sgcVCLSpreadsheet1.SetCellInput(0, 0, '=SORT(Products)');
// A1# is the whole spilled range, however long the list grows
sgcVCLSpreadsheet1.SetCellInput(0, 2, 'Items');
sgcVCLSpreadsheet1.SetCellInput(0, 3, '=ROWS(A1#)');
// XLOOKUP finds the price of a product, VAT included
sgcVCLSpreadsheet1.SetCellInput(1, 2, 'Monitor');
sgcVCLSpreadsheet1.SetCellInput(1, 3, '=XLOOKUP(C2,Products,Prices)*(1+VAT)');
// every sheet, formula and name goes to a file that Excel opens
sgcVCLSpreadsheet1.SaveToXLSX('prices.xlsx');
end;
요약 시트에는 세 제품이 순서대로 표시되고, 항목 수는 3, 모니터 가격은 264.99입니다. 첫 번째 시트에서 가격을 바꾸면 그에 의존하는 셀만 다시 계산됩니다. FreezePanes(1, 0)은 나머지 시트가 스크롤되는 동안 머리글 행을 고정하며, 수식 입력줄 TsgcVCLSpreadsheetFormulaBar와 TsgcFMXSpreadsheetFormulaBar는 사용자에게 이름 상자와 현재 셀의 수식을 보여 줍니다.
나만의 함수
엔지니어링, 금융, 실험실 애플리케이션에는 고유한 계산이 필요합니다. 수식 엔진에는 함수 레지스트리가 있으며, 여기에 등록한 함수는 내장 함수와 똑같이 스프레드시트, sgcGrid, TsgcCalcEvaluator의 모든 수식에서 동작합니다. 핸들러는 일반 함수이며 유닛의 initialization 섹션에서 등록합니다.
unit MyFunctions;
interface
implementation
uses
sgcUICore_Calc;
{ =MARKUP(price, [rate]): the price plus a margin, 20% by default }
function DoMarkup(aCall: TsgcCalcCall): Variant;
var
vPrice, vRate: Double;
vError: string;
begin
vError := aCall.Number(0, vPrice);
vRate := 0.2;
if (vError = '') and (aCall.Count > 1) then
vError := aCall.Number(1, vRate);
if vError <> '' then
Result := vError
else
Result := vPrice * (1 + vRate);
end;
initialization
// MARKUP takes 1 or 2 arguments
sgcCalcRegisterFunction('MARKUP', DoMarkup, 1, 2);
end.
유닛을 프로젝트에 추가하면 사용자가 =MARKUP(B2)를 입력할 수 있습니다. 동적 배열에서는 엔진이 배열 인수의 각 요소마다 함수를 호출하므로, =MARKUP(B2:B4, 0.3)은 가격마다 결과 하나씩 스필하고 =SUM(MARKUP(B2:B4))도 추가 코드 없이 동작합니다. 범위의 셀이 필요한 함수는 cfRanges 플래그로 등록하고 반복자로 셀을 순회합니다.
셀 범위로 만드는 차트
차트는 셀 범위의 값을 보여 주며, Excel의 차트처럼 시트 위에 떠 있습니다. sgcCharts가 그리고, 범위의 셀이 바뀌거나 범위의 수식이 새 값을 내면 차트도 따라서 바뀝니다. 사용자는 마우스로 차트를 옮기고 크기를 조정할 수 있으며, 시트마다 고유한 차트를 가집니다.
- 7가지 차트 유형: 세로 막대, 가로 막대, 꺾은선, 영역, 원형, 도넛, 분산형.
'A1:D10'또는'Sheet1!A1:D10'같은 범위를 지정하는AddChart, 계열 이름과 항목은 머리글 행과 열에서 읽습니다.TsgcSpreadsheetCharts가 시트별 차트를 보관하고,SaveToXLSX는 Excel에서 열리는 차트로 저장합니다.
XLSX 입력, XLSX 출력
고객은 XLSX 파일을 보내고 XLSX 파일로 돌려받기를 기대합니다. LoadFromXLSX는 통합 문서의 모든 시트를 읽고 SaveToXLSX는 모든 시트를 파일 이름이나 스트림으로 저장하므로, 파일이 애플리케이션과 Excel 사이를 왕복할 수 있습니다.
- 값, 수식, 셀 서식.
- 정의된 이름과 동적 배열.
- 틀 고정과 열 너비.
- 차트, Excel에서 열리는 차트로 저장.
VCL, FireMonkey, .NET
Delphi와 C++ Builder에서는 VCL용 TsgcVCLSpreadsheet와 FireMonkey용 TsgcFMXSpreadsheet를 사용할 수 있으며, 각각 수식 입력줄이 있습니다. .NET에는 TsgcWinFormsSpreadsheet, TsgcWpfSpreadsheet, TsgcAvaloniaSpreadsheet가 있고 역시 수식 입력줄을 갖추었으며, NuGet 패키지 esegece.sgcSpreadsheet, esegece.sgcSpreadsheet.WinForms, esegece.sgcSpreadsheet.Wpf, esegece.sgcSpreadsheet.Avalonia로 제공됩니다. .NET 컨트롤은 Delphi 컨트롤과 같은 이름을 사용하며, 사용자 지정 함수는 람다로 작성할 수 있습니다.
using esegece.sgcSpreadsheet;
using esegece.sgcUICore;
// once at startup, before the first formula is parsed
sgcUICore_Calc.sgcCalcRegisterFunction("MARKUP", aCall =>
{
double vPrice;
double vRate = 0.2;
string vError = aCall.Number(0, out vPrice);
if ((vError.Length == 0) && (aCall.Count > 1))
vError = aCall.Number(1, out vRate);
if (vError.Length > 0)
return vError;
return vPrice * (1 + vRate);
}, 1, 2);
// sheet is a TsgcWinFormsSpreadsheet: open a workbook made in Excel
sheet.LoadFromXLSX("prices.xlsx");
sheet.ActiveSheet = 0;
// the custom function spills over the whole price column
sheet.SetCellInput(0, 2, "=MARKUP(B2:B4, 0.3)");
// a column chart of the range, drawn by sgcCharts
TsgcSpreadsheetChart chart = sheet.AddChart(TsgcSpreadsheetChartType.sctColumn, "A1:B4");
chart.Title = "Prices";
sheet.SaveToXLSX("prices-markup.xlsx");
데모 실행하기
Delphi와 C++ Builder 데모는 sgcUI 체험판과 함께 설치되고, .NET 데모는 Registered .NET 다운로드에 포함되어 있습니다.

- Basic: SUM, AVERAGE, IF, XLOOKUP으로 코드에서 만든 판매 통합 문서, 그것을 읽는 요약 시트, 고정된 머리글 행, 수식 입력줄, XLSX 열기와 저장.
- Functions: 수학, 텍스트, 날짜와 시간, 조회, 동적 배열 함수를 범주마다 시트 하나로 보여 주며, 각 수식 옆에 결과를 표시합니다.
- Charts: 셀 범위로 만든 세로 막대, 꺾은선, 원형 차트. 매출이나 비용을 수정하면 차트가 따라서 바뀝니다.
- CustomFunction, BasicFMX, ChartsFMX: 애플리케이션이 등록한 함수, 그리고 FireMonkey용 Basic 및 Charts 데모. Basic과 Charts는 C++ Builder 프로젝트로도 제공됩니다.
- .NET: WinForms용 SpreadsheetBasic, SpreadsheetBasicWpf, SpreadsheetBasicAvalonia, SpreadsheetFunctions, SpreadsheetCharts and SpreadsheetCustomFunction.
sgcSpreadsheet가 포함된 에디션
sgcSpreadsheet는 sgcUI Enterprise와 All-Access 번들에 포함되어 있으며, Delphi와 C++ Builder용, .NET용 단일 패키지로도 따로 판매됩니다. sgcSpreadsheet를 설치하면 sgcGrid와 sgcCharts도 함께 설치되므로 그리드와 차트가 항상 동작합니다. 무료 Community 에디션은 없습니다. 자세한 내용은 가격 페이지를 참고하세요.
사용자에게 스프레드시트를 선물하세요
sgcSpreadsheet는 Delphi와 C++ Builder의 VCL 및 FireMonkey용, 그리고 .NET의 WinForms, WPF, Avalonia용 sgcUI에 포함되어 있습니다.
질문이나 의견이 있으신가요? 문의해 주세요. 코드를 직접 작성한 사람들이 답변해 드립니다.
