SimpleTable.cs
- //
- // This code is part of Document Solutions for Word demos.
- // Copyright (c) MESCIUS inc. All rights reserved.
- //
- using System;
- using System.IO;
- 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;
- }
- }
- }
-