نظرة عامة
مستندات جداول البيانات هي مستندات تحتوي على بيانات على شكل جدول — داخل الصفوف والأعمدة. وتعرف أيضًا باسم دفاتر العمل. هناك العديد من صيغ مستندات جداول البيانات — Office Open XML (مثل XLSX، XLSM، إلخ)، صيغة ملف Microsoft Excel الثنائي (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)، أي يبدأ من “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 قد يصبح مستند HTML الناتج ضخمًا، بضعين أو حتى مئات MiB، ما قد يسبب مشكلات في عرض ملفات بهذا الحجم عبر المتصفحات. وعند التصيير إلى صيغة JPEG قد يتجاوز العرض أو الارتفاع الحد الأقصى البالغ 65535 بكسل. لذا استخدم هذا النمط بحذر.
تقسيم الورقة حسب فواصل الصفحات
SpreadsheetOptions.ForRenderingByPageBreaks()
يضيف Microsoft Excel نفسه فواصل صفحات تلقائية بناءً على حجم الورق وإعدادات الصفحة مثل الاتجاه والهوامش. إذا انتقلت إلى علامة تبويب “View” ثم إلى وضع “Page Break Preview”، سترى خطوطًا زرقاء تقسم مساحة الورقة إلى قطع مستطيلة، كل منها يُسمى “Page 1”، “Page 2”، وهكذا. هذه هي طريقة Excel “للمقترح” لتقسيم الورقة إلى صفحات.
باستخدام هذه الطريقة يتبع GroupDocs.Viewer Excel ويقسم الأوراق وفقًا لفواصل الصفحات، تمامًا كما يفعل 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 بميزة فريدة — دمج منطقة الطباعة وفواصل الصفحات في وضع واحد. في هذه الحالة يأخذ 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 من النوع المنطقي يمكن محاكاة سلوك Excel. ضع القيمة true في خاصية SpreadsheetOptions.RenderGridLines وستظهر خطوط الشبكة في المستند الناتج، كما هو موضح في الصورة أدناه.
التحكم في تدفق نص الخلية
سيناريو شائع هو وجود نص لا ينسجم مع حدود الخلية. كيف يتم عرض هذا النص؟ يوفر GroupDocs.Viewer الخاصية الخاصة بـSpreadsheetOptions.TextOverflowMode لمعالجة هذه المشكلة. خاصية TextOverflowMode هي من نوع تعداد (enum) يحمل نفس الاسم وتحتوي على 4 قيم، تُشرح أدناه.
OverlayIfNextIsEmpty
القيمة الافتراضية هي OverlayIfNextIsEmpty، وهي تحاكي سلوك Excel الافتراضي. تسمح هذه القيمة بتدفق النص إلى الخلايا المجاورة فقط إذا كانت هذه الخلايا فارغة. إذا لم تكن الخلايا المجاورة فارغة، يتم قص النص المتدفق.
تُظهر الصورة ملف HTML مُصدَّر من ملف XLSX مع قيمة OverlayIfNextIsEmpty. لاحظ الخلية “B2” التي تحتوي نصًا طويلًا وقد قُطع لأن الخلية “C2” غير فارغة. أما الخلية “C3” فنصها الطويل تدفق إلى الخلايا “D2” و “E2” لأنهما فارغتان.
Overlay
قيمة Overlay مشابهة إلى حد ما للسابق لكنها أكثر عدوانية: أي نص طويل لا ينسجم مع حدود الخلية الأصلية سيتدفق دائمًا إلى الخلايا المجاورة، بغض النظر عن محتواها، وستُستبدل البيانات الموجودة فيها.
تظهر الصورة كيف يعمل هذا. النص الطويل في الخلية “B2” تدفق إلى الخلايا “C2”، “D2”، “E2”، “F2”. نتيجةً لذلك، تم محو النص الأصلي في الخلايا “C2” و “F2”.
HideText
قيمة HideText تعمل عكس ما يفعله Overlay— بدلاً من التدفق يتم قص النص الذي لا ينسجم مع حدود خلطته، بغض النظر عما إذا كان هناك مساحة خالية في الخلايا المجاورة أم لا.
في الصورة يمكن ملاحظة الخلية “C3”؛ رغم وجود مساحة فارغة في “D3” وما يليه، تم قص النص بشكل قسري.
AutoFitColumn
قيمة 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 مجموعة شاملة من الخصائص؛ بفضلها يستطيع كل مستخدم تعديل التصيير ليتناسب مع احتياجاته الخاصة.
راجع أيضًا
- تصيير جداول Excel وApple Numbers كملفات HTML، PDF، وصور
- تقسيم ورقة إلى صفحات
- تحديد خيارات تصيير جداول البيانات
احصل على نسخة تجريبية مجانية
يمكنك تنزيل نسخة تجريبية مجانية من GroupDocs.Viewer لـ .NET من releases.groupdocs.com. يمكنك أيضًا الحصول على ترخيص مؤقت لتجربة جميع الميزات والوظائف دون قيود من هنا.