סקירה
מסמכי גיליון אלקטרוני הם מסמכים שמכילים נתונים בצורת טבלה — בתוך שורות ועמודות. הם ידועים גם בשם חוברות עבודה. קיימים מגוון רחב של פורמטים של מסמכי גיליון אלקטרוני — 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. מאמר זה מסביר כיצד לבצע זאת, אילו אפשרויות קיימות ומתי ולמה יש להשתמש בהן.
שימוש בסיסי
קודם כל עלינו לדבר על אפשרויות. קיימת מחלקה נפרדת בממשק הציבורי: 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);
}
כעת נעמוד על ה‑גיליונות עבודה. לכל גיליון אלקטרוני יש לפחות גיליון אחד. ברוב תכניות הטיפול בטבלאות כמו Microsoft Excel, הגיליונות מוצגים כ‑לשוניות. כמה פורמטים של גיליונות מאפשרים רק גיליון אחד; זה כולל, לדוגמה, את כל הפורמטים מבוססי‑טקסט המופרדים במפריד (CSV, TSV וכדומה).
בברירת‑המחדל GroupDocs.Viewer רינדר את כל הגיליונות שבגיליון המצויין. ניתן לשנות זאת. למתודה Viewer.View() יש עומס שמקבל קבוצת מספרי עמודים כפרמטר שני — 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 מבצע פיצול גיליון — חילוקו לחלקים מלבניים מרובים, וכל חלק מונח בעמוד נפרד. קיימות חמש שיטות שונות, המפורטות להלן.
החשוב — כל שיטות הפיצול מוגדרות באותו האופן — באמצעות שיטה סטטית (factory method) ספציפית היוצרת מופע של מחלקת SpreadsheetOptions.
רינדור של כל הגיליון בעמוד אחד
SpreadsheetOptions.ForOnePagePerSheet()
הדרך הקלה והפשוטה ביותר — לבטל פיצול ולהתאים את גודל העמוד כך שיכסה את כל תוכן הגיליון. זהו בחירה טובה כאשר ידוע שהגיליון קטן. עם זאת, אם הגיליון גדול מאוד, גישה זו עלולה לגרום לתוצאות נוראות. במיוחד ברינדור ל‑HTML, קובץ ה‑HTML המתקבל עשוי להגיע למאות ממ"ב, דבר שעלול לגרום לבעיות בתצוגה בדפדפנים. ברינדור ל‑JPEG, המצב עלול להיות גרוע יותר אם הרוחב או הגובה יעברו את המגבלה המרבית של 65535 פיקסלים. לכן השתמשו במצב זה בכוונה.
פיצול גיליון לפי שבירת עמודים
SpreadsheetOptions.ForRenderingByPageBreaks()
Microsoft Excel מוסיף שבירות עמוד אוטומטיות בהתאם לגודל הדף וההגדרות (כיוון, שוליים). אם תעברו ללשונית “תצוגה” ותפעילו את מצב “תצוגת שבירת עמוד”, תראו קווים כחולים שמחלקים את כל שטח הגיליון לחלקים מלבניים, שכל אחד מתויג כ-“Page 1”, “Page 2” וכו’. כך Excel “מציע” לפצל את הגיליון לעמודים.
באמצעות שיטה זו GroupDocs.Viewer פועל לפי שבירות העמוד של Excel.
חשוב לציין שהאפשרות הזאת — פיצול גיליון לפי שבירת עמוד — היא אפשרות ברירת‑המחדל של המאפיין BaseViewOptions.SpreadsheetOptions, ולכן כאשר תייצרו מופע של מחלקת אפשרויות התצוגה, האפשרות [ForRenderingByPageBreaks()] נבחרת כברירת‑מחדל.
רינדור רק של אזור ההדפסה
SpreadsheetOptions.ForRenderingPrintArea()
בנוסף לשבירות העמוד, ל‑Excel קיים מושג “אזור הדפסה”. אזור הדפסה הוא טווח תא(ים) בגיליון המיועד להדפסה, וכל תוכן שמחוץ לאזור זה לא יודפס. כדי להוסיף טווח לתוך אזור ההדפסה, עברו ללשונית “Page Layout”, לחצו על כפתור “Print Area” ואז על “Set Print Area”. כדי להוסיף טווח נוסף, בחרו אותו, לחצו על “Print Area” ואז על “Add to Print Area”. במצב “Page Break Preview” ניתן לראות את כל הטווחים באזורים המוגדרים.
רינדור אזור ההדפסה עם פיצול לפי שבירות עמודים
SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()
GroupDocs.Viewer מציע תכונה ייחודית — שילוב של אזור ההדפסה ושבירות העמוד במצב אחד. במקרה זה Viewer מתחשב בכל טווחי האזור והפיצול לפי שבירות העמוד של הגיליון ומיישם את שניהם במקביל.
בשקף הבא הקו האדום מציין את אזור ההדפסה והקווים הכחולים את שבירות העמוד.
פיצול גיליון לעמודים באופן ידני לפי שורות ועמודות
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage)
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage, int countColumnsPerPage)
לפעמים אף אחת משיטות הפיצול המוזכרות למעלה אינה מתאימה, או שהגיליון בתצורה שאינה תומכת בשבירות עמוד ואזורי הדפסה (לדוגמה CSV). למקרים כאלה GroupDocs.Viewer מאפשר להגדיר ידנית את מספר השורות ו/או העמודות שיראו בכל עמוד. בקיצור, ההבדל בין פיצול לפי שורות בלבד לפיצול לפי שורות ועמודות מוצג בתמונה שלהלן.
אם משתמשים בעומס הראשון של ForSplitSheetIntoPages עם פרמטר יחיד, הפיצול יהיה לפי שורות בלבד. אם משתמשים בעומס השני עם שני פרמטרים, הפיצול יהיה לפי שורות ועמודות.
התאמת אפשרויות נוספות
כל מה שתואר למעלה הוא חיוני ומספיק לרינדור גיליונות עם GroupDocs.Viewer. עם זאת, ישנן אפשרויות נוספות רבות, שאינן חובה, אך מאפשרות למשתמשים לכוונן את תוצאת הרינדור עוד יותר.
חלק מהאפשרויות מיוצגות כמאפיינים של מחלקת SpreadsheetOptions, שנגישה דרך מאפיין SpreadsheetOptions של מחלקת אפשרויות התצוגה. אחרות ממוקמות במחלקה המופשטת ViewOptions, המשותפת לכל ארבע מצבי הרינדור.
רינדור כותרות שורות ועמודות
כאשר Excel או תוכנה דומה פותחת מסמך גיליון, היא מציגה כותרות שורות ועמודות — העמודות מאויתות (A, B, C, AA, AB, …) והשורות ממוספרות (1, 2, 3, …, 1048576). ברירת המחדל של GroupDocs.Viewer היא לא להציג כותרות אלה, כיוון שהן חלק מהממשק של תוכנת הטבלאות ולא מהמסמך עצמו. ניתן לשנות זאת באמצעות המאפיין RenderHeadings מסוג בוליאני. ברירת המחדל היא false; אם משנים ל‑true, כותרות השורות והעמודות יופיעו בתוצר, כפי שמודגם בתמונה למטה.
רינדור קווי רשת של הגיליון
הקונספט כאן דומה לתיאור הקודם. כברירת המחדל GroupDocs.Viewer אינו מציג קווי רשת בין התאים, מכיוון שהם לא חלק מהגיליון אלא דרך הצגת תוכנת הטבלאות. עם זאת, באמצעות המאפיין RenderGridLines מסוג בוליאני ניתן לחקות את ההתנהגות של Excel. הקצו true למאפיין SpreadsheetOptions.RenderGridLines וקווי הרשת יופיעו בתוצר, כפי שמדגים הצילום למטה.
שליטה בהתפצלות טקסט בתא
זהו תרחיש נפוץ — טקסט שנמצא בתא אינו מתאים למימדים של התא. איך להציב את הטקסט בצורה נכונה? GroupDocs.Viewer מציע מאפיין מיוחד SpreadsheetOptions.TextOverflowMode לפתרון הבעיה. המאפיין TextOverflowMode הוא מסוג Enum בעל 4 ערכים, המוסברים להלן.
OverlayIfNextIsEmpty
בברירת המחדל, המאפיין SpreadsheetOptions.TextOverflowMode מוגדר כ‑OverlayIfNextIsEmpty, המחקה את התנהגות ברירת‑המחדל של 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 אלא בכיתה המופשטת 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 מספק סט רחב של מאפיינים; עם אלה כל משתמש יכול לכוונן את הרינדור כך שיתאים לצרכיו.
ראה גם
- רינדור גיליונות Excel ו‑Apple Numbers כ‑HTML, PDF וקבצי תמונה
- פצל גיליון לעמודים
- הגדרת אפשרויות רינדור גיליון אלקטרוני
קבל גרסת ניסיון בחינם
ניתן להוריד גרסת ניסיון חינמית של GroupDocs.Viewer עבור .NET מ‑releases.groupdocs.com. ניתן גם לקבל רישיון זמני כדי לנסות את כל הפונקציות ללא הגבלות מ‑כאן.