GcExcel v6 > 새로운 소식

본문 바로가기

Java & Kotlin API

새로운 소식

정식출시 GcExcel v6

페이지 정보

작성자 GrapeCity 작성일 23-01-13 11:31 조회 22회 댓글 0건

본문

이제 GrapeCity Documents for Excel(GcExcel) v6 릴리스를 이용할 수 있습니다!

Excel 통합 문서 크기 최적화

사용하지 않은 서식, 정의된 이름 또는 빈 지역 셀이 있는 Excel 파일이 있는 경우가 자주 있습니다. 이러한 셀에는 처음에는 데이터와 서식이 있을 수 있지만 시간이 지남에 따라 사용되지 않고 데이터는 삭제되지만 서식은 유지됩니다. 통합 문서에 이러한 셀이 많이 있으면 성능이 느려지고 통합 문서의 크기가 늘어납니다. GcExcel을 사용하면 이제 이러한 셀을 제외하고 통합 문서의 크기를 줄이는 동시에 저장할 수 있습니다. GcExcel은 Workbook.Save(..) 메서드를 사용하여 통합 문서를 최적화하도록 XLSXSaveOptions() 클래스에서 새 옵션을 제공합니다. 다음 세 가지 새로운 옵션이 도입되었습니다.

  • XlsxSaveOptions.ExcludeUnusedStyles{ get; set; }
    - 사용자가 정의했지만 한 번도 사용하지 않은 셀 스타일을 제외할지 여부를 나타냅니다. 기본값은 false입니다.
  • XlsxSaveOptions.ExcludeUnusedNames{ get; set; }
    - 사용자가 정의했지만 한 번도 사용하지 않은 정의 이름을 제외할지 여부를 나타냅니다. 기본값은 false입니다.
  • XlsxSaveOptions.ExcludeEmptyRegionCells{ get; set; }
    - 사용한 데이터 범위 밖에 있는 빈 셀(데이터가 없거나 스타일만 있는 셀)을 제외할지 여부를 나타냅니다.

아래 코드는 통합 문서에서 사용하지 않은 스타일, 이름 또는 빈 지역 셀을 제외하여 통합 문서 크기를 줄여줍니다.

//create a new workbook
var workbook = new GrapeCity.Documents.Excel.Workbook();
Stream fileStream = this.GetResourceStream("xlsx\\File needs to be optimized.xlsx");
workbook.Open(fileStream);

XlsxSaveOptions options = new XlsxSaveOptions
{
    ExcludeEmptyRegionCells = true,
    ExcludeUnusedStyles = true,
    ExcludeUnusedNames = true
};

using (MemoryStream outputStream = new MemoryStream())
{
    workbook.Save(outputStream, options);
    outputStream.Position = 0;
    workbook.Open(outputStream, OpenFileFormat.Xlsx);
}

// Save to an excel file
workbook.Save("OptionsToOptimizeFileSize.xlsx");


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모

JDK 8을 대상으로 하는 GcExcel Java

이제 Java는 JDK 6 및 JDK 7을 지원하지 않으므로, GcExcel에서도 더 이상 JDK 6 & 7을 지원하지 않으며 이제 v6 릴리스부터는 JDK 8을 대상으로 합니다. 또한 GcExcel에서는 GcExcel Extension 패키지를 프로젝트에 추가할 필요가 더 이상 없습니다. JDK 8 지원에 대해 업데이트된 세부 정보는 다음 주제를 참조하십시오.

GcExcel 템플릿의 향상된 기능

페이지가 매겨진 스프레드시트 보고서의 새롭게 향상된 기능 보고

최신 릴리스에서 GcExcel 템플릿은 워크시트 레이아웃에서 고정된 수의 행으로 별도의 워크시트를 통해 통합 문서의 페이지 넘김을 관리하도록 'TemplateOptions.PaginationMode' 및 CountPerPage 속성(CP) 속성을 도입했습니다.

v6에서는 추가 레이아웃 작업을 위해 새로운 API가 도입되었습니다. 페이지가 매겨진 템플릿 기능을 통해 새로운 API를 사용하여 다음 유형의 레이아웃을 만들 수 있습니다.



페이지가 매겨진 스프레드시트에서 페이지 또는 그룹에 헤더/푸터 구성


새로운 API RepeatTypeNoRepeatAction 및 RepeatWithGroup이 추가되어 그룹 내에서 셀 값을 반복하거나 각 페이지에 페이지/그룹 헤더/푸터를 구성할 수 있습니다.

  • RepeatType 속성은 RepeatWithGroup 속성이 설정될 때 그룹 내에서 셀 값을 반복하는 방법을 결정합니다.
  • NoRepeatAction 속성은 현재 페이지에 표시되지 않는 경우 일반 콘텐츠의 삭제 모드를 설정하는 방법을 결정합니다.
  • RepeatWithGroup 속성은 생성된 보고서에서 그룹으로 반복하는 템플릿의 셀 참조를 지정합니다.

다음 이미지에서 RepeatType은 Patient 및 Specimen 정보에 FirstPage로 설정되었으며 RepeatWithGroup은 D3로 설정되었습니다. 이는 페이지 헤더 범위 A6:I18이 D3에 설정된 모든 새로운 Patient ID에 대해 반복됨을 의미합니다.




그룹의 페이지 번호 및 페이지 수


고정된 행 레이아웃에서 새로운 속성이 도입되었습니다. PageNumber는 현재 페이지의 페이지 번호를 설정하며 PageCount는 현재 그룹의 페이지 수를 설정합니다. 이 속성은 그룹의 현재 페이지 번호와 그룹의 전체 페이지 수를 나타내는 데 도움이 됩니다. 두 개의 속성은 구문 - PageNumber(문자열 셀) 및 PageCount(문자열 셀)를 사용하여 정의할 수 있습니다. 아래 레이아웃에서 Patient ID P001의 정보는 4장의 페이지로 페이지가 매겨지며 현재 페이지 수를 표시할 수 있습니다.



페이지 크기를 기반으로 한 스프레드시트 페이지 매기기


지금까지 워크시트 레이아웃에서 고정된 수의 행을 생성하고 여러 워크시트로 페이지를 매기는 CP(CountPerPage) 속성을 기반으로 워크시트의 페이지를 매겨왔습니다. 하지만 보고서는 Excel에서 페이지 설정으로 결정되는 페이지 크기를 기반으로 페이지를 매길 수 있습니다. 이 경우에 CP 속성은 설정되어 있지 않거나 *로 설정되며 TemplateOptions.PaginationMode는 true입니다. 보고서는 페이지 크기를 기반으로 여러 통합 문서로 페이지가 매겨집니다.

이 유형의 페이지 매김에서 새로운 속성 RepeatOutput, KeepTogether 및 AttachTo가 추가되어 각 그룹의 그룹 및 소계와 상관없이 페이지당 최대 수의 줄 다음에 페이지 나누기를 삽입하는 데 도움을 줍니다. 이 경우 최대 줄 수는 용지 크기에 따라 다릅니다.

  • RepeatOutput 속성은 병합된 셀의 값이 보고서의 첫 번째 페이지에만 혹은 각 페이지에 표시될지 여부를 지정합니다.
  • KeepTogether 속성은 셀 및 해당 하위 항목이 동일한 페이지에 표시되도록 합니다. 이 속성을 통해 가로 페이지 매김 또는 세로 페이지 넘김으로 셀을 함께 유지하려는 경우를 선택할 수 있습니다.
  • AttachTo 속성을 사용하면 셀 템플릿을 다른 셀과 바인딩하여 페이지에 홀로 표시되지 않도록 합니다. 이 속성을 사용하여 문서에 분리된 헤더/푸터를 방지할 수 있습니다.

아래 예제는 페이지 크기를 기반으로 페이지를 매기는 보고서를 나타냅니다. Excel의 페이지 설정을 기반으로 워크시트에서 행이 최대 줄 수에 도달하면 보고서는 템플릿 그룹 설정과 관계없이 다음 워크시트에 페이지를 매깁니다. 여기에서 'RepeatOutput'은 반복하도록 선택할 수 있는 병합된 셀에 설정되거나 각 워크시트에 설정되지 않습니다.



Excel 템플릿 레이아웃을 확인하려면 위의 속성으로 수행할 수 있습니다. 이 블로그를 살펴보시기 바랍니다.

.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모


원본 템플릿 또는 프로세스 특정 템플릿 워크시트 유지

지금까지 전체 통합 문서 템플릿을 하나의 보고서로 처리할 수 있었습니다. 하지만 이제 GcExcel에서는 원본 템플릿 통합 문서를 변경하지 않고 새 통합 문서 인스턴스를 반환하는 Workbook.GenerateTemplate() 메서드를 도입합니다.

또한 통합 문서에는 둘 이상의 템플릿이 있을 수 있으며 특정 템플릿 워크시트를 처리해야 할 수도 있습니다. GcExcel은 많은 템플릿에서 특정 템플릿 워크시트를 처리하는 프로비전을 추가합니다. 이 특정 템플릿 워크시트를 새로운 Workbook.GenerateTemplate() 메서드로 전달할 수 있습니다. 아래 코드를 참조하십시오.

IWorkbook workbook = workbook.GenerateReport(new IWorksheet[] { sheet });

이 메서드는 새 통합 문서 인스턴스를 반환하여 원본 템플릿을 변경하지 않고 매개 변수로 전달된 템플릿만 처리합니다. 매개 변수가 제공되지 않으면 GenerateTemplate() 메서드에서 모든 워크시트를 처리합니다.

다음 예제에서는 세 개의 워크시트 중에서 특정 워크시트 'PurchaseOrder'만 처리됩니다.

// Add data source
workbook.AddDataSource("dt", salesData);

// Init template global settings
workbook.Names.Add("TemplateOptions.KeepLineSize", "true");

// Process the template and return the specified report
IWorkbook report = workbook.GenerateReport(workbook.Worksheets["PurchaseOrder"]);

// Save the report as xlsx to a stream
report.Save(outputStream);


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모

선택한 영역에서 사용된 범위 가져오기

GcExcel은 워크시트에서 사용된 모든 범위를 가져오도록 UsedRange 속성 및 GetUsedRange 메서드를 제공하고 있습니다. 사용된 범위에 대한 전체 워크시트 대신 선택한 범위 내에서 사용된 범위를 가져오려고 할 수도 있습니다. GcExcel은 UsedRange 속성 및 GetUsedRange 메서드를 IRange 인터페이스를 추가합니다.

다음 코드는 선택한 범위 내에서 사용한 범위를 찾으며 사용한 범위의 셀 배경색을 변경합니다.

// Init data.
IRange range = sheet.Range["B2:D4"];
range.Value = "Unused";

// Select range.
IRange selectedRange = sheet.Range["C3:E5"];
selectedRange.Select();

// Get the used range from selectedRange.
IRange usedRange = selectedRange.UsedRange;
usedRange.Value = "Used";
usedRange.Interior.Color = Color.LightBlue;


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모

범위 참조 또는 정의된 이름으로 셰이프 텍스트 추가

많은 양의 직원 판매 데이터가 있고 그래픽 이미지를 사용하여 해당 월의 총 판매를 강조 표시하려 한다고 가정해보겠습니다. 셰이프를 데이터 바인딩된 수식으로 연결하여 선택한 셰이프에서 동적으로 해당 월의 판매를 나타낼 수 있습니다. 특정 상황에서 워크시트의 셰이프에는 범위 또는 정의된 이름을 참조하는 텍스트가 있을 수 있습니다. 이 텍스트는 범위 또는 정의된 이름에서 데이터별로 변경할 수 있습니다. GcExcel은 IShape.Formula 속성을 추가하여 현재 셰이프의 범위 참조 또는 정의된 이름을 설정하거나 제거합니다. IShape.Formula="=A1"(셀/범위에) 또는 IShape.Formula = "=refname"(정의된 이름에)을 설정할 수 있습니다.

아래 코드는 수식을 셰이프에 설정하여 수식이 있는 셀 G8을 참조합니다.

// set shape formula to G8
IShape shapeResult = worksheet.Shapes.AddShape(AutoShapeType.Rectangle, worksheet.Range["B7:D8"]);
shapeResult.Formula = "=G8";


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모

다이렉트 메서드를 사용하여 셀/셀 범위에 셰이프/그림 추가

IShape를 범위에 추가하는 프로세스를 간소화하기 위해 일련의 다이렉트 메서드가 제공되어 좌표를 확보하지 않고도 IShape를 범위에 추가할 수 있습니다. GcExcel은 새로운 다섯 가지 메서드를 IShape 인터페이스에 추가합니다.

  • AddPicture() - 현재 시트의 지정된 범위에서 기존 파일로부터 그림 생성
  • AddShape() - 현재 시트의 지정된 범위에서 새 AutoShape를 나타내는 개체 반환
  • AddChart() - 현재 시트의 지정된 범위에서 차트 생성
  • AddConnector() - 현재 시트의 지정된 범위에서 커넥터 생성
  • AddCameraPicture() - 참조 범위에서 현재 시트의 대상 범위에 그림 생성

다음 코드는 커넥터와 함께 범위에 직접 그림을 추가합니다.

var workbook = new GrapeCity.Documents.Excel.Workbook();

IWorksheet worksheet = workbook.Worksheets[0];

// Place the same picture to two range
System.IO.Stream stream = this.GetResourceStream("puffins.jpg");
IShape smallPicture = worksheet.Shapes.AddPicture(stream, ImageType.JPG, worksheet.Range["B2:B4"]);
IShape bigPicture = worksheet.Shapes.AddPicture(stream, ImageType.JPG, worksheet.Range["D4:F12"]);

worksheet.Shapes.AddConnector(ConnectorType.Straight, worksheet.Range["C2:F3"]);
worksheet.Shapes.AddConnector(ConnectorType.Straight, worksheet.Range["B5:C12"]);

// Save to an excel file
workbook.Save("AddPictureToRange.xlsx");


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모

도움말 기능을 포함한 새 Lambda 함수 지원

워크시트에 복잡한 계산이 포함된 경우 상세히 이에 대해 알아야 합니다. 여기에는 오류가 발생하기 쉬우며 유지가 어려울 수 있습니다. 왜 복잡한 계산을 한 번에 추가해서 단순한 이름을 제공하고 워크시트에서 다시 사용하지 않나요? GcExcel은 프로그래밍 방식으로 LAMBDA 함수를 추가하기 위한 지원을 제공합니다. 함수로 추상적인 프로세스를 돕고 재사용 가능한 사용자 정의 함수를 만들어 친숙한 이름으로 호출합니다. 구문은 단순합니다. 함수를 통합 문서의 이름 컬렉션에 추가하기만 하면 됩니다.

=LAMBDA([parameter1, parameter2, …,] calculation)

위의 구문은 매개 변수로 LAMBDA 함수를 추가하여 셀 참조, 문자열 또는 번호 등을 함수에 전달합니다. 최대 253개 매개 변수를 입력할 수 있습니다. 이 인수는 선택 사항입니다. 기타 매개 변수는 실행할 수식이며 함수의 결과로 반환합니다.

아래 코드는 workbook.Names 컬렉션에서 LAMBDA 함수의 이름을 'CountWords'로 지정합니다. LAMBDA 함수는 텍스트에서 단어 수를 계산하는 데 긴 계산을 실행합니다. 이 함수에는 단순한 이름인 'CountWords'가 주어지며 긴 계산 함수를 반복하는 대신 워크시트에서 여러 번 다시 사용할 수 있습니다.

workbook.Names.Add("CountWords", "=LAMBDA(text,IF(LEN(TRIM(text))=0,0,LEN(TRIM(text))-LEN(SUBSTITUTE(TRIM(text),\" \",\"\"))+1))");


GcExcel에서 LAMBDA 함수 지원에는 배열과의 작업을 위해 LAMBDA 함수를 돕는 새로운 일곱 가지 Helper 함수 지원이 포함됩니다.

  • BYROW
  • BYCOL
  • SCAN
  • REDUCE
  • MAP
  • MAKEARRAY
  • ISOMITTED

각 함수는 .NET 및 Java 데모를 살펴보시기 바랍니다.


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모


새로운 텍스트 및 배열 조작 Excel 함수

GcExcel은 이제 다음의 함수 집합을 지원합니다.

텍스트 조작 함수

이전에는 텍스트 일부를 추출하려면 여러 함수를 사용해야 했습니다. 예를 들어, 텍스트에서 First Name을 추출하려면 셀에서 'Mark Taylor'라고 하면 찾기 또는 검색 기능을 사용하여 목록에서 첫 번째 공백의 위치를 찾은 다음 데이터를 추출하도록 LEN으로 결합된 왼쪽, 중간, 오른쪽을 사용해야 했습니다. 하지만 새로운 텍스트 조작 함수는 다양한 텍스트 부분을 추출하거나 결합하고 단일 함수를 사용하여 다른 셀의 결과를 분산하도록 돕습니다. 다음의 새 텍스트 조작 함수가 지원됩니다.

  • TEXTSPLIT, TEXTBEFORE 및 TEXTAFTER

다음 코드는 TEXTBEFORE 함수를 사용하여 문장에서 단어 앞의 텍스트를 찾습니다.

sheetOfTEXTBEFORE.Range["A3"].Value = "Little red Riding Hood's red hood";
sheetOfTEXTBEFORE.Range["A4"].Value = "Formulas";
sheetOfTEXTBEFORE.Range["A4"].Font.Bold = true;
sheetOfTEXTBEFORE.Range["B4"].Value = "Results";
sheetOfTEXTBEFORE.Range["B4"].Font.Bold = true;
sheetOfTEXTBEFORE.Range["B5"].Formula2 = "=TEXTBEFORE(A2,\"Red\")";
sheetOfTEXTBEFORE.Range["A5"].Formula = "=FORMULATEXT(B5)";
sheetOfTEXTBEFORE.Range["B6"].Formula2 = "=TEXTBEFORE(A3,\"red\",2)";
sheetOfTEXTBEFORE.Range["A6"].Formula = "=FORMULATEXT(B6)";
sheetOfTEXTBEFORE.Range["B7"].Formula2 = "=TEXTBEFORE(A3,\"red\",-2)";
sheetOfTEXTBEFORE.Range["A7"].Formula = "=FORMULATEXT(B7)";
sheetOfTEXTBEFORE.Range["B8"].Formula2 = "=TEXTBEFORE(A3,\"Red\")";
sheetOfTEXTBEFORE.Range["A8"].Formula = "=FORMULATEXT(B8)";
sheetOfTEXTBEFORE.Range["B9"].Formula2 = "=TEXTBEFORE(A3,\"Red\",,1)";
sheetOfTEXTBEFORE.Range["A9"].Formula = "=FORMULATEXT(B9)";
sheetOfTEXTBEFORE.Range["B10"].Formula2 = "=TEXTBEFORE(A3,\"Riding\")";
sheetOfTEXTBEFORE.Range["A10"].Formula = "=FORMULATEXT(B10)";


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모


배열 조작 함수

배열 조작 함수는 범위를 결합하고 모양을 만들어 수식 범위를 분산하는 데 도움을 줍니다. 워크시트에 동적 배열 수식이 있는 경우 이러한 새 함수는 스프레드시트를 더욱 뛰어나게 해주고 동적 배열과의 최적화된 고급 작업을 지원합니다. 다음의 새 함수가 추가되었습니다.

  • HSTACK, VSTACK, TOROW, TOCOL, WRAPROWS, WRAPCOLS, TAKE, DROP, CHOOSEROWS, CHOOSECOLS 및 EXPAND

다음 코드는 배열 데이터를 하나의 행으로 변환합니다.

sheetOfTOROW.Range["A7"].Value = "Result";
sheetOfTOROW.Range["A7"].Font.Bold = true;
sheetOfTOROW.Range["A8"].Formula2 = "=TOROW(A2:D4)";


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모

범위 교집합, 합집합 및 오프셋

GcExcel은 두 범위의 교집합/합집합/오프셋을 찾도록 API를 지원하고 있습니다. v6에서는 다이렉트 메서드를 도입하여 이 작업을 더욱 단순하게 만들었습니다.

  • IRange.Intersect(IRange range2) 또는 IRange.Intersect(params IRange[] ranges)는 현재 범위 및 하나 이상의 범위 매개 변수의 교집합을 가져옵니다.
  • IRange.Union(IRange range2) 또는 IRange.Union(params IRange[] ranges)은 현재 범위 및 하나 이상의 범위 매개 변수의 합집합을 가져옵니다.
  • IRange.Offset(int rowOffset, int columnOffset)은 현재 범위의 오프셋을 가져옵니다.

아래 코드는 교집합 및 합집합 범위에 대해 각각 설정된 내부색으로 두 범위의 교집합 및 합집합을 수행합니다.

// Set the intersection of two range value and style.
var intersectRange = worksheet.Range["A2:E6"].Intersect(worksheet.Range["C4:G8"]);
intersectRange.Interior.Color = Color.FromArgb(56, 93, 171);

var firstUnionRange = worksheet.Range["A11:D13"];
firstUnionRange.Merge();
firstUnionRange.Interior.Color = Color.FromArgb(56, 93, 171);
firstUnionRange.HorizontalAlignment = HorizontalAlignment.Center;
firstUnionRange.VerticalAlignment = VerticalAlignment.Center;

var secondUnionRange = worksheet.Range["D14:G16"];
secondUnionRange.Merge();
secondUnionRange.Interior.Color = Color.FromArgb(145, 167, 214);
secondUnionRange.HorizontalAlignment = HorizontalAlignment.Center;
secondUnionRange.VerticalAlignment = VerticalAlignment.Center;
// Set the union of two range value and font style.
var unionRange = worksheet.Range["A11:D13"].Union(worksheet.Range["D14:G16"]);


.NET 도움말 | Java 도움말 | .NET 데모(교집합 및 합집합) | .NET 데모(오프셋) | Java 데모(교집합 및 합집합) | Java 데모(오프셋)

자동 맞춤 컨트롤 옵션

GcExcel은 Excel 파일이 열려 있을 때 행/열의 자동 맞춤을 지원하고 있습니다. 하지만 v6에서는 이 동작을 컨트롤하기 위해 새로운 옵션이 API에 추가되었습니다. GcExcel은 이제 파일을 연 후 행 높이를 자동 맞춤할지 여부를 가져오거나 설정하도록 XlsxOpenOptions.DoNotAutoFitAfterOpened 속성을 지원합니다. 기본값은 false입니다.


.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모

SpreadJS 기능 지원

GcExcel은 이제 추가 SpreadJS 기능을 지원하도록 새 옵션을 추가합니다.

  • JSON I/O에서 'RowColumnStates' 지원
  • JSON I/O에서 통합 문서 간 수식 - 'externalReference' 지원
  • JSON 파일에서 셰이프로 부동 개체 및 그림 셰이프 작성 지원
  • JSON I/O에서 'allSheetsListVisible' 필드 지원

.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모




지금 바로 GcExcel Java를 다운로드하여 직접 테스트해보세요!

gcexcel-java.png

 
  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
  • 카카오톡으로 보내기
그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@grapecity.com | 전화 : 1670-0583 | 경기도 안양시 동안구 시민대로 230, B-703(관양동, 아크로타워) 그레이프시티(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 Copyright ⓒ 2023 GrapeCity inc.