Übersicht

Spreadsheet‑Dokumente sind Dokumente, die Daten in Tabellenform – in Zeilen und Spalten – enthalten. Sie werden auch als Arbeitsmappen bezeichnet. Es gibt viele Formate von Spreadsheet‑Dokumenten – Office Open XML (wie XLSX, XLSM usw.), Microsoft Excel Binary File Format (XLS, XLT), OpenDocument Spreadsheet‑Format (ODS, FODS, OTS), textbasierte, durch Trennzeichen getrennte Formate (CSV, TSV usw.) und so weiter. Alle bilden die sogenannte Spreadsheet‑Formate‑Familie. GroupDocs.Viewer unterstützt fast alle Spreadsheet‑Formate beim Import und ermöglicht das Rendern (Konvertieren) in HTML, PDF, PNG und JPEG. Dieser Artikel erklärt, wie das funktioniert, welche Optionen verfügbar sind und wann und warum sie verwendet werden sollten.

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

Grundlegende Verwendung

Zunächst müssen wir über Optionen sprechen. Es gibt eine separate Klasse in der öffentlichen API: SpreadsheetOptions in GroupDocs.Viewer.Options. Diese Klasse ist speziell dafür konzipiert, das Rendering der Spreadsheet‑Formate‑Familie anzupassen. Sie ist über die SpreadsheetOptions‑Eigenschaft für alle vier Ansicht‑Optionen zugänglich:

Wird die SpreadsheetOptions‑Eigenschaft nicht explizit angegeben, hat sie einen impliziten Standardwert, nämlich eine Instanz der Klasse SpreadsheetOptions, die später in diesem Artikel erläutert wird.

Kurz gesagt: Das Rendern eines Spreadsheet‑Dokuments mit GroupDocs.Viewer ist supereinfach und ähnlich wie bei allen anderen Formaten – eine ViewOptions-Instanz erstellen, eine Viewer-Instanz mit dem angegebenen Eingabe‑Spreadsheet‑Dokument erzeugen und die Methode Viewer.View(viewOptions) aufrufen. Das folgende Code‑Beispiel demonstriert das Rendern einer einzelnen Eingabe‑Spreadsheet‑Datei in alle 4 Ausgabeformate: HTML, PDF, PNG und JPEG. Bitte beachten Sie, dass neben dem Erzeugen der Options‑Klassen keine spreadsheet‑spezifischen Anpassungen vorgenommen werden – alle Spreadsheet‑Optionen behalten ihre Standardwerte.

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);
}

Nun zu den Arbeitsblättern. Jede Spreadsheet‑Datei hat mindestens ein Arbeitsblatt. In den meisten Tabellen‑Verarbeitungsprogrammen wie Microsoft Excel werden die Arbeitsblätter als Tabs dargestellt. Einige Spreadsheet‑Formate können nur ein einziges Arbeitsblatt besitzen; dazu zählen beispielsweise alle textbasierten, durch Trennzeichen getrennten Formate (CSV, TSV usw.).

Standardmäßig rendert GroupDocs.Viewer alle Arbeitsblätter der angegebenen Spreadsheet‑Datei. Das kann jedoch geändert werden. Die Methode Viewer.View() besitzt eine Überladung, die als zweiten Parameter ein Array von Seitenzahlen (Int32[] pageNumbers) erhält. Wird dieser Parameter verwendet, werden nur die angegebenen Seiten gerendert. Dieser Parameter ist universell und gilt für alle unterstützten Formate, die Seiten besitzen; im Kontext der Spreadsheet‑Formate‑Familie beschreibt er exakt die zu rendernden Arbeitsblatt‑Nummern.

Bitte beachten Sie, dass die Seitennummerierung allgemein und die Arbeitsblatt‑Nummerierung im Besonderen 1‑basiert ist, also bei „1“ beginnt und nicht bei „0“.

Das folgende Beispiel zeigt, wie das 1. und 3. Arbeitsblatt einer Spreadsheet‑Datei mit 3 Arbeitsblättern nach PNG gerendert wird.

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);
}

Aufteilen von Arbeitsblättern in Seiten

GroupDocs.Viewer rendert Dokumente zu Seiten, wobei unter einer Seite ein rechteckiger Bereich relativ kleiner Größe verstanden wird, vergleichbar mit dem Anzeigebereich oder einer A4‑Seite. Andererseits können Arbeitsblätter sehr groß sein. Insbesondere unterstützt das inzwischen veraltete XLS-Format maximal 256 Spalten und 65 536 Zeilen, während das neuere XLSX (Office Open XML Workbook)-Format und Microsoft Excel bis zu 16 384 Spalten und 1 048 576 Zeilen unterstützen. Das „Einpassen“ von Arbeitsblättern in Seiten ist ein entscheidender Teil des Renderns von Spreadsheets mit GroupDocs.Viewer. Um ein Arbeitsblatt in Seite(n) einzupassen, führt GroupDocs.Viewer ein Worksheet‑Splitting durch – das Arbeitsblatt wird in mehrere rechteckige Stücke geteilt, die jeweils auf einer separaten Seite platziert werden. Es gibt 5 verschiedene Methoden, die unten aufgelistet und beschrieben werden.

Wichtig: Alle diese Splitting‑Methoden werden auf dieselbe Weise angegeben – über eine spezifische statische Methode (Factory‑Methode), die eine Instanz der Klasse SpreadsheetOptions erzeugt.

Ganzes Arbeitsblatt auf einer Seite rendern

SpreadsheetOptions.ForOnePagePerSheet()

Der einfachste und unkomplizierteste Weg – das Splitting deaktivieren und die Seitengröße so anpassen, dass der gesamte Inhalt des Arbeitsblatts hineinpasst. Das ist eine gute Wahl, wenn bereits bekannt ist, dass das Arbeitsblatt klein ist. Ist das Arbeitsblatt jedoch sehr groß, kann dieser Ansatz zu schlechten Ergebnissen führen. Beim Rendern ins HTML‑Format kann das resultierende HTML‑Dokument riesig werden – Zehntausende oder sogar Hunderttausende von MiB –, was beim Anzeigen in Web‑Browsern Probleme verursacht. Beim Rendern ins JPEG‑Format kann es noch schlimmer werden, wenn Breite oder Höhe die maximale Grenze von 65 535 Pixel überschreiten. Verwenden Sie diesen Modus also bewusst.

Render worksheet on one page

Arbeitsblatt nach Seitenumbrüchen aufteilen

SpreadsheetOptions.ForRenderingByPageBreaks()

Microsoft Excel fügt automatisch Seitenumbrüche basierend auf Papiergröße und Seiteneinstellungen (Ausrichtung, Ränder) ein. Wechseln Sie zur Registerkarte „Ansicht“ und aktivieren Sie den Modus „Seitenumbruch‑Vorschau“, dann sehen Sie blaue Linien, die das gesamte Arbeitsblatt in rechteckige Stücke teilen, jedes mit der Bezeichnung „Seite 1“, „Seite 2“ usw. So „schlägt“ Microsoft Excel vor, ein Arbeitsblatt auf Seiten zu verteilen.

Mit dieser Methode folgt GroupDocs.Viewer Microsoft Excel und teilt die Arbeitsblätter gemäß den Seitenumbrüchen, genau wie Excel.

Erwähnenswert ist, dass diese Option – das Aufteilen eines Arbeitsblatts nach Seitenumbrüchen – die Standardoption der Eigenschaft BaseViewOptions.SpreadsheetOptions ist. Beim Erzeugen einer Instanz einer View‑Options‑Klasse ist also die Option „ForRenderingByPageBreaks()“ standardmäßig ausgewählt.

Nur den Druckbereich rendern

SpreadsheetOptions.ForRenderingPrintArea()

Zusätzlich zu den Seitenumbrüchen kennt Microsoft Excel das Konzept des „Druckbereichs“. Der Druckbereich ist ein oder mehrere Zellbereiche in einem Arbeitsblatt, die zum Drucken vorgesehen sind; alles außerhalb des Druckbereichs wird nicht gedruckt. Um einen Zellbereich zum Druckbereich hinzuzufügen, gehen Sie zur Registerkarte „Seitenlayout“, klicken Sie auf die Schaltfläche „Druckbereich“ und wählen Sie „Druckbereich festlegen“. Um einen weiteren Zellbereich hinzuzufügen, markieren Sie den neuen Bereich, klicken Sie erneut auf „Druckbereich“ und wählen Sie „Zum Druckbereich hinzufügen“. In der „Seitenumbruch‑Vorschau“ sehen Sie alle Zellbereiche des Druckbereichs.

Render only print area

Druckbereich rendern und nach Seitenumbrüchen aufteilen

SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()

GroupDocs.Viewer bietet ein einzigartiges Feature – die Kombination von Druckbereich und Seitenumbrüchen in einem Modus. In diesem Fall berücksichtigt GroupDocs.Viewer sowohl alle Zellbereiche des Druckbereichs als auch die Seitenumbrüche und wendet beide gleichzeitig an, um ein Arbeitsblatt auf Seiten zu verteilen.

Im folgenden Screenshot zeigt die rote Linie den Druckbereich, die blaue Linie die Seitenumbrüche.

Render print area and split by page breaks

Arbeitsblatt manuell nach Zeilen und Spalten aufteilen

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

Manchmal ist keine der oben beschriebenen Splitting‑Methoden akzeptabel, oder das Spreadsheet‑Format unterstützt keine Seitenumbrüche und Druckbereiche, z. B. das textbasierte CSV. Für solche Fälle erlaubt GroupDocs.Viewer, die Anzahl der Zeilen und/oder Spalten, die auf jeder Seite erscheinen sollen, manuell festzulegen. Kurz gesagt, der Unterschied zwischen dem Aufteilen nur nach Zeilen und dem Aufteilen nach Zeilen + Spalten wird im folgenden Screenshot illustriert.

Wenn die 1. Überladung der Methode ForSplitSheetIntoPages mit einem Parameter verwendet wird, ist das Splitting nur nach Zeilen aktiviert. Wird die 2. Überladung mit zwei Parametern verwendet, ist das Splitting nach Zeilen + Spalten aktiviert.

Split worksheet into pages manually by rows and columns

Anpassen zusätzlicher Optionen

All das oben Beschriebene ist grundlegend und reicht aus, um Spreadsheets mit GroupDocs.Viewer zu rendern. Es gibt jedoch zahlreiche zusätzliche Optionen, die nicht zwingend erforderlich, aber hilfreich sind, um das Rendering‑Ergebnis weiter zu verfeinern.

Einige dieser Optionen werden als Eigenschaften der Klasse SpreadsheetOptions bereitgestellt, die wiederum über die SpreadsheetOptions‑Eigenschaft der View‑Options‑Klasse zugänglich ist. Andere befinden sich in der abstrakten Klasse ViewOptions, die für alle 4 Rendering‑Modi gemeinsam ist.

Zeilen‑ und Spalten‑Überschriften rendern

Wenn MS Excel oder ein ähnliches Tabellen‑Verarbeitungsprogramm ein Spreadsheet‑Dokument öffnet, zeigt es die Spalten‑ und Zeilen‑Überschriften an (Spalten werden mit Buchstaben A, B, C, AA, AB … bezeichnet, Zeilen mit Zahlen 1, 2, 3 …, 1 048 576). Beim Rendern zeigt GroupDocs.Viewer diese Überschriften standardmäßig nicht an, da sie Teil der Benutzeroberfläche des Tabellen‑Processors, nicht des Dokuments selbst sind. Das kann jedoch über die boolesche Eigenschaft RenderHeadings geändert werden. Standardmäßig ist sie deaktiviert (false). Wird sie auf true gesetzt, erscheinen Zeilen‑ und Spalten‑Überschriften im Ausgabedokument, wie im folgenden Screenshot zu sehen ist.

Render row and column headings

Rasterlinien des Arbeitsblatts rendern

Dieses Konzept ist dem vorherigen sehr ähnlich. Standardmäßig zeigt GroupDocs.Viewer die Rasterlinien zwischen den Zellen nicht an, weil sie nicht zum Spreadsheet selbst gehören, sondern nur die Darstellung des Tabellen‑Processors unterstützen. Durch Setzen der booleschen Eigenschaft RenderGridLines auf true kann das Verhalten von MS Excel nachgeahmt werden. Die Rasterlinien erscheinen dann im Ausgabedokument, wie im folgenden Screenshot zu sehen ist.

Render worksheet gridlines

Überlauf von Zellen‑Text steuern

Ein häufiges Szenario ist, dass Text nicht in die Grenzen einer Zelle passt. Wie soll dieser Text korrekt angezeigt werden? GroupDocs.Viewer bietet die spezielle Eigenschaft SpreadsheetOptions.TextOverflowMode zur Lösung dieses Problems. Die Eigenschaft TextOverflowMode hat den Typ mit demselben Namen, ein Enum mit 4 möglichen Werten, die im Folgenden erklärt werden.

OverlayIfNextIsEmpty

Standardmäßig hat die Eigenschaft SpreadsheetOptions.TextOverflowMode den Wert OverlayIfNextIsEmpty, der das Standardverhalten von Microsoft Excel nachahmt. Kurz gesagt, dieser Wert lässt Text in benachbarte Zellen überlaufen, jedoch nur, wenn diese Zellen leer sind. Sind benachbarte Zellen nicht leer, wird der überlaufende Text abgeschnitten.

OverlayIfNextIsEmpty enum value

Der Screenshot zeigt die HTML‑Datei, die aus einer XLSX‑Eingabedatei mit dem Wert OverlayIfNextIsEmpty gerendert wurde. Beachten Sie die Zelle „B2“ – ihr langer Text wird abgeschnitten, weil die Zelle „C2“ nicht leer ist. Die Zelle „C3“ hingegen hat ebenfalls langen Text, der in die Zellen „D2“ und „E2“ überläuft, weil diese leer sind.

Overlay

Der Wert TextOverflowMode.Overlay ist dem vorherigen ähnlich, wirkt jedoch aggressiver: Langer Text, der nicht in die ursprünglichen Zellgrenzen passt, überläuft immer, unabhängig von benachbarten Zellen. Existieren dort bereits Daten, werden diese überschrieben.

Overlay enum value

Im Screenshot überläuft der lange Text aus Zelle „B2“ in die benachbarten Zellen „C2“, „D2“, „E2“, „F2“. Dadurch wird der ursprüngliche Text in den Zellen „C2“ und „F2“ gelöscht.

HideText

Der Modus TextOverflowMode.HideText ist das Gegenstück zum vorherigen Overlay‑Modus – anstatt zu überlaufen, wird der Text, der nicht in die Zellgrenzen passt, immer abgeschnitten, egal ob benachbarte Zellen frei sind oder nicht.

HideText enum value

Im Screenshot ist das an Zelle „C3“ zu sehen – obwohl in den benachbarten Zellen „D3“ usw. Platz ist, wird der Text bedingungslos abgeschnitten.

AutoFitColumn

Der Wert TextOverflowMode.AutoFitColumn löst das Problem auf andere Weise – er vergrößert die Spaltenbreite, sodass der Text jeder Zelle hineinpasst. Unabhängig davon, wie lang der Text in einer Zelle ist, wird die Breite der Spalte, in der sich diese Zelle befindet, vergrößert, um die gesamte Zeichenkette aufzunehmen.

AutoFitColumn enum value

Der Screenshot demonstriert das Verhalten. Natürlich kann dieser Ansatz in manchen Fällen ungeeignet sein, insbesondere wenn der Text in einer Zelle sehr lang ist – dann wird die Seite extrem breit und erfordert lästiges horizontales Scrollen.

Versteckte Zeilen und Spalten rendern

Microsoft Excel und andere Tabellen‑Processoren erlauben das Ausblenden bestimmter Zeilen und Spalten. Standardmäßig rendert GroupDocs.Viewer solche Zeilen und Spalten nicht, aber dieses Verhalten kann geändert werden. Die Eigenschaften ViewOptions.SpreadsheetOptions.RenderHiddenRows und ViewOptions.SpreadsheetOptions.RenderHiddenColumns ermöglichen es, versteckte Zeilen und Spalten im Ausgabedokument anzuzeigen, wenn sie auf true gesetzt werden.

Versteckte Arbeitsblätter rendern

Wie bei versteckten Zeilen und Spalten kann ein Spreadsheet‑Dokument ein oder mehrere versteckte Arbeitsblätter enthalten. Standardmäßig rendert GroupDocs.Viewer diese nicht. Durch Setzen der Eigenschaft RenderHiddenPages auf true können versteckte Arbeitsblätter gerendert werden. Hinweis: Im Gegensatz zu den zuvor beschriebenen Eigenschaften befindet sich RenderHiddenPages nicht in SpreadsheetOptions, sondern in der abstrakten Klasse BaseViewOptions, die für alle View‑Optionen gilt.

Leere Zeilen und Spalten überspringen

Manche Spreadsheets sind „spärlich“ – sie enthalten viele leere Zellen, die unnötig Platz beanspruchen. GroupDocs.Viewer bietet die Möglichkeit, leere Zeilen und Spalten beim Rendern zu überspringen. Wenn diese Funktion aktiviert ist, werden leere Zeilen und/oder Spalten aus dem resultierenden HTML, PDF, PNG bzw. JPEG entfernt. Die booleschen Eigenschaften SpreadsheetOptions.SkipEmptyRows und SpreadsheetOptions.SkipEmptyColumns steuern dieses Verhalten.

Skip empty rows and columns

Im Screenshot sind sowohl SkipEmptyRows als auch SkipEmptyColumns aktiviert.

Zellkommentare rendern oder ausblenden

Zellen in einem Spreadsheet‑Dokument können Kommentare besitzen, und standardmäßig rendert GroupDocs.Viewer alle Kommentare. Dies kann über die Eigenschaft BaseViewOptions.RemoveComments deaktiviert werden – wird sie auf true gesetzt, werden keine Kommentare gerendert. Hinweis: Diese Eigenschaft befindet sich in der Klasse BaseViewOptions, nicht in SpreadsheetOptions.

Render or hide cell comments

Der Screenshot zeigt das Rendern einer XLSX‑Datei mit Zellkommentaren ins PNG‑Format bei den Standardoptionen – der Kommentar zur Zelle „E2“ ist im resultierenden PNG sichtbar.

Arbeitsblatt‑Ränder in den ausgegebenen PDF‑Seiten festlegen

Beim Rendern von Arbeitsblättern ins PDF‑Format können die Seitenränder – der Abstand in Zentimetern vom Rand der Seite zum Inhalt – gesteuert werden. Es gibt vier Eigenschaften zur Kontrolle der oberen, rechten, unteren und linken Ränder:

Standardmäßig haben alle vier Eigenschaften negative Werte, was bedeutet, dass die Standardränder von GroupDocs.Viewer verwendet werden. Es ist jedoch möglich, diese Werte explizit zu setzen. Wichtig: Seitenränder werden nur angewendet, wenn das Zielformat PDF ist.

Der folgende Quellcode demonstriert das Erzeugen von PdfViewOptions, das Setzen aller vier Ränder und das Rendern eines Dokuments:

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);
}

Das folgende Bild zeigt das Ergebnis:

Set worksheet margins in the output PDF pages

Fazit

Spreadsheet‑Formate sind recht komplex, und Dokumente können sehr unterschiedliche Inhalte unterschiedlicher Art und Länge besitzen. In vielen Fällen ist es unmöglich, ein komplexes Spreadsheet‑Dokument mit den Standardoptionen zu rendern, weshalb GroupDocs.Viewer ein umfassendes Set an Eigenschaften bereitstellt; damit kann jeder Benutzer das Rendering an seine eigenen Bedürfnisse anpassen.

Siehe auch

Kostenlose Testversion erhalten

Sie können eine kostenlose Testversion von GroupDocs.Viewer für .NET von releases.groupdocs.com herunterladen. Außerdem können Sie eine temporäre Lizenz erwerben, um alle Funktionen und Features uneingeschränkt zu testen, unter hier.