إنشاء جدول
يسمح Aspose.Words للمستخدمين بإنشاء جداول في مستند من البداية ويوفر عدة طرق مختلفة للقيام بذلك. تقدم هذه المقالة تفاصيل حول كيفية إضافة جداول منسقة إلى مستندك باستخدام كل طريقة، بالإضافة إلى مقارنة كل طريقة في نهاية المقالة.
أنماط الجدول الافتراضية
يتم إعطاء الجدول الذي تم إنشاؤه حديثًا قيمًا افتراضية مشابهة لتلك المستخدمة في Microsoft Word:
خاصية الجدول | الافتراضي في Aspose.Words |
---|---|
Border Style |
Single |
Border Width |
1/2 pt |
Border Color |
Black |
Left and Right Padding |
5.4 pts |
AutoFit Mode |
AutoFit to Window |
Allow AutoFit |
True |
إنشاء جدول باستخدام DocumentBuilder
في Aspose.Words، يمكن للمستخدمين إنشاء جدول في مستند باستخدام DocumentBuilder. الخوارزمية الأساسية لإنشاء الجدول هي كما يلي:
- ابدأ الجدول باستخدام StartTable
- أضف خلية إلى الجدول باستخدام InsertCell – يؤدي هذا تلقائيًا إلى بدء صف جديد
- اختياريًا، استخدم خاصية CellFormat لتحديد تنسيق الخلية
- أدخل محتوى الخلية باستخدام طرق DocumentBuilder المناسبة مثل Writeln وInsertImage وغيرها
- كرر الخطوات من 2 إلى 4 حتى يكتمل الصف
- اتصل بـ EndRow لإنهاء الصف الحالي
- اختياريًا، استخدم خاصية RowFormat لتحديد تنسيق الصف
- كرر الخطوات من 2 إلى 7 حتى يكتمل الجدول
- اتصل بـ EndTable لإنهاء بناء الجدول
تفاصيل مهمة:
- يمكن أيضًا استدعاء StartTable داخل الخلية، وفي هذه الحالة يبدأ إنشاء جدول متداخل داخل الخلية.
- بعد استدعاء InsertCell، يتم إنشاء خلية جديدة، وسيتم إضافة أي محتوى تضيفه باستخدام طرق أخرى لفئة DocumentBuilder إلى الخلية الحالية. لإنشاء خلية جديدة في نفس الصف، اتصل بـ InsertCell مرة أخرى.
- إذا تم استدعاء InsertCell مباشرة بعد EndRow ونهاية الصف، فسيستمر الجدول في صف جديد.
- يجب استدعاء طريقة EndTable لإنهاء الجدول مرة واحدة فقط بعد استدعاء EndRow. يؤدي استدعاء EndTable إلى نقل المؤشر من الخلية الحالية إلى الموضع الذي يقع مباشرة بعد الجدول.
يمكن رؤية عملية إنشاء الجدول بوضوح في الصورة التالية:
يوضح مثال التعليمات البرمجية التالي كيفية إنشاء جدول بسيط باستخدام DocumentBuilder بالتنسيق الافتراضي:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Start building the table. | |
builder.StartTable(); | |
builder.InsertCell(); | |
builder.Write("Row 1, Cell 1 Content."); | |
// Build the second cell. | |
builder.InsertCell(); | |
builder.Write("Row 1, Cell 2 Content."); | |
// Call the following method to end the row and start a new row. | |
builder.EndRow(); | |
// Build the first cell of the second row. | |
builder.InsertCell(); | |
builder.Write("Row 2, Cell 1 Content"); | |
// Build the second cell. | |
builder.InsertCell(); | |
builder.Write("Row 2, Cell 2 Content."); | |
builder.EndRow(); | |
// Signal that we have finished building the table. | |
builder.EndTable(); | |
doc.Save(ArtifactsDir + "WorkingWithTables.CreateSimpleTable.docx"); |
يوضح مثال التعليمات البرمجية التالي كيفية إنشاء جدول منسق باستخدام DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Table table = builder.StartTable(); | |
builder.InsertCell(); | |
// Table wide formatting must be applied after at least one row is present in the table. | |
table.LeftIndent = 20.0; | |
// Set height and define the height rule for the header row. | |
builder.RowFormat.Height = 40.0; | |
builder.RowFormat.HeightRule = HeightRule.AtLeast; | |
builder.CellFormat.Shading.BackgroundPatternColor = Color.FromArgb(198, 217, 241); | |
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center; | |
builder.Font.Size = 16; | |
builder.Font.Name = "Arial"; | |
builder.Font.Bold = true; | |
builder.CellFormat.Width = 100.0; | |
builder.Write("Header Row,\n Cell 1"); | |
// We don't need to specify this cell's width because it's inherited from the previous cell. | |
builder.InsertCell(); | |
builder.Write("Header Row,\n Cell 2"); | |
builder.InsertCell(); | |
builder.CellFormat.Width = 200.0; | |
builder.Write("Header Row,\n Cell 3"); | |
builder.EndRow(); | |
builder.CellFormat.Shading.BackgroundPatternColor = Color.White; | |
builder.CellFormat.Width = 100.0; | |
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center; | |
// Reset height and define a different height rule for table body. | |
builder.RowFormat.Height = 30.0; | |
builder.RowFormat.HeightRule = HeightRule.Auto; | |
builder.InsertCell(); | |
// Reset font formatting. | |
builder.Font.Size = 12; | |
builder.Font.Bold = false; | |
builder.Write("Row 1, Cell 1 Content"); | |
builder.InsertCell(); | |
builder.Write("Row 1, Cell 2 Content"); | |
builder.InsertCell(); | |
builder.CellFormat.Width = 200.0; | |
builder.Write("Row 1, Cell 3 Content"); | |
builder.EndRow(); | |
builder.InsertCell(); | |
builder.CellFormat.Width = 100.0; | |
builder.Write("Row 2, Cell 1 Content"); | |
builder.InsertCell(); | |
builder.Write("Row 2, Cell 2 Content"); | |
builder.InsertCell(); | |
builder.CellFormat.Width = 200.0; | |
builder.Write("Row 2, Cell 3 Content."); | |
builder.EndRow(); | |
builder.EndTable(); | |
doc.Save(ArtifactsDir + "WorkingWithTables.FormattedTable.docx"); |
يوضح مثال التعليمات البرمجية التالي كيفية إدراج جدول متداخل باستخدام DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Cell cell = builder.InsertCell(); | |
builder.Writeln("Outer Table Cell 1"); | |
builder.InsertCell(); | |
builder.Writeln("Outer Table Cell 2"); | |
// This call is important to create a nested table within the first table. | |
// Without this call, the cells inserted below will be appended to the outer table. | |
builder.EndTable(); | |
// Move to the first cell of the outer table. | |
builder.MoveTo(cell.FirstParagraph); | |
// Build the inner table. | |
builder.InsertCell(); | |
builder.Writeln("Inner Table Cell 1"); | |
builder.InsertCell(); | |
builder.Writeln("Inner Table Cell 2"); | |
builder.EndTable(); | |
doc.Save(ArtifactsDir + "WorkingWithTables.NestedTable.docx"); |
إنشاء جدول عبر DOM (Document Object Model)
يمكنك إدراج الجداول مباشرة في DOM عن طريق إضافة عقدة Table جديدة في موضع محدد.
يرجى ملاحظة أنه بعد إنشاء عقدة الجدول مباشرة، سيكون الجدول نفسه فارغًا تمامًا، أي أنه لا يحتوي بعد على صفوف وخلايا. لإدراج صفوف وخلايا في جدول، قم بإضافة العقد الفرعية Row وCell المناسبة إلى ملف DOM.
يوضح مثال التعليمات البرمجية التالي كيفية إنشاء جدول جديد من البداية عن طريق إضافة العقد الفرعية المناسبة إلى شجرة المستندات:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
// We start by creating the table object. Note that we must pass the document object | |
// to the constructor of each node. This is because every node we create must belong | |
// to some document. | |
Table table = new Table(doc); | |
doc.FirstSection.Body.AppendChild(table); | |
// Here we could call EnsureMinimum to create the rows and cells for us. This method is used | |
// to ensure that the specified node is valid. In this case, a valid table should have at least one Row and one cell. | |
// Instead, we will handle creating the row and table ourselves. | |
// This would be the best way to do this if we were creating a table inside an algorithm. | |
Row row = new Row(doc); | |
row.RowFormat.AllowBreakAcrossPages = true; | |
table.AppendChild(row); | |
Cell cell = new Cell(doc); | |
cell.CellFormat.Shading.BackgroundPatternColor = Color.LightBlue; | |
cell.CellFormat.Width = 80; | |
cell.AppendChild(new Paragraph(doc)); | |
cell.FirstParagraph.AppendChild(new Run(doc, "Row 1, Cell 1 Text")); | |
row.AppendChild(cell); | |
// We would then repeat the process for the other cells and rows in the table. | |
// We can also speed things up by cloning existing cells and rows. | |
row.AppendChild(cell.Clone(false)); | |
row.LastCell.AppendChild(new Paragraph(doc)); | |
row.LastCell.FirstParagraph.AppendChild(new Run(doc, "Row 1, Cell 2 Text")); | |
// We can now apply any auto fit settings. | |
table.AutoFit(AutoFitBehavior.FixedColumnWidths); | |
doc.Save(ArtifactsDir + "WorkingWithTables.InsertTableDirectly.docx"); |
إنشاء جدول من HTML
يدعم Aspose.Words إدراج محتوى في مستند من مصدر HTML باستخدام طريقة InsertHtml. يمكن أن يكون الإدخال عبارة عن صفحة HTML كاملة أو مجرد مقتطف جزئي.
باستخدام طريقة InsertHtml، يمكن للمستخدمين إدراج الجداول في المستند عبر علامات الجدول مثل <table>
، <tr>
، <td>
.
يوضح مثال التعليمات البرمجية التالي كيفية إدراج جدول في مستند من سلسلة تحتوي على علامات HTML:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Note that AutoFitSettings does not apply to tables inserted from HTML. | |
builder.InsertHtml("<table>" + | |
"<tr>" + | |
"<td>Row 1, Cell 1</td>" + | |
"<td>Row 1, Cell 2</td>" + | |
"</tr>" + | |
"<tr>" + | |
"<td>Row 2, Cell 2</td>" + | |
"<td>Row 2, Cell 2</td>" + | |
"</tr>" + | |
"</table>"); | |
doc.Save(ArtifactsDir + "WorkingWithTables.InsertTableFromHtml.docx"); |
إدراج نسخة من جدول موجود
في كثير من الأحيان تحتاج إلى إنشاء جدول استنادًا إلى جدول موجود بالفعل في المستند. أسهل طريقة لتكرار جدول مع الاحتفاظ بجميع التنسيقات هي استنساخ عقدة الجدول باستخدام طريقة Clone.
يمكن استخدام نفس الأسلوب لإضافة نسخ من صف أو خلية موجودة إلى الجدول.
يوضح مثال التعليمات البرمجية التالي كيفية تكرار جدول باستخدام منشئي العقدة:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(MyDir + "Tables.docx"); | |
Table table = (Table) doc.GetChild(NodeType.Table, 0, true); | |
// Clone the table and insert it into the document after the original. | |
Table tableClone = (Table) table.Clone(true); | |
table.ParentNode.InsertAfter(tableClone, table); | |
// Insert an empty paragraph between the two tables, | |
// or else they will be combined into one upon saving this has to do with document validation. | |
table.ParentNode.InsertAfter(new Paragraph(doc), table); | |
doc.Save(ArtifactsDir + "WorkingWithTables.CloneCompleteTable.docx"); |
يوضح مثال التعليمات البرمجية التالي كيفية استنساخ الصف الأخير من الجدول وإلحاقه بالجدول:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(MyDir + "Tables.docx"); | |
Table table = (Table) doc.GetChild(NodeType.Table, 0, true); | |
Row clonedRow = (Row) table.LastRow.Clone(true); | |
// Remove all content from the cloned row's cells. This makes the row ready for new content to be inserted into. | |
foreach (Cell cell in clonedRow.Cells) | |
cell.RemoveAllChildren(); | |
table.AppendChild(clonedRow); | |
doc.Save(ArtifactsDir + "WorkingWithTables.CloneLastRow.docx"); |
إذا كنت تتطلع إلى إنشاء جداول في مستند تنمو ديناميكيًا مع كل سجل من مصدر بياناتك، فلا يُنصح باستخدام الطريقة المذكورة أعلاه. بدلاً من ذلك، يتم تحقيق الإخراج المطلوب بسهولة أكبر باستخدام Mail merge مع المناطق. يمكنك معرفة المزيد حول هذه التقنية في قسم Mail Merge مع المناطق.
قارن طرق إنشاء جدول
يوفر Aspose.Words عدة طرق لإنشاء جداول جديدة في المستند. كل طريقة لها مزاياها وعيوبها، وبالتالي فإن اختيار الطريقة التي سيتم استخدامها يعتمد غالبًا على الموقف المحدد.
دعونا نلقي نظرة فاحصة على هذه الطرق لإنشاء الجداول ومقارنة إيجابياتها وسلبياتها:
طريقة | مزايا | سلبيات |
---|---|---|
عبر DocumentBuilder |
الطريقة القياسية لإدراج الجداول ومحتويات المستندات الأخرى | في بعض الأحيان يكون من الصعب إنشاء العديد من أنواع الجداول في نفس الوقت باستخدام نفس مثيل المنشئ |
عبر DOM | يتناسب بشكل أفضل مع التعليمات البرمجية المحيطة التي تنشئ العقد وتدرجها مباشرة في DOM دون استخدام DocumentBuilder | تم إنشاء الجدول “فارغًا”: قبل تنفيذ معظم العمليات، يجب عليك الاتصال بـ EnsureMinimum لإنشاء أي عقد فرعية مفقودة |
من HTML | يمكن إنشاء جدول جديد من مصدر HTML باستخدام علامات مثل <table> ، <tr> ، <td> |
لا يمكن تطبيق كافة تنسيقات جدول Microsoft Word الممكنة على HTML |
استنساخ جدول موجود | يمكنك إنشاء نسخة من جدول موجود مع الاحتفاظ بجميع تنسيقات الصفوف والخلايا | يجب إزالة العقد التابعة المناسبة قبل أن يصبح الجدول جاهزًا للاستخدام |