סקירה כללית
מסמכי גיליון אלקטרוני הם מסמכים שמכילים נתונים בצורה טבלאית — בתוך שורות ועמודות. הם ידועים גם בשם חוברות עבודה. קיימים פורמטים רבים של מסמכי גיליון אלקטרוני — 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. מאמר זה מסביר כיצד לעשות זאת, אילו אפשרויות קיימות ומתי ולמה כדאי להשתמש בהן.
שימוש בסיסי
קודם כל עלינו לדבר על אפשרויות. יש מחלקה נפרדת ב‑API הציבורי: SpreadsheetOptions ב‑GroupDocs.Viewer.Options. מחלקה זו נועדה במיוחד להתאמת הצגת משפחת פורמטי הגיליון. היא נגישה לכל ארבע אפשרויות הצגה דרך המאפיין SpreadsheetOptions של:
- HtmlViewOptions.SpreadsheetOptions בעת הצגת מסמך גיליון אלקטרוני ל‑HTML,
- PdfViewOptions.SpreadsheetOptions בעת הצגת מסמך גיליון אלקטרוני ל‑PDF,
- PngViewOptions.SpreadsheetOptions בעת הצגת מסמך גיליון אלקטרוני ל‑PNG,
- JpgViewOptions.SpreadsheetOptions בעת הצגת מסמך גיליון אלקטרוני ל‑JPEG.
כאשר לא מצוין במפורש, למאפיין 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 פיקסלים. לכן השתמשו במצב זה בכוונה.
פיצול גיליון לפי שבירות עמודים
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” ניתן לראות את כל הטווחים באיזור ההדפסה.
הצגת אזור ההדפסה ופיצול לפי שבירות עמודים
SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()
ל‑GroupDocs.Viewer יש תכונה ייחודית — שילוב של אזור ההדפסה ושבירות העמודים במצב אחד. במקרה זה GroupDocs.Viewer מתחשב בכל טווחי האזור ההדפסה ובשבירות העמודים של הגיליון ומיישם אותם במקביל כדי לפצל את הגיליון לעמודים.
בצילום המסך הבא הקו האדום מציג את אזור ההדפסה, והקווים הכחולים מציגים את שבירות העמודים.
פיצול גיליון לעמודים ידנית לפי שורות ועמודות
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage)
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage, int countColumnsPerPage)
לפעמים אף אחת משיטות הפיצול המתוארות למעלה אינה מקובלת, או שהגיליון בפורמט שאינו תומך בשבירות עמודים ובאזורי הדפסה, לדוגמה CSV מבוסס‑טקסט. במקרים כאלה GroupDocs.Viewer מאפשר להגדיר ידנית את מספר השורות ו/או העמודות שצריך להופיע בכל עמוד. בקיצור, ההבדל בין פיצול לפי שורות בלבד לפיצול לפי שורות ועמודות מודגם בצילום המסך למטה.
אם משתמשים בעומס הראשון של השיטה ForSplitSheetIntoPages עם פרמטר אחד, הפיצול יתבצע לפי שורות בלבד. אם משתמשים בעומס השני עם שני פרמטרים, הפיצול יתבצע לפי שורות ועמודות.
התאמת אפשרויות נוספות
כל מה שתואר למעלה הוא חיוני ומספיק להצגת גיליונות באמצעות GroupDocs.Viewer. עם זאת, קיימות אפשרויות נוספות רבות, שאינן מחויבות, אך מאפשרות למשתמשים לכוונן את תוצאת ההצגה עוד יותר.
חלק מהאפשרויות מיוצגות כמאפיינים של מחלקת SpreadsheetOptions, הנגישה דרך המאפיין SpreadsheetOptions של מחלקת אפשרויות הצגה. אחרות ממוקמות במחלקה המופשטת ViewOptions המשותפת לכל ארבעת מצבי ההצגה.
הצגת כותרות שורות ועמודות
כאשר MS Excel או תוכנת עיבוד טבלאות דומה פותחת מסמך גיליון אלקטרוני, היא מציגה את כותרות העמודות והשורות: העמודות ממוספרות באותיות (A, B, C, AA, AB, …) והשורות ממוספרות (1, 2, 3, …, 1048576). בעת הצגה, GroupDocs.Viewer באופן ברירת‑מחדל אינו מציג כותרות אלו, מכיוון שהן חלק מממשק תוכנת הטבלאות ולא מהמסמך עצמו. ניתן לשנות זאת באמצעות המאפיין RenderHeadings מסוג בוליאני. כברירת‑מחדל הוא מושבת (false), אך כאשר הוא מופעל (true) כותרות השורות והעמודות יופיעו במסמך הפלט, כפי שניתן לראות בצילום המסך למטה.
הצגת קווי רשת של הגיליון
הקונספט של אפשרות זו דומה מאוד לקודמת. באופן ברירת‑מחדל GroupDocs.Viewer אינו מציג קווי רשת בין התאים, מכיוון שהם אינם חלק מהגיליון אלא דרך ייצוג של תוכנת הטבלאות. עם זאת, באמצעות המאפיין RenderGridLines מסוג בוליאני ניתן לחקות את ההתנהגות של MS Excel. הקצו ערך true למאפיין SpreadsheetOptions.RenderGridLines וקווי הרשת יופיעו במסמך הפלט, כפי שמוצג בצילום המסך למטה.
שליטה על גלישת טקסט בתא
זהו תרחיש נפוץ שבו טקסט מסוים אינו מתיישב בגבולות התא שלו. איך להציג טקסט זה בצורה נכונה? GroupDocs.Viewer מציע מאפיין מיוחד SpreadsheetOptions.TextOverflowMode לפתרון בעיה זו. למאפיין TextOverflowMode ערך מסוג TextOverflowMode, שהוא enum עם 4 אפשרויות, המוסברות להלן.
OverlayIfNextIsEmpty
בברירת‑מחדל למאפיין SpreadsheetOptions.TextOverflowMode יש ערך OverlayIfNextIsEmpty, המדמה את ההתנהגות ברירת‑המחדל של Microsoft Excel. ערך זה מאפשר לטקסט לגלוש לתאים סמוכים רק אם תאים אלו ריקים. אם התאים הסמוכים אינם ריקים, הטקסט החורג נחתך.
הצילום למעלה מציג קובץ HTML שהומר מקובץ XLSX עם ערך OverlayIfNextIsEmpty. שימו לב לתא “B2” — יש בו טקסט ארוך והוא נחתך מכיוון שהתא “C2” אינו ריק. התא “C3” מכיל טקסט ארוך שאינו מתיישב, ולכן הוא חורג לתאים “D2” ו‑“E2” שהם ריקים.
Overlay
הערך TextOverflowMode.Overlay דומה במקצת לערך הקודם, אך נחשב לתוקפני יותר: טקסט ארוך שלא מתיישב בגבולות התא המקורי תמיד חורג, ללא קשר למצב התאים הסמוכים. אם בתאים הסמוכים יש כבר טקסט או נתונים אחרים, הם יימחקו.
הצילום למעלה מדגים כיצד זה עובד. הטקסט הארוך בתא “B2” חורג לתאים “C2”, “D2”, “E2”, “F2”. כתוצאה מכך, הטקסט המקורי בתאים “C2” ו‑“F2” נמחק.
HideText
המצב TextOverflowMode.HideText פועל בניגוד למצב Overlay — במקום לגלוש, הטקסט נחתך באופן מוחלט אם אינו מתיישב בגבולות התא, ללא קשר למרחב פנוי בתאים הסמוכים.
בצילום המסך למעלה ניתן לראות זאת בתא “C3” — למרות שיש מקום פנוי בתא “D3” והלאה, הטקסט נחתך ללא תנאי.
AutoFitColumn
הערך TextOverflowMode.AutoFitColumn פותר את הבעיה בגישה אחרת — הוא מרחיב את רוחב העמודה כך שתתאים לטקסט של כל תא. כלומר, לא משנה כמה הטקסט ארוך, רוחב העמודות שבהן נמצא התא יוגדל כדי להכיל את כל המחרוזת.
הצילום למעלה מציג את האופן שבו זה פועל. כמובן, גישה זו עלולה להיות לא מתאימה במקרים מסוימים, במיוחד כאשר הטקסט בתא(ים) ארוך מאוד — הדבר יגרום לעמוד להיות רחב מאוד עם גלילה אופקית מעצבנת.
הצגת שורות ועמודות מוסתרות
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 אחראים על תכונה זו.
הצילום למעלה מדגים שהמאפיינים SkipEmptyRows ו‑SkipEmptyColumns מופעלים.
הצגה או הסתרת תגובות בתאים
תאים בגיליון אלקטרוני עשויים להכיל תגובות, ובברירת‑מחדל GroupDocs.Viewer מציג את כולן. ניתן לבטל זאת באמצעות המאפיין BaseViewOptions.RemoveComments — אם תגדירו אותו ל‑true, לא תוצגנה תגובות. שימו לב שמאפיין זה נמצא במחלקת BaseViewOptions, ולא ב‑SpreadsheetOptions.
הצילום למעלה מציג המרה של קובץ XLSX עם תגובות בתאים לפורמט PNG עם אפשרויות ברירת‑המחדל — תגובת התא “E2” מופיעה בקובץ PNG המתקבל.
הגדרת שוליים של גיליון בעמודי PDF הפלט
בעת המרת גיליונות לפורמט PDF ניתן לשלוט בשוליים — המרחק בסנטימטרים משולש העמוד לתוכן. קיימים 4 מאפיינים לשליטה בשוליים העליון, הימני, התחתון והשמאלי:
SpreadsheetOptions.TopMarginSpreadsheetOptions.RightMarginSpreadsheetOptions.BottomMarginSpreadsheetOptions.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);
}
התמונה הבאה מציגה את התוצאה:
סיכום
פורמטי הגיליון מורכבים, והמסמכים עשויים להכיל תוכן מגוון באורך וסוגים שונים. במקרים רבים אי אפשר להציג מסמך גיליון מורכב לפורמט כלשהו עם אפשרויות ברירת‑המחדל בלבד, ולכן 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 עבור .NET מ‑releases.groupdocs.com. ניתן גם לקבל רישיון זמני כדי לנסות את כל הפונקציות והיכולות ללא מגבלות מ‑here.