概要
Spreadsheet documents は、行と列の表形式でデータを格納するドキュメントです。ワークブック とも呼ばれます。スプレッドシート ドキュメントには多数の形式があり、Office Open XML(XLSX、XLSM など)、Microsoft Excel Binary File Format(XLS、XLT)、OpenDocument Spreadsheet 形式(ODS、FODS、OTS)、テキストベースの区切り文字形式(CSV、TSV など)があります。これらは総称して Spreadsheet formats family と呼ばれます。GroupDocs.Viewer はインポート時にほぼすべてのスプレッドシート形式をサポートし、HTML、PDF、PNG、JPEG へレンダリング(変換)できます。本稿ではその方法と利用可能なオプション、使用シーンについて説明します。
基本的な使用方法
まず最初にオプションについて説明します。パブリック API には別クラスが用意されています:SpreadsheetOptions(GroupDocs.Viewer.Options 名前空間内)。このクラスはスプレッドシート形式ファミリのレンダリング調整専用に設計されています。4 つのビューオプションすべてから、SpreadsheetOptions プロパティでアクセスできます。
- HtmlViewOptions.SpreadsheetOptions スプレッドシート ドキュメントを HTML にレンダリングする場合,
- PdfViewOptions.SpreadsheetOptions スプレッドシート ドキュメントを PDF にレンダリングする場合,
- PngViewOptions.SpreadsheetOptions スプレッドシート ドキュメントを PNG にレンダリングする場合,
- JpgViewOptions.SpreadsheetOptions スプレッドシート ドキュメントを JPEG にレンダリングする場合.
明示的に指定しない場合、SpreadsheetOptions プロパティはデフォルトで同クラスのインスタンスが暗黙的に設定されます(本稿後半で詳しく説明します)。
一目で分かるように、GroupDocs.Viewer でスプレッドシートをレンダリングするのは非常に簡単で、他の形式と同様です。ViewOptions インスタンスを作成し、入力スプレッドシートを指定した Viewer インスタンスを生成し、Viewer.View(viewOptions) メソッドを呼び出すだけです。以下のサンプルは、単一の入力スプレッドシートを HTML、PDF、PNG、JPEG の 4 種類に出力する例です。オプションクラスのインスタンスを生成する以外にスプレッドシート固有のチューニングは行っていないため、すべてのスプレッドシートオプションはデフォルト値のままです。
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);
}
次に worksheets(ワークシート) について説明します。すべてのスプレッドシートには少なくとも 1 つのワークシートがあります。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);
}
ワークシートをページに分割する
GroupDocs.Viewer はドキュメントを「ページ」にレンダリングします。ここでいうページとは、画面や A4 用紙に相当する比較的小さな矩形領域のことです。一方で、ワークシートは非常に大きくなり得ます。たとえば、旧式の XLS 形式は 最大 256 列・65536 行、最新の XLSX (Office Open XML Workbook) 形式や Microsoft Excel は 最大 16384 列・1048576 行 をサポートしています。ワークシートをページに「フィット」させることは、GroupDocs.Viewer でスプレッドシートをレンダリングする上で重要です。ページへフィットさせるために、GroupDocs.Viewer は ワークシート分割 を行い、ワークシートを複数の矩形チャンクに分割し、それぞれを別ページに配置します。分割方法は以下の 5 種類があります。
重要なのは、これらすべての分割方法が同じ手順で指定される点です。すなわち、SpreadsheetOptions クラスの 静的ファクトリメソッド を呼び出してインスタンスを生成します。
1. ワークシート全体を 1 ページにレンダリング
SpreadsheetOptions.ForOnePagePerSheet()
最もシンプルな方法です。分割を無効化し、ページサイズを調整してワークシート全体を 1 ページに収めます。ワークシートが小さいことが事前に分かっている場合に適しています。ただし、ワークシートが非常に大きい場合は結果が不快になることがあります。たとえば HTML にレンダリングすると、生成される HTML が数十〜数百 MiB になることがあり、ブラウザでの閲覧が困難になることがあります。JPEG にレンダリングする場合は、幅または高さが 65535 ピクセルの上限を超えると問題が生じます。したがって、このモードは意図的に使用してください。
2. ページブレークで分割
SpreadsheetOptions.ForRenderingByPageBreaks()
Microsoft Excel は紙サイズやページ設定(向き・余白)に基づいて自動的にページブレークを設定します。Excel の「View」タブで「Page Break Preview」に切り替えると、青い線でワークシート全体が矩形チャンクに分割され、各チャンクが「Page 1」「Page 2」… と表示されます。これが Excel の ページ分割提案 です。
このメソッドを使用すると、GroupDocs.Viewer は Excel と同様にページブレークに従ってワークシートを分割します。
なお、BaseViewOptions.SpreadsheetOptions プロパティのデフォルト設定はこのオプションであり、ビューオプションクラスを生成すると自動的に ForRenderingByPageBreaks() が適用されます。
3. 印刷領域のみをレンダリング
SpreadsheetOptions.ForRenderingPrintArea()
Excel には 印刷領域 の概念があります。印刷領域はワークシート内の 1 つ以上のセル範囲で、ここに指定された部分だけが印刷対象となり、領域外の内容は一切印刷されません。印刷領域を設定するには「Page Layout」タブの「Print Area」ボタンから「Set Print Area」を選択します。別の範囲を追加したいときは対象範囲を選択した上で「Add to Print Area」をクリックします。ページブレークプレビューでも印刷領域の範囲が確認できます。
4. 印刷領域とページブレークの両方で分割
SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()
GroupDocs.Viewer のユニークな機能です。印刷領域とページブレークの両方を同時に考慮し、ワークシートを分割します。以下のスクリーンショットでは、赤線が印刷領域、青線がページブレークを示しています。
5. 行・列ベースで手動分割
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage)
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage, int countColumnsPerPage)
上記のいずれの分割方法でも要件を満たせない、または CSV のようにページブレークや印刷領域をサポートしない形式の場合に使用します。行数または行数+列数で 1 ページに収めるセル数を手動で指定できます。下図は「行だけで分割」 vs. 「行と列で分割」の違いを示しています。
ForSplitSheetIntoPages(int countRowsPerPage)を使用すると 行だけで分割 が有効になります。ForSplitSheetIntoPages(int countRowsPerPage, int countColumnsPerPage)を使用すると 行と列の両方で分割 が有効になります。
追加オプションの調整
上記まででスプレッドシートの基本的なレンダリングは可能ですが、さらに細かく結果を調整したい場合は多数の追加オプションが用意されています。これらは必須ではありませんが、レンダリング結果を細部までコントロールできます。
- SpreadsheetOptions クラスのプロパティとして提供されるオプション
- ViewOptions(すべての 4 種類のビューオプションで共通)の抽象クラスに定義されたオプション
行・列ヘッダーをレンダリング
Excel や類似の表計算アプリは、列はアルファベット(A, B, C, …)、行は数字(1, 2, 3, …)でヘッダーを表示します。GroupDocs.Viewer はデフォルトでこのヘッダーを表示しません(インターフェイス要素であり、ドキュメント内容ではないため)。SpreadsheetOptions.RenderHeadings(bool)を true に設定すると、ヘッダーが出力に含まれます。
ワークシートのグリッドラインをレンダリング
デフォルトではセル間のグリッドラインは表示されません。SpreadsheetOptions.RenderGridLines(bool)を true にすると、Excel のようにグリッドラインが出力に含まれます。
セルテキストのオーバーフロー制御
セル内テキストがセル幅に収まらないケースは頻繁にあります。SpreadsheetOptions.TextOverflowMode プロパティで動作を指定できます。TextOverflowMode は列挙型で、以下の 4 つのオプションがあります。
OverlayIfNextIsEmpty
デフォルト設定です。隣接セルが空の場合にのみテキストがはみ出します。隣接セルが埋まっているとテキストは切り詰められます。
Overlay
常に隣接セルへはみ出し、既存のデータは上書きされます。
HideText
はみ出したテキストはすべて切り捨てます。隣接セルに空きがあっても表示されません。
AutoFitColumn
列幅を自動拡張してテキスト全体が収まるようにします。ただし、列幅が極端に広がり、ページが横長になる可能性があります。
非表示の行・列をレンダリング
Excel では行や列を非表示にできます。デフォルトでは非表示の行・列は出力されませんが、以下のプロパティを true に設定すると表示されます。
ViewOptions.SpreadsheetOptions.RenderHiddenRowsViewOptions.SpreadsheetOptions.RenderHiddenColumns
非表示のワークシートをレンダリング
ワークシート自体が非表示に設定されている場合も、BaseViewOptions.RenderHiddenPages(bool)を true にすれば出力に含められます。このプロパティは SpreadsheetOptions ではなく、すべてのビューオプションで共通の BaseViewOptions にあります。
空の行・列をスキップ
スプレッドシートに大量の空白があると、出力が無駄に大きくなることがあります。SpreadsheetOptions.SkipEmptyRows と SpreadsheetOptions.SkipEmptyColumns(どちらも bool)を有効にすると、空の行・列はレンダリングから除外されます。
セルコメントの表示/非表示
セルに付随するコメントはデフォルトで全て表示されます。BaseViewOptions.RemoveComments(bool)を true にすると、コメントは出力されません。このプロパティも BaseViewOptions に属します。
PDF 出力時のワークシート余白設定
PDF にレンダリングする際は、ページ余白(上・右・下・左)をセンチメートル単位で指定できます。4 つのプロパティは次のとおりです。
SpreadsheetOptions.TopMarginSpreadsheetOptions.RightMarginSpreadsheetOptions.BottomMarginSpreadsheetOptions.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);
}
まとめ
スプレッドシート形式は非常に複雑で、ドキュメントごとに内容やサイズが大きく異なります。デフォルト設定だけで複雑なスプレッドシートを目的の形式に変換できないケースが多く、そのため GroupDocs.Viewer は豊富なオプション群を提供しています。これらを組み合わせることで、ユーザーは自分の要件に最適なレンダリング結果を得られます。
関連項目
- Render Excel and Apple Numbers spreadsheets as HTML, PDF, and image files
- Split a worksheet into pages
- Specify spreadsheet rendering options
無料トライアル
GroupDocs.Viewer for .NET の無料トライアルは releases.groupdocs.com からダウンロードできます。また、機能制限なしで全機能を試すための一時ライセンスは こちら から取得できます。