Overview

Spreadsheet documents은 행과 열 형태의 표에 데이터를 담고 있는 문서이며, 워크북이라고도 합니다. 스프레드시트 문서는 다양한 형식이 존재합니다— Office Open XML(XLSX, XLSM 등), Microsoft Excel Binary File Format(XLS, XLT), OpenDocument Spreadsheet(ODS, FODS, OTS), 텍스트 기반 구분자‑구분 형식(CSV, TSV 등) 등. 이들 모두를 스프레드시트 형식군이라고 부릅니다. GroupDocs.Viewer는 거의 모든 스프레드시트 형식을 가져와서 HTML, PDF, PNG, JPEG 형식으로 렌더링(변환)할 수 있습니다. 이 문서에서는 그 방법과 사용 가능한 옵션, 언제·왜 사용해야 하는지를 설명합니다.

Rendering a workbook, opened in MS Excel, to the HTML format

Basic usage

먼저 옵션에 대해 이야기해야 합니다. 공개 API에 별도의 클래스가 있습니다: SpreadsheetOptions (GroupDocs.Viewer.Options 네임스페이스에 포함). 이 클래스는 스프레드시트 형식군의 렌더링을 조정하기 위해 특별히 설계되었습니다. 네 가지 뷰 옵션 모두에서 SpreadsheetOptions 속성을 통해 접근할 수 있습니다:

명시적으로 지정하지 않으면, SpreadsheetOptions 속성은 기본적으로 SpreadsheetOptions 클래스 인스턴스의 암시적 값을 갖습니다. 이는 본 문서에서 추후에 자세히 설명합니다.

한눈에 보면, GroupDocs.Viewer를 사용한 스프레드시트 렌더링은 매우 간단하며 다른 형식과 동일합니다—ViewOptions 인스턴스를 만들고, 입력 스프레드시트 문서를 지정한 뒤 Viewer 인스턴스를 생성한 뒤, Viewer.View(viewOptions) 메서드를 호출하면 됩니다. 아래 코드는 단일 입력 스프레드시트 파일을 HTML, PDF, PNG, JPEG 네 가지 출력 형식으로 렌더링하는 예시입니다. 옵션 클래스 인스턴스를 생성하는 것 외에는 스프레드시트와 관련된 튜닝이 없으며, 모든 스프레드시트 옵션은 기본값으로 설정됩니다.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

HtmlViewOptions htmlOptions = HtmlViewOptions.ForEmbeddedResources("worksheet_{0}.html");
PdfViewOptions pdfOptions = new PdfViewOptions("Output_spreadsheet.pdf");
PngViewOptions pngOptions = new PngViewOptions("worksheet_{0}.png");
JpgViewOptions jpegOptions = new JpgViewOptions("worksheet_{0}.jpeg");

using (Viewer viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(htmlOptions);
    viewer.View(pdfOptions);
    viewer.View(pngOptions);
    viewer.View(jpegOptions);
}

이제 워크시트에 대해 이야기해 보겠습니다. 모든 스프레드시트는 최소 하나의 워크시트를 가지고 있습니다. Microsoft Excel과 같은 대부분의 표 처리 소프트웨어에서는 워크시트를 형태로 표시합니다. 일부 스프레드시트 형식은 워크시트가 하나뿐일 수 있습니다—예를 들어 모든 텍스트 기반 구분자‑구분 형식(CSV, TSV 등)이 해당됩니다.

기본적으로 GroupDocs.Viewer는 주어진 스프레드시트의 모든 워크시트를 렌더링합니다. 하지만 이를 변경할 수 있습니다. Viewer.View() 메서드에는 2번째 매개변수로 페이지 번호 배열(Int32[] pageNumbers)을 받는 오버로드가 있습니다—이 매개변수를 사용하면 지정된 페이지(워크시트)만 렌더링됩니다. 이 매개변수는 모든 페이지를 지원하는 형식에 적용되는 범용 매개변수이며, 스프레드시트 형식군에서는 정확히 워크시트 번호를 의미합니다.

페이지 번호와 워크시트 번호는 1부터 시작한다는 점을 유의하세요(0이 아님).

아래 예시는 3개의 워크시트를 가진 스프레드시트에서 1번째와 3번째 워크시트를 PNG로 렌더링하는 방법을 보여줍니다.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

PngViewOptions pngOptions = new PngViewOptions("worksheet_{0}.png");
using (Viewer viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(pngOptions, 1, 3);
}

Splitting worksheets into pages

GroupDocs.Viewer는 문서를 페이지 단위로 렌더링합니다. 여기서 페이지란 디스플레이 화면이나 A4 용지와 비슷한 상대적으로 작은 사각형 영역을 의미합니다. 반면 워크시트는 매우 클 수 있습니다. 예를 들어 이제는 사용되지 않는 XLS 형식은 최대 256열·65536행을 지원하고, 최신 XLSX (Office Open XML Workbook) 형식과 Microsoft Excel은 최대 16384열·1048576행을 지원합니다. 워크시트를 페이지에 맞추는 작업은 GroupDocs.Viewer로 스프레드시트를 렌더링할 때 핵심적인 부분입니다. 워크시트를 페이지에 맞추기 위해 GroupDocs.Viewer는 워크시트 분할을 수행합니다—워크시트를 여러 사각형 청크로 나누고 각각을 별도의 페이지에 배치합니다. 아래에 5가지 분할 방법을 나열하고 설명합니다.

중요한 점—이 모든 분할 방법은 동일한 방식으로 지정됩니다—SpreadsheetOptions 클래스 인스턴스를 생성하는 특정 정적 메서드(팩터리 메서드)를 사용합니다.

Render whole worksheet on one page

SpreadsheetOptions.ForOnePagePerSheet()

가장 쉽고 간단한 방법—분할을 끄고 페이지 크기를 전체 워크시트 내용에 맞게 조정합니다. 워크시트가 작다는 것이 이미 알려져 있을 때 좋은 선택입니다. 그러나 워크시트가 매우 크면 결과가 끔찍할 수 있습니다. 특히 HTML 형식으로 렌더링할 경우 결과 HTML 파일이 수십·수백 MiB에 달해 웹 브라우저에서 열기 어려울 수 있습니다. JPEG 형식으로 렌더링할 경우 가로나 세로가 65535 픽셀을 초과하면 문제가 발생합니다. 따라서 이 모드는 신중히 사용하세요.

Render worksheet on one page

Split worksheet by page breaks

SpreadsheetOptions.ForRenderingByPageBreaks()

Microsoft Excel 자체가 용지 크기와 페이지 설정(방향, 여백 등)에 따라 자동 페이지 나눔을 추가합니다. “View” 탭에서 “Page Break Preview” 모드로 전환하면 파란색 선으로 워크시트 전체가 사각형 청크로 나뉘어 “Page 1”, “Page 2” 등으로 표시됩니다. 이것이 Excel이 워크시트를 페이지로 나누는 제안 방식입니다.

이 방법을 사용하면 GroupDocs.Viewer는 Excel과 동일하게 페이지 나눔에 따라 워크시트를 분할합니다.

참고로 이 옵션—페이지 나눔에 따라 워크시트를 분할하는 것—은 BaseViewOptions.SpreadsheetOptions 속성의 기본 옵션이며, 뷰 옵션 클래스를 생성하면 기본적으로 [ForRenderingByPageBreaks()] 옵션이 선택됩니다.

Render only print area

SpreadsheetOptions.ForRenderingPrintArea()

Excel에는 인쇄 영역 개념도 있습니다. 인쇄 영역은 워크시트 내에서 인쇄 대상으로 지정된 하나 이상의 셀 범위이며, 인쇄 영역 밖의 내용은 전혀 인쇄되지 않습니다. 인쇄 영역에 셀 범위를 추가하려면 “Page Layout” 탭에서 “Print Area” 버튼을 클릭한 뒤 “Set Print Area”를 선택합니다(아래 스크린샷 참고). 추가로 다른 셀 범위를 인쇄 영역에 포함하려면 해당 범위를 선택하고 “Print Area” → “Add to Print Area”를 클릭합니다. “Page Break Preview” 모드에서는 인쇄 영역에 포함된 모든 셀 범위를 확인할 수 있습니다.

Render only print area

Render print area and split by page breaks

SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()

GroupDocs.Viewer는 인쇄 영역페이지 나눔을 하나의 모드로 결합하는 고유 기능을 제공합니다. 이 경우 Viewer는 워크시트의 모든 인쇄 영역 셀 범위와 페이지 나눔을 동시에 고려하여 워크시트를 페이지로 분할합니다.

아래 스크린샷에서 빨간 선은 인쇄 영역을, 파란 선은 페이지 나눔을 나타냅니다.

Render print area and split by page breaks

Split worksheet into pages manually by rows and columns

SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage)
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage, int countColumnsPerPage)

위에서 설명한 분할 방법 중 어느 것도 만족스럽지 않거나, CSV와 같이 페이지 나눔·인쇄 영역을 지원하지 않는 형식일 경우, GroupDocs.Viewer는 수를 직접 지정하여 페이지를 나눌 수 있게 합니다. 아래 스크린샷은 “행만 기준” 분할과 “행·열 모두 기준” 분할의 차이를 보여줍니다.

sForSplitSheetIntoPages 메서드의 첫 번째 오버로드(파라미터 1개)를 사용하면 행만 기준으로 분할됩니다. 두 번째 오버로드(파라미터 2개)를 사용하면 행·열 모두 기준으로 분할됩니다.

Split worksheet into pages manually by rows and columns

Adjusting additional options

위에서 설명한 내용만으로도 스프레드시트를 렌더링하는 데는 충분하지만, 추가 옵션을 통해 결과를 더욱 세밀하게 조정할 수 있습니다.

추가 옵션은 크게 두 종류로 나뉩니다—SpreadsheetOptions 클래스의 속성으로 제공되는 옵션과, 모든 4가지 렌더링 모드에 공통인 ViewOptions 추상 클래스에 정의된 옵션입니다.

Render row and column headings

MS Excel이나 유사한 표 처리 프로그램이 스프레드시트를 열면 열 머리글(A, B, C, …)과 행 머리글(1, 2, 3, …)을 표시합니다. 기본적으로 GroupDocs.Viewer는 이러한 머리글을 표시하지 않는데, 이는 문서 자체가 아니라 프로그램 인터페이스의 일부이기 때문입니다. 하지만 RenderHeadings Boolean 속성을 true 로 설정하면 행·열 머리글이 출력 문서에 포함됩니다.

Render row and column headings

Render worksheet gridlines

이 옵션도 앞의 옵션과 비슷합니다. 기본적으로 GroupDocs.Viewer는 셀 사이의 격자를 표시하지 않는데, 이는 격자가 스프레드시트 자체가 아니라 표 처리 프로그램이 제공하는 시각적 보조선이기 때문입니다. RenderGridLines Boolean 속성을 true 로 설정하면 격자가 출력 문서에 포함됩니다.

Render worksheet gridlines

Control cell text overflow

셀 안의 텍스트가 셀 경계를 초과하는 경우가 흔히 발생합니다. 이를 어떻게 처리할까요? GroupDocs.Viewer는 SpreadsheetOptions.TextOverflowMode 라는 특수 속성을 제공합니다. TextOverflowMode 열거형은 4가지 옵션을 가지고 있으며, 아래에서 각각을 설명합니다.

OverlayIfNextIsEmpty

기본값은 OverlayIfNextIsEmpty이며, 이는 Microsoft Excel의 기본 동작을 모방합니다. 인접 셀이 비어 있을 경우에만 텍스트가 넘쳐 흐르며, 인접 셀이 비어 있지 않으면 텍스트가 잘립니다.

OverlayIfNextIsEmpty enum value

위 스크린샷은 OverlayIfNextIsEmpty 옵션으로 렌더링된 HTML 파일을 보여줍니다. 셀 B2에 긴 텍스트가 있지만 C2가 비어 있지 않아 잘려 보이고, C3은 인접 셀 D2, E2가 비어 있어 텍스트가 넘쳐 흐릅니다.

Overlay

Overlay 옵션은 보다 공격적인 동작을 합니다. 셀 경계를 초과하는 텍스트는 인접 셀에 관계없이 무조건 넘쳐 흐르며, 인접 셀에 기존 데이터가 있으면 덮어씁니다.

Overlay enum value

스크린샷에서 B2의 긴 텍스트가 C2, D2, E2, F2까지 넘쳐 흐르고, 그 결과 C2, F2에 있던 원래 텍스트가 사라진 것을 확인할 수 있습니다.

HideText

HideText 옵션은 Overlay와 반대 동작을 합니다. 셀 경계를 초과하는 텍스트는 인접 셀에 빈 공간이 있더라도 무조건 잘려서 표시되지 않습니다.

HideText enum value

위 예시에서 C3 셀의 텍스트는 인접 D3 등에 빈 공간이 있음에도 불구하고 잘려서 보이지 않습니다.

AutoFitColumn

AutoFitColumn 옵션은 텍스트를 잘라내는 대신 해당 셀이 속한 열의 너비를 늘려 텍스트 전체가 보이도록 합니다. 텍스트 길이에 관계없이 열 너비가 자동으로 확대됩니다.

AutoFitColumn enum value

스크린샷에서 보듯이 열 너비가 확대되어 텍스트가 모두 표시됩니다. 다만 텍스트가 지나치게 길 경우 페이지가 매우 넓어져 가로 스크롤이 불편해질 수 있습니다.

Render hidden rows and columns

Excel 등 표 처리 프로그램은 특정 행·열을 숨길 수 있습니다. 기본적으로 GroupDocs.Viewer는 숨긴 행·열을 렌더링하지 않지만, 이를 변경할 수 있습니다. ViewOptions.SpreadsheetOptions.RenderHiddenRowsViewOptions.SpreadsheetOptions.RenderHiddenColumns 속성을 true 로 설정하면 HTML, PDF, PNG, JPEG 형식으로 렌더링할 때 숨긴 행·열이 출력에 포함됩니다.

Render hidden worksheets

숨긴 워크시트도 마찬가지로 기본적으로 렌더링되지 않습니다. RenderHiddenPages 속성을 true 로 설정하면 숨긴 워크시트가 출력에 포함됩니다. 이 속성은 SpreadsheetOptions가 아니라, 모든 뷰 옵션에 공통인 BaseViewOptions 추상 클래스에 정의되어 있다는 점을 기억하세요.

Skip empty rows and columns

일부 스프레드시트는 희소 형태—많은 빈 셀을 포함합니다. GroupDocs.Viewer는 빈 행·열을 건너뛰는 기능을 제공합니다. SpreadsheetOptions.SkipEmptyRowsSpreadsheetOptions.SkipEmptyColumns Boolean 속성을 true 로 설정하면 결과 HTML, PDF, PNG, JPEG에 빈 행·열이 제외됩니다.

Skip empty rows and columns

위 스크린샷에서 두 속성이 모두 활성화된 모습을 확인할 수 있습니다.

Render or hide cell comments

셀에 달린 주석도 기본적으로 모두 렌더링됩니다. BaseViewOptions.RemoveComments 속성을 true 로 설정하면 주석이 출력되지 않습니다. 이 속성은 BaseViewOptions 클래스에 위치한다는 점을 유의하세요.

Render or hide cell comments

위 예시는 기본 옵션으로 XLSX 파일을 PNG로 렌더링했을 때 E2 셀의 주석이 PNG에 포함된 모습을 보여줍니다.

Set worksheet margins in the output PDF pages

PDF 형식으로 워크시트를 렌더링할 때 페이지 여백(페이지 경계와 내용 사이의 거리)을 제어할 수 있습니다. 상하좌우 네 가지 여백을 설정하는 속성은 다음과 같습니다:

  • SpreadsheetOptions.TopMargin
  • SpreadsheetOptions.RightMargin
  • SpreadsheetOptions.BottomMargin
  • SpreadsheetOptions.LeftMargin

기본값은 모두 음수이며, 이는 GroupDocs.Viewer가 기본 여백을 적용한다는 의미입니다. PDF가 대상 형식일 때만 여백이 적용됩니다.

아래 코드는 PdfViewOptions 를 생성하고 네 가지 여백을 모두 지정한 뒤 문서를 렌더링하는 예시입니다.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

PdfViewOptions pdfViewOptions = new PdfViewOptions("Output.pdf");
pdfViewOptions.SpreadsheetOptions = SpreadsheetOptions.ForOnePagePerSheet();
pdfViewOptions.SpreadsheetOptions.TopMargin = 2;
pdfViewOptions.SpreadsheetOptions.BottomMargin = 4;
pdfViewOptions.SpreadsheetOptions.LeftMargin = 8;
pdfViewOptions.SpreadsheetOptions.RightMargin = 0;

using (var viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(pdfViewOptions);
}

아래 이미지는 적용 결과를 보여줍니다.

Set worksheet margins in the output PDF pages

Conclusion

스프레드시트 형식은 구조가 복잡하고, 문서마다 내용의 종류와 길이가 크게 다를 수 있습니다. 기본 옵션만으로는 복잡한 스프레드시트를 원하는 형식으로 렌더링하기 어려운 경우가 많으며, 그래서 GroupDocs.Viewer는 방대한 옵션 세트를 제공하여 사용자가 필요에 맞게 렌더링을 조정할 수 있도록 합니다.

See Also

Get a free trial

.NET용 GroupDocs.Viewer 무료 체험판은 releases.groupdocs.com에서 다운로드할 수 있습니다. 또한 여기에서 제한 없이 모든 기능을 시험해 볼 수 있는 임시 라이선스를 발급받을 수 있습니다.