Как создать структурированную таблицу с данными на C# и .NET


    Этот пример кода показывает, как используя DocumentCore можно создать структурированную таблицу с данными в различных форматах.
Заполним ячейки внутри таблицы текстом, гиперссылками и изображением и сохраним это в PDF и DOCX.

Полный код

using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using SautinSoft.Document;
using SautinSoft.Document.Drawing;
using SautinSoft.Document.Tables;

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Get your free 100-day key here:   
            // https://sautinsoft.com/start-for-free/

				StructuredTable();
		}
        /// <summary>
        /// Creating a structured table with data of different formats.
        /// </summary>
        /// <remarks>
        /// Details: https://sautinsoft.com/products/document/help/net/developer-guide/create-structured-table.php
        /// </remarks>
        static void StructuredTable()
        {		
            DocumentCore documentCore = new DocumentCore();
            byte[] imageData = File.ReadAllBytes(@"../../../image/smile.jpg");
            ParagraphStyle TableHeaderStyle = (ParagraphStyle)Style.CreateStyle(StyleTemplateType.Normal, documentCore);
            TableHeaderStyle.Name = "TableHeaderStyle";
            TableHeaderStyle.ParagraphFormat.Alignment = HorizontalAlignment.Left;
            TableHeaderStyle.ParagraphFormat.LeftIndentation = 6;
            TableHeaderStyle.CharacterFormat.FontColor = SautinSoft.Document.Color.White;
            TableHeaderStyle.CharacterFormat.FontName = "Segoe UI";
            TableHeaderStyle.CharacterFormat.Size = 9;
            documentCore.Styles.Add(TableHeaderStyle);

            ParagraphStyle TableContentStyle_1 = (ParagraphStyle)Style.CreateStyle(StyleTemplateType.Normal, documentCore);
            TableContentStyle_1.Name = "TableContentStyle_1";
            TableContentStyle_1.ParagraphFormat.Alignment = HorizontalAlignment.Left;
            TableContentStyle_1.ParagraphFormat.LeftIndentation = 6;
            //TableContentStyle_1.CharacterFormat.FontName = "Segoe UI";
            TableContentStyle_1.CharacterFormat.Size = 9;
            documentCore.Styles.Add(TableContentStyle_1);

            TableStyle TableOutlineStyle = (TableStyle)Style.CreateStyle(StyleTemplateType.TableNormal, documentCore);
            TableOutlineStyle.Name = "TableOutlineStyle";
            TableOutlineStyle.ParagraphFormat.SpaceAfter = 10;
            documentCore.Styles.Add(TableOutlineStyle);

            Table table = new Table(documentCore);
            table.TableFormat.PreferredWidth = new TableWidth(100, TableWidthUnit.Percentage);
            table.TableFormat.AutomaticallyResizeToFitContents = true;
            table.TableFormat.Alignment = HorizontalAlignment.Left;
            table.TableFormat.Style = TableOutlineStyle;

            TableRow headerRow = new TableRow(documentCore);
            {
                TableCell cell1 = new TableCell(documentCore);
                cell1.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1.5);
                cell1.CellFormat.BackgroundColor = new SautinSoft.Document.Color("#0054A6");
                cell1.CellFormat.Padding = new Padding(0, 3, 0, 0);
                Paragraph pHeader = new Paragraph(documentCore, "HeaderName");
                pHeader.ParagraphFormat.Style = TableHeaderStyle;
                cell1.Blocks.Add(pHeader);
                headerRow.Cells.Add(cell1);
            }
            {
                TableCell cell2 = new TableCell(documentCore);
                cell2.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1.5);
                cell2.CellFormat.BackgroundColor = new SautinSoft.Document.Color("#0054A6");
                cell2.CellFormat.Padding = new Padding(0, 3, 0, 0);
                Paragraph pHeaderContent = new Paragraph(documentCore, "HeaderContent");
                pHeaderContent.ParagraphFormat.Style = TableHeaderStyle;
                cell2.Blocks.Add(pHeaderContent);
                headerRow.Cells.Add(cell2);
            }
            headerRow.RowFormat.Height = new TableRowHeight(15, HeightRule.Auto);
            headerRow.RowFormat.RepeatOnEachPage = true;
            table.Rows.Add(headerRow);

            string x = "Detects if your application experiences an abnormal rise in the rate of HTTP requests or dependency calls that are reported as failed." +
                " The anomaly detection uses machine learning algorithms and occurs in near real time, " +
                "therefore there's no need to define a frequency for this signal.<br><br>To help you triage and diagnose the problem, an analysis of the characteristics of the failures and related telemetry is provided with the detection. " +
                "This feature works for any app, hosted in the cloud or on your own servers, that generates request or dependency telemetry - for example, " +
                "if you have a worker role that calls <a class=\"ext-smartDetecor-link\" href=\"https://docs.microsoft.com/azure/application-insights/app-insights-api-custom-events-metrics#trackrequest\" target=\"_blank\">TrackRequest()</a> " +
                "or <a class=\"ext-smartDetecor-link\" href=\"https://docs.microsoft.com/azure/application-insights/app-insights-api-custom-events-metrics#trackdependency\" target=\"_blank\">TrackDependency()</a>." +
                "<br/><br/><a class=\"ext-smartDetecor-link\" href=\"https://docs.microsoft.com/azure/azure-monitor/app/proactive-failure-diagnostics\" target=\"_blank\">Learn more about Failure Anomalies</a><br><br>" +
                "<p style=\"font-size: 13px; font-weight: 700;\">A note about your data privacy:</p><br><br>The service is entirely automatic and only you can see these notifications. " +
                "<a class=\"ext-smartDetecor-link\" href=\"https://docs.microsoft.com/en-us/azure/azure-monitor/app/data-retention-privacy\" target=\"_blank\">Read more about data privacy</a><br><br>Smart Alerts conditions can't be edited or added for now";

            TableRow row1 = new TableRow(documentCore);
            {
                TableCell cell1 = new TableCell(documentCore);
                cell1.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1);
                cell1.CellFormat.BackgroundColor = new SautinSoft.Document.Color("#E6E6E6");
                cell1.CellFormat.Padding = new Padding(0, 3, 0, 0);

                Paragraph p1 = new Paragraph(documentCore, "Content Name");
                p1.ParagraphFormat.Style = TableContentStyle_1;
                cell1.Blocks.Add(p1);
                row1.Cells.Add(cell1);
            }
            {
                TableCell cell2 = new TableCell(documentCore);
                cell2.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1);
                cell2.CellFormat.BackgroundColor = new SautinSoft.Document.Color("#E6E6E6");
                cell2.CellFormat.Padding = new Padding(0, 3, 0, 0);
                var y = x.ToString().Replace("\r\n", "");
                (cell2 as TableCell).Blocks.Content.Replace(y, SautinSoft.Document.LoadOptions.HtmlDefault); 
                row1.Cells.Add(cell2);
            }
            row1.RowFormat.Height = new TableRowHeight(15, HeightRule.Auto);
            table.Rows.Add(row1);
            TableRow row2 = new TableRow(documentCore);
            {
                TableCell cell1 = new TableCell(documentCore);
                cell1.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1);
                cell1.CellFormat.BackgroundColor = new SautinSoft.Document.Color("#E6E6E6");
                cell1.CellFormat.Padding = new Padding(0, 3, 0, 0);
                Paragraph p2 = new Paragraph(documentCore, "Image");
                p2.ParagraphFormat.Style = TableContentStyle_1;
                cell1.Blocks.Add(p2);
                row2.Cells.Add(cell1);
            }
            {
                TableCell cell2 = new TableCell(documentCore);
                cell2.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1);
                cell2.CellFormat.BackgroundColor = new SautinSoft.Document.Color("#E6E6E6");
                cell2.CellFormat.Padding = new Padding(0, 3, 0, 0);
                Paragraph p3 = new Paragraph(documentCore, new Picture(documentCore, new MemoryStream(imageData)));
                p3.ParagraphFormat.Style = TableContentStyle_1;
                cell2.Blocks.Add(p3);
                row2.Cells.Add(cell2);
            }
            row2.RowFormat.Height = new TableRowHeight(15, HeightRule.Auto);
            table.Rows.Add(row2);
            Section section = new Section(documentCore);
            section.PageSetup.PageColor.SetSolid(new SautinSoft.Document.Color("#f8f8fa"));
            section.PageSetup.PaperType = PaperType.A4;
            section.PageSetup.Orientation = Orientation.Portrait;
            section.PageSetup.PageMargins = new PageMargins()
            {
                Top = LengthUnitConverter.Convert(30, LengthUnit.Millimeter, LengthUnit.Point),
                Right = LengthUnitConverter.Convert(20, LengthUnit.Millimeter, LengthUnit.Point),
                Bottom = LengthUnitConverter.Convert(5, LengthUnit.Millimeter, LengthUnit.Point),
                Left = LengthUnitConverter.Convert(0, LengthUnit.Millimeter, LengthUnit.Point)
            };
            section.Blocks.Add(table);

            documentCore.Sections.Add(section);
            string filePath = @"structured-table.docx";
            documentCore.Save(filePath, new DocxSaveOptions { });
            System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(filePath) { UseShellExecute = true });
        }
    }
}

Download

Option Infer On

Imports Microsoft.VisualBasic
Imports System
Imports System.Drawing
Imports System.IO
Imports System.Linq
Imports System.Xml.Linq
Imports SautinSoft.Document
Imports SautinSoft.Document.Drawing
Imports SautinSoft.Document.Tables

Namespace Example
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
				StructuredTable()
		End Sub
                ''' Get your free 100-day key here:   
                ''' https://sautinsoft.com/start-for-free/
		''' <summary>
		''' Creating a structured table with data of different formats.
		''' </summary>
		''' <remarks>
		''' Details: https://sautinsoft.com/products/document/help/net/developer-guide/create-structured-table.php
		''' </remarks>
		Private Shared Sub StructuredTable()
			Dim documentCore As New DocumentCore()
			Dim imageData() As Byte = File.ReadAllBytes("../../../image/smile.jpg")
			Dim TableHeaderStyle As ParagraphStyle = CType(Style.CreateStyle(StyleTemplateType.Normal, documentCore), ParagraphStyle)
			TableHeaderStyle.Name = "TableHeaderStyle"
			TableHeaderStyle.ParagraphFormat.Alignment = HorizontalAlignment.Left
			TableHeaderStyle.ParagraphFormat.LeftIndentation = 6
			TableHeaderStyle.CharacterFormat.FontColor = SautinSoft.Document.Color.White
			TableHeaderStyle.CharacterFormat.FontName = "Segoe UI"
			TableHeaderStyle.CharacterFormat.Size = 9
			documentCore.Styles.Add(TableHeaderStyle)

			Dim TableContentStyle_1 As ParagraphStyle = CType(Style.CreateStyle(StyleTemplateType.Normal, documentCore), ParagraphStyle)
			TableContentStyle_1.Name = "TableContentStyle_1"
			TableContentStyle_1.ParagraphFormat.Alignment = HorizontalAlignment.Left
			TableContentStyle_1.ParagraphFormat.LeftIndentation = 6
			'TableContentStyle_1.CharacterFormat.FontName = "Segoe UI";
			TableContentStyle_1.CharacterFormat.Size = 9
			documentCore.Styles.Add(TableContentStyle_1)

			Dim TableOutlineStyle As TableStyle = CType(Style.CreateStyle(StyleTemplateType.TableNormal, documentCore), TableStyle)
			TableOutlineStyle.Name = "TableOutlineStyle"
			TableOutlineStyle.ParagraphFormat.SpaceAfter = 10
			documentCore.Styles.Add(TableOutlineStyle)

			Dim table As New Table(documentCore)
			table.TableFormat.PreferredWidth = New TableWidth(100, TableWidthUnit.Percentage)
			table.TableFormat.AutomaticallyResizeToFitContents = True
			table.TableFormat.Alignment = HorizontalAlignment.Left
			table.TableFormat.Style = TableOutlineStyle

			Dim headerRow As New TableRow(documentCore)
			If True Then
				Dim cell1 As New TableCell(documentCore)
				cell1.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1.5)
				cell1.CellFormat.BackgroundColor = New SautinSoft.Document.Color("#0054A6")
				cell1.CellFormat.Padding = New Padding(0, 3, 0, 0)
				Dim pHeader As New Paragraph(documentCore, "HeaderName")
				pHeader.ParagraphFormat.Style = TableHeaderStyle
				cell1.Blocks.Add(pHeader)
				headerRow.Cells.Add(cell1)
			End If
			If True Then
				Dim cell2 As New TableCell(documentCore)
				cell2.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1.5)
				cell2.CellFormat.BackgroundColor = New SautinSoft.Document.Color("#0054A6")
				cell2.CellFormat.Padding = New Padding(0, 3, 0, 0)
				Dim pHeaderContent As New Paragraph(documentCore, "HeaderContent")
				pHeaderContent.ParagraphFormat.Style = TableHeaderStyle
				cell2.Blocks.Add(pHeaderContent)
				headerRow.Cells.Add(cell2)
			End If
			headerRow.RowFormat.Height = New TableRowHeight(15, HeightRule.Auto)
			headerRow.RowFormat.RepeatOnEachPage = True
			table.Rows.Add(headerRow)


			Dim x As String = "Detects if your application experiences an abnormal rise in the rate of HTTP requests or dependency calls that are reported as failed." &
				" The anomaly detection uses machine learning algorithms and occurs in near real time, " &
				"therefore there's no need to define a frequency for this signal.<br><br>To help you triage and diagnose the problem, an analysis of the characteristics of the failures and related telemetry is provided with the detection. " &
				"This feature works for any app, hosted in the cloud or on your own servers, that generates request or dependency telemetry - for example, " &
				"if you have a worker role that calls <a class=""ext-smartDetecor-link"" href=""https://docs.microsoft.com/azure/application-insights/app-insights-api-custom-events-metrics#trackrequest"" target=""_blank"">TrackRequest()</a> " &
				"or <a class=""ext-smartDetecor-link"" href=""https://docs.microsoft.com/azure/application-insights/app-insights-api-custom-events-metrics#trackdependency"" target=""_blank"">TrackDependency()</a>." &
				"<br/><br/><a class=""ext-smartDetecor-link"" href=""https://docs.microsoft.com/azure/azure-monitor/app/proactive-failure-diagnostics"" target=""_blank"">Learn more about Failure Anomalies</a><br><br>" &
				"<p style=""font-size: 13px; font-weight: 700;"">A note about your data privacy:</p><br><br>The service is entirely automatic and only you can see these notifications. " &
				"<a class=""ext-smartDetecor-link"" href=""https://docs.microsoft.com/en-us/azure/azure-monitor/app/data-retention-privacy"" target=""_blank"">Read more about data privacy</a><br><br>Smart Alerts conditions can't be edited or added for now"

			Dim row1 As New TableRow(documentCore)
			If True Then
				Dim cell1 As New TableCell(documentCore)
				cell1.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1)
				cell1.CellFormat.BackgroundColor = New SautinSoft.Document.Color("#E6E6E6")
				cell1.CellFormat.Padding = New Padding(0, 3, 0, 0)

				Dim p1 As New Paragraph(documentCore, "Content Name")
				p1.ParagraphFormat.Style = TableContentStyle_1
				cell1.Blocks.Add(p1)
				row1.Cells.Add(cell1)
			End If
			If True Then
				Dim cell2 As New TableCell(documentCore)
				cell2.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1)
				cell2.CellFormat.BackgroundColor = New SautinSoft.Document.Color("#E6E6E6")
				cell2.CellFormat.Padding = New Padding(0, 3, 0, 0)
				Dim y = x.ToString().Replace(vbCrLf, "")
				TryCast(cell2, TableCell).Blocks.Content.Replace(y, SautinSoft.Document.LoadOptions.HtmlDefault)
				row1.Cells.Add(cell2)
			End If
			row1.RowFormat.Height = New TableRowHeight(15, HeightRule.Auto)
			table.Rows.Add(row1)
			Dim row2 As New TableRow(documentCore)
			If True Then
				Dim cell1 As New TableCell(documentCore)
				cell1.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1)
				cell1.CellFormat.BackgroundColor = New SautinSoft.Document.Color("#E6E6E6")
				cell1.CellFormat.Padding = New Padding(0, 3, 0, 0)
				Dim p2 As New Paragraph(documentCore, "Image")
				p2.ParagraphFormat.Style = TableContentStyle_1
				cell1.Blocks.Add(p2)
				row2.Cells.Add(cell1)
			End If
			If True Then
				Dim cell2 As New TableCell(documentCore)
				cell2.CellFormat.Borders.SetBorders(MultipleBorderTypes.Outside, BorderStyle.Thick, SautinSoft.Document.Color.White, 1)
				cell2.CellFormat.BackgroundColor = New SautinSoft.Document.Color("#E6E6E6")
				cell2.CellFormat.Padding = New Padding(0, 3, 0, 0)
				Dim p3 As New Paragraph(documentCore, New Picture(documentCore, New MemoryStream(imageData)))
				p3.ParagraphFormat.Style = TableContentStyle_1
				cell2.Blocks.Add(p3)
				row2.Cells.Add(cell2)
			End If
			row2.RowFormat.Height = New TableRowHeight(15, HeightRule.Auto)
			table.Rows.Add(row2)
			Dim section As New Section(documentCore)
			section.PageSetup.PageColor.SetSolid(New SautinSoft.Document.Color("#f8f8fa"))
			section.PageSetup.PaperType = PaperType.A4
			section.PageSetup.Orientation = Orientation.Portrait
			section.PageSetup.PageMargins = New PageMargins() With {
				.Top = LengthUnitConverter.Convert(30, LengthUnit.Millimeter, LengthUnit.Point),
				.Right = LengthUnitConverter.Convert(20, LengthUnit.Millimeter, LengthUnit.Point),
				.Bottom = LengthUnitConverter.Convert(5, LengthUnit.Millimeter, LengthUnit.Point),
				.Left = LengthUnitConverter.Convert(0, LengthUnit.Millimeter, LengthUnit.Point)
			}
			section.Blocks.Add(table)

			documentCore.Sections.Add(section)
			Dim filePath As String = "structured-table.docx"
			documentCore.Save(filePath, New DocxSaveOptions())
			System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(filePath) With {.UseShellExecute = True})
		End Sub
	End Class
End Namespace

Download


Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.com или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже:



Вопросы и предложения всегда приветствуются!

Мы разрабатываем компоненты .Net с 2002 года. Мы знаем форматы PDF, DOCX, RTF, HTML, XLSX и Images. Если вам нужна помощь в создании, изменении или преобразовании документов в различных форматах, мы можем вам помочь. Мы напишем для вас любой пример кода абсолютно бесплатно.