نظرة عامة
مستندات الجداول الإلكترونية هي مستندات تحتوي على بيانات على شكل جدول — داخل الصفوف والأعمدة. وتُعرف أيضًا باسم دفاتر العمل. هناك العديد من صيغ مستندات الجداول الإلكترونية — 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);
}
الآن دعنا نتحدث عن الأوراق (worksheets). كل جدول إلكتروني يحتوي على ورقة واحدة على الأقل. في معظم برامج معالجة الجداول مثل Microsoft Excel تُعرض الأوراق كـ علامات تبويب. قد تحتوي بعض صيغ الجداول على ورقة واحدة فقط؛ وهذا يشمل، على سبيل المثال، جميع الصيغ النصية القائمة على الفواصل (CSV، TSV إلخ).
بشكل افتراضي، يقوم GroupDocs.Viewer بعرض جميع الأوراق داخل الجدول المحدد. لكن يمكن تغيير ذلك. تحتوي طريقة Viewer.View() على نسخة مفرطة تستقبل مجموعة أرقام الصفحات كمعامل ثانٍ — Int32[] pageNumbers. عند استخدام هذا المعامل، تُعرض فقط الصفحات المحددة. هذا المعامل عالمي ويُطبق على جميع الصيغ المدعومة التي تحتوي على صفحات، ولكن في سياق عائلة صيغ الجداول الإلكترونية يصف أرقام الأوراق التي يجب عرضها.
يرجى ملاحظة أن ترقيم الصفحات بشكل عام وترقيم الأوراق بشكل خاص يبدأ من 1، وليس من 0.
المثال أدناه يوضح كيفية عرض الورقة الأولى والثالثة إلى PNG في جدول يحتوي على 3 أوراق.
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 قد يصبح المستند الناتج ضخمًا، عشرات أو حتى مئات الـ MiB، مما قد يسبب مشاكل عند عرض مثل هذه الملفات الكبيرة في المتصفحات. وعند التحويل إلى صيغة JPEG قد تتجاوز العرض أو الارتفاع الحد الأقصى البالغ 65535 بكسل. لذا استخدم هذا الوضع بحذر.
تقسيم الورقة حسب فواصل الصفحات
SpreadsheetOptions.ForRenderingByPageBreaks()
يضيف Microsoft Excel نفسه فواصل صفحات تلقائية بناءً على حجم الورق وإعدادات الصفحة مثل الاتجاه والهوامش. إذا انتقلت إلى علامة تبويب “View” ودخلت وضع “Page Break Preview”، ستظهر خطوط زرقاء تقسم مساحة الورقة إلى قطع مستطيلة، كل منها مُعنون بـ “Page 1”، “Page 2”، وهكذا. هكذا “يقترح” Excel تقسيم الورقة إلى صفحات.
بهذه الطريقة يتبع GroupDocs.Viewer Microsoft Excel ويقسم الأوراق وفقًا لفواصل الصفحات، تمامًا كما يفعل 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 لها نوع يحمل نفس الاسم، وهو تعداد (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. تجدر الإشارة إلى أن خاصية RenderHiddenPages ليست ضمن 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 مجموعة شاملة من الخصائص؛ مع هذه الخصائص سيتمكن كل مستخدم من ضبط العرض ليتناسب مع احتياجاته الخاصة.
انظر أيضًا
- 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. يمكنك أيضًا الحصول على ترخيص مؤقت لتجربة جميع الميزات والوظائف دون قيود من هنا.