개요

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으로 렌더링(변환)할 수 있습니다. 이 문서에서는 그 방법과 사용 가능한 옵션, 언제·왜 사용해야 하는지를 설명합니다.

MS Excel에서 열어본 워크북을 HTML 형식으로 렌더링

기본 사용법

우선 옵션에 대해 설명해야 합니다. 공개 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() 메서드에는 두 번째 매개변수로 페이지 번호 배열(Int32[] pageNumbers)을 받는 오버로드가 있습니다—이 매개변수를 사용하면 지정된 페이지(워크시트)만 렌더링됩니다. 이 매개변수는 일반적인 페이지 번호와 동일하게 1부터 시작하는 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);
}

워크시트를 페이지로 분할하기

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

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

워크시트를 한 페이지에 전체 표시

SpreadsheetOptions.ForOnePagePerSheet()

가장 쉽고 간단한 방법—분할을 끄고 페이지 크기를 전체 워크시트에 맞춥니다. 워크시트 크기가 작을 때 적합하지만, 워크시트가 매우 크면 결과가 좋지 않을 수 있습니다. 예를 들어 HTML로 렌더링할 경우 결과 HTML 파일이 수십~수백 MiB에 달해 웹 브라우저에서 열기가 어려워질 수 있습니다. JPEG으로 렌더링할 경우 가로나 세로가 65535 픽셀을 초과하면 문제가 발생합니다. 따라서 이 모드는 신중히 사용해야 합니다.

워크시트를 한 페이지에 전체 표시

페이지 나누기를 기준으로 워크시트 분할

SpreadsheetOptions.ForRenderingByPageBreaks()

Microsoft Excel은 용지 크기·방향·여백 등을 기준으로 자동 페이지 나누기를 삽입합니다. “View”(보기) 탭에서 “Page Break Preview”(페이지 나누기 미리보기) 모드로 전환하면 파란색 선으로 워크시트가 여러 직사각형 청크로 나뉘며 각각 “Page 1”, “Page 2” 등으로 표시됩니다. 이 방식을 그대로 따라가면 워크시트를 페이지 나누기 기준으로 분할합니다.

이 옵션은 BaseViewOptions.SpreadsheetOptions 속성의 기본 옵션이며, 뷰 옵션 인스턴스를 만들면 자동으로 [ForRenderingByPageBreaks()]가 적용됩니다.

인쇄 영역만 렌더링

SpreadsheetOptions.ForRenderingPrintArea()

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

인쇄 영역만 렌더링

인쇄 영역과 페이지 나누기를 동시에 적용

SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()

GroupDocs.Viewer는 인쇄 영역 + 페이지 나누기를 단일 모드로 결합할 수 있는 고유 기능을 제공합니다. 이 경우 인쇄 영역 셀 범위와 페이지 나누기 위치를 동시에 고려해 워크시트를 페이지로 분할합니다.

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

인쇄 영역과 페이지 나누기 동시 적용

행·열 수로 직접 페이지 나누기

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

위의 분할 방법이 모두 적합하지 않거나, CSV와 같이 페이지 나누기·인쇄 영역을 지원하지 않는 형식일 경우, 행·열 수를 직접 지정해 페이지를 나눌 수 있습니다. 아래 스크린샷은 행만 기준으로 나누는 경우와 행·열 모두 기준으로 나누는 경우를 비교합니다.

첫 번째 오버로드(ForSplitSheetIntoPages(int))를 사용하면 행만 기준으로 분할됩니다. 두 번째 오버로드(ForSplitSheetIntoPages(int, int))를 사용하면 행·열 모두 기준으로 분할됩니다.

행·열 기준으로 워크시트 페이지 직접 분할

추가 옵션 조정

위에서 설명한 내용만으로도 스프레드시트를 렌더링하기에 충분하지만, 결과물을 더욱 세밀하게 제어할 수 있는 다양한 선택적 옵션이 존재합니다.

이 옵션들은 크게 두 종류로 나뉩니다:

  • SpreadsheetOptions 클래스의 속성으로 제공되는 옵션
  • 모든 네 가지 렌더링 모드에 공통적인 ViewOptions 추상 클래스에 정의된 옵션

행·열 헤딩 렌더링

MS Excel 등 표 처리 프로그램은 열을 문자(A, B, C,…), 행을 숫자(1, 2, 3,…)로 표시합니다. 기본적으로 GroupDocs.Viewer는 이러한 헤딩을 출력에 포함하지 않지만, RenderHeadings 속성을 true 로 설정하면 헤딩이 표시됩니다. 기본값은 false 입니다.

행·열 헤딩 렌더링

워크시트 격자선 렌더링

기본적으로 격자선은 표시되지 않으며, 이는 격자선이 문서 자체가 아니라 표 처리 프로그램의 UI 요소이기 때문입니다. RenderGridLines 속성을 true 로 설정하면 격자선이 출력에 포함됩니다.

워크시트 격자선 렌더링

셀 텍스트 넘침 제어

셀 텍스트가 셀 범위를 초과할 때의 동작을 제어하는 옵션입니다. SpreadsheetOptions.TextOverflowMode 속성을 사용합니다. 이 속성은 TextOverflowMode 열거형을 값으로 가지며, 아래 네 가지 옵션이 있습니다.

OverlayIfNextIsEmpty

기본값이며, 인접 셀이 비어 있을 경우에만 텍스트가 넘칩니다. 인접 셀이 비어 있지 않으면 텍스트가 잘려서 표시됩니다.

OverlayIfNextIsEmpty 열거형 값

Overlay

인접 셀에 내용이 있든 없든 무조건 텍스트가 넘쳐서 인접 셀의 기존 내용이 삭제됩니다.

Overlay 열거형 값

HideText

텍스트가 셀 경계를 넘어가면 무조건 잘려서 표시됩니다. 인접 셀에 빈 공간이 있어도 적용되지 않습니다.

HideText 열거형 값

AutoFitColumn

컬럼 너비를 자동으로 확장하여 텍스트 전체가 보이도록 합니다. 텍스트가 매우 길 경우 페이지가 지나치게 넓어질 수 있습니다.

AutoFitColumn 열거형 값

숨겨진 행·열 렌더링

Excel 등에서 숨긴 행·열을 기본적으로는 렌더링하지 않지만, 다음 속성을 true 로 설정하면 출력에 포함됩니다.

  • ViewOptions.SpreadsheetOptions.RenderHiddenRows
  • ViewOptions.SpreadsheetOptions.RenderHiddenColumns

숨겨진 워크시트 렌더링

숨겨진 워크시트도 기본적으로는 제외됩니다. RenderHiddenPages 속성을 true 로 설정하면 포함됩니다. 이 속성은 SpreadsheetOptions 가 아니라 모든 뷰 옵션에 공통적인 BaseViewOptions에 정의되어 있습니다.

빈 행·열 건너뛰기

스프레드시트에 빈 행·열이 많이 포함된 경우, 다음 속성을 true 로 설정하면 렌더링 결과에서 해당 행·열을 제외할 수 있습니다.

  • SpreadsheetOptions.SkipEmptyRows
  • SpreadsheetOptions.SkipEmptyColumns
빈 행·열 건너뛰기

셀 주석 렌더링 여부

셀에 달린 주석은 기본적으로 모두 렌더링됩니다. BaseViewOptions.RemoveComments 속성을 true 로 설정하면 주석이 출력에서 제거됩니다. 이 속성은 BaseViewOptions에 위치합니다.

셀 주석 렌더링 여부

PDF 페이지에서 워크시트 여백 설정

PDF로 렌더링할 때 페이지 여백(상·하·좌·우)을 제어할 수 있습니다. 네 가지 속성은 다음과 같습니다.

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

기본값은 모두 음수이며, 이는 GroupDocs.Viewer가 기본 여백을 적용함을 의미합니다. PDF가 아닌 형식에서는 이 설정이 무시됩니다.

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);
}
PDF 페이지에서 워크시트 여백 설정

결론

스프레드시트 형식은 구조가 복잡하고, 문서마다 내용과 길이가 크게 다릅니다. 기본 옵션만으로는 복잡한 스프레드시트를 원하는 형식으로 정확히 렌더링하기 어려운 경우가 많습니다. 바로 이러한 이유로 GroupDocs.Viewer는 방대한 옵션 세트를 제공하며, 이를 통해 사용자는 자신의 요구에 맞게 렌더링을 섬세하게 조정할 수 있습니다.

관련 문서

무료 체험판 받기

GroupDocs.Viewer for .NET 무료 체험판은 releases.groupdocs.com에서 다운로드할 수 있습니다. 제한 없이 모든 기능을 사용해 보고 싶다면 여기에서 임시 라이선스를 발급받으세요.