SimpleTable.cs
C# VB
//// This code is part of Document Solutions for Word demos.// Copyright (c) MESCIUS inc. All rights reserved.//using System.Drawing;using System.Collections.Generic;using System.Linq;using GrapeCity.Documents.Word;
namespace DsWordWeb.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. public class SimpleTable { public GcWordDocument CreateDocx() { GcWordDocument doc = new GcWordDocument();
// 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 = new List<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() as Text; // Get the parent run: var run = text.ParentContent as Run; // 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; } }}