סקירה כללית

מסמכי גיליון אלקטרוני הם מסמכים שמכילים נתונים בצורה טבלאית — בתוך שורות ועמודות. הם ידועים גם בשם חוברות עבודה. קיימים פורמטים רבים של מסמכי גיליון אלקטרוני — 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

שימוש בסיסי

קודם כל עלינו לדבר על אפשרויות. יש מחלקה נפרדת ב‑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);
}

עכשיו נדבר על ה‑גיליונות (worksheets). לכל גיליון אלקטרוני יש לפחות גיליון אחד. ברוב תוכנות עיבוד הטבלאות כמו Microsoft Excel הגיליונות מוצגים כ‑כרטיסיות. חלק מהפורמטים של גיליון אלקטרוני עשויים לכלול רק גיליון אחד; זה כולל, לדוגמה, את כל הפורמטים המבוססי‑טקסט המופרדים במפריד (CSV, TSV וכו’).

בברירת‑מחדל GroupDocs.Viewer מציג את כל הגיליונות שבגיליון הנתון. ניתן לשנות זאת. למתודה Viewer.View() יש עומס (overload) שמקבל מערך של מספרי עמודים כפרמטר שני — Int32[] pageNumbers. כאשר משתמשים בפרמטר זה, רק העמודים (גיליונות) שצוינו יוצגו. פרמטר זה אוניברסלי ומיושם על כל הפורמטים הנתמכים שיש להם עמודים, אך בהקשר של משפחת פורמטי הגיליון הוא מתאר בדיוק מספרי גיליונות להצגה.

שימו לב שמספור העמודים באופן כללי ומספרי הגיליונות בפרט הוא מבוסס‑1, ולא 0‑based, ולכן הוא מתחיל ב‑“1”, לא ב‑“0”.

הדוגמה למטה מציגה כיצד להציג את הגיליון הראשון והשלישי ל‑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 שיטות שונות, המפורטות להלן.

חשוב לציין — כל שיטות הפיצול מוגדרות באותו אופן — באמצעות שיטה סטטית (factory method) ספציפית שיוצרת מופע של מחלקת SpreadsheetOptions.

הצגת גיליון שלם בעמוד אחד

SpreadsheetOptions.ForOnePagePerSheet()

הדרך הקלה והפשוטה ביותר — לבטל פיצול ולהתאים את גודל העמוד כך שיכלול את כל תוכן הגיליון. זו בחירה טובה כאשר ידוע שהגיליון קטן. עם זאת, אם הגיליון גדול מאוד, גישה זו עלולה להוביל לתוצאות נוראות. בפרט, בעת המרה ל‑HTML, קובץ ה‑HTML עלול להיות עצום, בעשרות או אפילו מאות MiB, מה שעלול לגרום לבעיות צפייה בקבצים גדולים בדפדפנים. בעת המרה ל‑JPEG, המצב עלול להיות גרוע יותר אם הרוחב או הגובה חורגים מהמגבלה המרבית של 65535 פיקסלים. לכן השתמשו במצב זה בכוונה.

Render worksheet on one page

פיצול גיליון לפי שבירות עמודים

SpreadsheetOptions.ForRenderingByPageBreaks()

Microsoft Excel מוסיף באופן אוטומטי שבירות עמודים בהתבסס על גודל הדף והגדרות העמוד, כגון כיוון ושוליים. אם תעברו ללשונית “View” ותבחרו במצב “Page Break Preview”, תראו קווים כחולים המחלקים את כל שטח הגיליון לחלקים מלבניים, שכל אחד מהם מתויג כ‑“Page 1”, “Page 2” וכדומה. כך Excel “מציע” לפצל את הגיליון לעמודים.

בשיטה זו GroupDocs.Viewer פועל לפי שבירות העמודים של Excel.

חשוב לציין שהאפשרות הזו — פיצול גיליון לפי שבירת עמוד — היא אפשרות ברירת‑המחדל של המאפיין BaseViewOptions.SpreadsheetOptions, ולכן כאשר אתם יוצרים מופע של מחלקת אפשרויות הצגה, האפשרות [ForRenderingByPageBreaks()] נבחרת כברירת‑מחדל.

הצגת רק אזור ההדפסה

SpreadsheetOptions.ForRenderingPrintArea()

בנוסף לשבירות העמודים, ל‑Microsoft Excel יש מושג “אזור הדפסה”. אזור הדפסה הוא למעשה טווח תאים אחד או יותר בגיליון המיועד להדפסה; כל תוכן מחוץ לאזור ההדפסה לא יודפס. כדי להוסיף טווח תאים לאזור ההדפסה, עברו ללשונית “Page Layout”, לחצו על כפתור “Print Area” ואז על “Set Print Area”. כדי להוסיף טווח נוסף, בחרו בטווח החדש, לחצו שוב על “Print Area” ובחרו “Add to Print Area”. במצב “Page Break Preview” ניתן לראות את כל הטווחים באיזור ההדפסה.

Render only print area

הצגת אזור ההדפסה ופיצול לפי שבירות עמודים

SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()

ל‑GroupDocs.Viewer יש תכונה ייחודית — שילוב של אזור ההדפסה ושבירות העמודים במצב אחד. במקרה זה GroupDocs.Viewer מתחשב בכל טווחי האזור ההדפסה ובשבירות העמודים של הגיליון ומיישם אותם במקביל כדי לפצל את הגיליון לעמודים.

בצילום המסך הבא הקו האדום מציג את אזור ההדפסה, והקווים הכחולים מציגים את שבירות העמודים.

Render print area and split by page breaks

פיצול גיליון לעמודים ידנית לפי שורות ועמודות

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

לפעמים אף אחת משיטות הפיצול המתוארות למעלה אינה מקובלת, או שהגיליון בפורמט שאינו תומך בשבירות עמודים ובאזורי הדפסה, לדוגמה CSV מבוסס‑טקסט. במקרים כאלה GroupDocs.Viewer מאפשר להגדיר ידנית את מספר השורות ו/או העמודות שצריך להופיע בכל עמוד. בקיצור, ההבדל בין פיצול לפי שורות בלבד לפיצול לפי שורות ועמודות מודגם בצילום המסך למטה.

אם משתמשים בעומס הראשון של השיטה ForSplitSheetIntoPages עם פרמטר אחד, הפיצול יתבצע לפי שורות בלבד. אם משתמשים בעומס השני עם שני פרמטרים, הפיצול יתבצע לפי שורות ועמודות.

Split worksheet into pages manually by rows and columns

התאמת אפשרויות נוספות

כל מה שתואר למעלה הוא חיוני ומספיק להצגת גיליונות באמצעות GroupDocs.Viewer. עם זאת, קיימות אפשרויות נוספות רבות, שאינן מחויבות, אך מאפשרות למשתמשים לכוונן את תוצאת ההצגה עוד יותר.

חלק מהאפשרויות מיוצגות כמאפיינים של מחלקת SpreadsheetOptions, הנגישה דרך המאפיין SpreadsheetOptions של מחלקת אפשרויות הצגה. אחרות ממוקמות במחלקה המופשטת ViewOptions המשותפת לכל ארבעת מצבי ההצגה.

הצגת כותרות שורות ועמודות

כאשר MS Excel או תוכנת עיבוד טבלאות דומה פותחת מסמך גיליון אלקטרוני, היא מציגה את כותרות העמודות והשורות: העמודות ממוספרות באותיות (A, B, C, AA, AB, …) והשורות ממוספרות (1, 2, 3, …, 1048576). בעת הצגה, GroupDocs.Viewer באופן ברירת‑מחדל אינו מציג כותרות אלו, מכיוון שהן חלק מממשק תוכנת הטבלאות ולא מהמסמך עצמו. ניתן לשנות זאת באמצעות המאפיין RenderHeadings מסוג בוליאני. כברירת‑מחדל הוא מושבת (false), אך כאשר הוא מופעל (true) כותרות השורות והעמודות יופיעו במסמך הפלט, כפי שניתן לראות בצילום המסך למטה.

Render row and column headings

הצגת קווי רשת של הגיליון

הקונספט של אפשרות זו דומה מאוד לקודמת. באופן ברירת‑מחדל GroupDocs.Viewer אינו מציג קווי רשת בין התאים, מכיוון שהם אינם חלק מהגיליון אלא דרך ייצוג של תוכנת הטבלאות. עם זאת, באמצעות המאפיין RenderGridLines מסוג בוליאני ניתן לחקות את ההתנהגות של MS Excel. הקצו ערך true למאפיין SpreadsheetOptions.RenderGridLines וקווי הרשת יופיעו במסמך הפלט, כפי שמוצג בצילום המסך למטה.

Render worksheet gridlines

שליטה על גלישת טקסט בתא

זהו תרחיש נפוץ שבו טקסט מסוים אינו מתיישב בגבולות התא שלו. איך להציג טקסט זה בצורה נכונה? GroupDocs.Viewer מציע מאפיין מיוחד SpreadsheetOptions.TextOverflowMode לפתרון בעיה זו. למאפיין TextOverflowMode ערך מסוג TextOverflowMode, שהוא enum עם 4 אפשרויות, המוסברות להלן.

OverlayIfNextIsEmpty

בברירת‑מחדל למאפיין SpreadsheetOptions.TextOverflowMode יש ערך OverlayIfNextIsEmpty, המדמה את ההתנהגות ברירת‑המחדל של Microsoft Excel. ערך זה מאפשר לטקסט לגלוש לתאים סמוכים רק אם תאים אלו ריקים. אם התאים הסמוכים אינם ריקים, הטקסט החורג נחתך.

OverlayIfNextIsEmpty enum value

הצילום למעלה מציג קובץ HTML שהומר מקובץ XLSX עם ערך OverlayIfNextIsEmpty. שימו לב לתא “B2” — יש בו טקסט ארוך והוא נחתך מכיוון שהתא “C2” אינו ריק. התא “C3” מכיל טקסט ארוך שאינו מתיישב, ולכן הוא חורג לתאים “D2” ו‑“E2” שהם ריקים.

Overlay

הערך TextOverflowMode.Overlay דומה במקצת לערך הקודם, אך נחשב לתוקפני יותר: טקסט ארוך שלא מתיישב בגבולות התא המקורי תמיד חורג, ללא קשר למצב התאים הסמוכים. אם בתאים הסמוכים יש כבר טקסט או נתונים אחרים, הם יימחקו.

Overlay enum value

הצילום למעלה מדגים כיצד זה עובד. הטקסט הארוך בתא “B2” חורג לתאים “C2”, “D2”, “E2”, “F2”. כתוצאה מכך, הטקסט המקורי בתאים “C2” ו‑“F2” נמחק.

HideText

המצב TextOverflowMode.HideText פועל בניגוד למצב Overlay — במקום לגלוש, הטקסט נחתך באופן מוחלט אם אינו מתיישב בגבולות התא, ללא קשר למרחב פנוי בתאים הסמוכים.

HideText enum value

בצילום המסך למעלה ניתן לראות זאת בתא “C3” — למרות שיש מקום פנוי בתא “D3” והלאה, הטקסט נחתך ללא תנאי.

AutoFitColumn

הערך TextOverflowMode.AutoFitColumn פותר את הבעיה בגישה אחרת — הוא מרחיב את רוחב העמודה כך שתתאים לטקסט של כל תא. כלומר, לא משנה כמה הטקסט ארוך, רוחב העמודות שבהן נמצא התא יוגדל כדי להכיל את כל המחרוזת.

AutoFitColumn enum value

הצילום למעלה מציג את האופן שבו זה פועל. כמובן, גישה זו עלולה להיות לא מתאימה במקרים מסוימים, במיוחד כאשר הטקסט בתא(ים) ארוך מאוד — הדבר יגרום לעמוד להיות רחב מאוד עם גלילה אופקית מעצבנת.

הצגת שורות ועמודות מוסתרות

Microsoft Excel ותוכנות טבלאות אחרות מאפשרות להסתיר שורות ועמודות ספציפיות. באופן ברירת‑מחדל GroupDocs.Viewer אינו מציג שורות ועמודות אלו, אך ניתן לשנות התנהגות זו. המאפיינים ViewOptions.SpreadsheetOptions.RenderHiddenRows ו‑ViewOptions.SpreadsheetOptions.RenderHiddenColumns, כאשר מוגדרים ל‑true, מאפשרים להציג שורות ועמודות מוסתרות בקובץ הפלט בעת הצגת גיליון בפורמטים HTML, PDF, PNG או JPEG.

הצגת גיליונות מוסתרים

כמו שורות ועמודות מוסתרות, גם קובץ גיליון אלקטרוני עשוי להכיל גיליון(ים) מוסתרים. באופן ברירת‑מחדל GroupDocs.Viewer אינו מציג גיליונות מוסתרים, אך ניתן לשנות זאת באמצעות המאפיין RenderHiddenPages על‑ידי הגדרת ערכו ל‑true. יש לציין שלמרות שהמאפיינים הקודמים ממוקמים ב‑SpreadsheetOptions, המאפיין RenderHiddenPages נמצא במחלקה המופשטת BaseViewOptions המשותפת לכל אפשרויות הצגה.

דילוג על שורות ועמודות ריקות

חלק מהגיליונות הם “דלילים” — הם מכילים הרבה מרווחים ריקים שיכולים לתפוס מקום רב. ל‑GroupDocs.Viewer יש תכונה לדלג על שורות ועמודות ריקות בעת ההצגה. אם תכונה זו מופעלת, שורות ו/או עמודות ריקות יוסרו מהקבצים המתקבלים ב‑HTML, PDF, PNG ו‑JPEG. המאפיינים הבוליאניים SpreadsheetOptions.SkipEmptyRows ו‑SpreadsheetOptions.SkipEmptyColumns אחראים על תכונה זו.

Skip empty rows and columns

הצילום למעלה מדגים שהמאפיינים SkipEmptyRows ו‑SkipEmptyColumns מופעלים.

הצגה או הסתרת תגובות בתאים

תאים בגיליון אלקטרוני עשויים להכיל תגובות, ובברירת‑מחדל GroupDocs.Viewer מציג את כולן. ניתן לבטל זאת באמצעות המאפיין BaseViewOptions.RemoveComments — אם תגדירו אותו ל‑true, לא תוצגנה תגובות. שימו לב שמאפיין זה נמצא במחלקת BaseViewOptions, ולא ב‑SpreadsheetOptions.

Render or hide cell comments

הצילום למעלה מציג המרה של קובץ XLSX עם תגובות בתאים לפורמט PNG עם אפשרויות ברירת‑המחדל — תגובת התא “E2” מופיעה בקובץ PNG המתקבל.

הגדרת שוליים של גיליון בעמודי PDF הפלט

בעת המרת גיליונות לפורמט PDF ניתן לשלוט בשוליים — המרחק בסנטימטרים משולש העמוד לתוכן. קיימים 4 מאפיינים לשליטה בשוליים העליון, הימני, התחתון והשמאלי:

בברירת‑מחדל לכל ארבעת המאפיינים יש ערכים שליליים, מה שאומר שהשוליים המוגדרים כברירת‑מחדל על‑ידי 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

סיכום

פורמטי הגיליון מורכבים, והמסמכים עשויים להכיל תוכן מגוון באורך וסוגים שונים. במקרים רבים אי אפשר להציג מסמך גיליון מורכב לפורמט כלשהו עם אפשרויות ברירת‑המחדל בלבד, ולכן GroupDocs.Viewer מציע סט מקיף של מאפיינים; בעזרתם כל משתמש יכול לכוונן את ההצגה כך שתענה על הצרכים שלו.

ראה גם

קבל גרסת ניסיון חינם

ניתן להוריד גרסת ניסיון חינם של GroupDocs.Viewer עבור .NET מ‑releases.groupdocs.com. ניתן גם לקבל רישיון זמני כדי לנסות את כל הפונקציות והיכולות ללא מגבלות מ‑here.