//// This code is part of Document Solutions for Word demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem.Drawing;usingSystem.Collections.Generic;usingSystem.Linq;usingGrapeCity.Documents.Word; namespaceDsWordWeb.Demos{// This sample creates a simple table,// and demonstrates the following table related tasks:// - Applying table styles (borders and padding);// - Adding rows and cells;// - Removing rows;// - Fetching text from a specific cell;// - Applying character style to a specific cell.publicclassSimpleTable {publicGcWordDocumentCreateDocx() {GcWordDocument doc = newGcWordDocument(); // Random-ish table dimensions:var rand = Util.NewRandom();var rows = rand.Next(15, 100);var cols = rand.Next(4, 6);var getrow = rand.Next(0, 10);var getcol = rand.Next(0, 4);var badrow = 12; // index 12 === number 13 :) var section = doc.Body.Sections.First;var header = section.GetRange().Paragraphs.Add($"A {cols} columns by {rows} rows table (note that the there's no 'row {badrow + 1}'):"); // Add an empty table:var t = section.GetRange().Tables.Add(0, 0); // Add some rows and cells to it:var cells = newList<string>(cols);for (int col = 0; col < cols; ++col) cells.Add(string.Empty);for (int row = 0; row < rows; ++row) {for (int col = 0; col < cols; ++col) cells[col] = $"Row {row + 1}, col {col + 1}"; t.Rows.Add(cells.ToArray()); }// Remove a row: t.Rows[badrow].Delete(); // Create a new table style:var ts1 = doc.Styles.Add("Table Style 1", StyleType.Table);// Assign the style to the table: t.Style = ts1; // We can enumerate all table borders, including inside borders:foreach (var border in ts1.Table.Borders) { border.LineStyle = LineStyle.Triple; border.LineWidth = 0.5f; border.Color.RGB = Color.Purple; }// Overwrite inside border's line styles: ts1.Table.Borders.InsideHorizontal.LineStyle = ts1.Table.Borders.InsideVertical.LineStyle =LineStyle.Double;// Add some cell padding: ts1.Table.Padding.All = 2; // Finally, fetch the text from a certain cell and insert it before the table: // Fetching the text from a cell: because we know exactly the structure of our table,// we can do this without any checks:// - get the cell at index 'getcol' in row 'getrow',// - first child fetches the paragraph,// - next child fetches the run,// - finally, next child fetches the actual text element:var text = t.Rows[getrow].Cells[getcol].Children.First().Children.First().Children.First() asText;// Get the parent run:var run = text.ParentContentasRun;// Mark the found cell with bold/italic font:var rs1 = doc.Styles.Add("cell hi-light", StyleType.Character); rs1.Font.Bold = true; rs1.Font.Italic = true; run.Style = rs1;// Add the fetched text from cell (2,0) before the document's opening paragraph, // using the same character style:var pp = header.GetRange().Paragraphs.Insert($"Text from cell at row {getrow + 1}, col {getcol + 1} (drawn with bold/italic font): \"", InsertLocation.Before);var r = pp.GetRange().Runs.Add(text.Value); r.Style = rs1; pp.GetRange().Runs.Add("\"."); // Done:return doc; } }}