diff --git a/VisualComponentsLib/Components/ComponentBigTable.Designer.cs b/VisualComponentsLib/Components/ComponentBigTable.Designer.cs new file mode 100644 index 0000000..52617bd --- /dev/null +++ b/VisualComponentsLib/Components/ComponentBigTable.Designer.cs @@ -0,0 +1,36 @@ +namespace VisualComponentsLib.Components +{ + partial class ComponentBigTable + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/VisualComponentsLib/Components/ComponentBigTable.cs b/VisualComponentsLib/Components/ComponentBigTable.cs new file mode 100644 index 0000000..92b4c5e --- /dev/null +++ b/VisualComponentsLib/Components/ComponentBigTable.cs @@ -0,0 +1,184 @@ +using DocumentFormat.OpenXml.Packaging; +using DocumentFormat.OpenXml.Wordprocessing; +using DocumentFormat.OpenXml; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VisualComponentsLib.Components.SupportClasses; + +namespace VisualComponentsLib.Components +{ + public partial class ComponentBigTable : Component + { + private WordprocessingDocument? _wordDocument; + + private Body? _docBody; + + public ComponentBigTable() + { + InitializeComponent(); + } + + public ComponentBigTable(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + + public void CreateDoc(SimpleTable simpleTable) + { + //создаём документ word + _wordDocument = WordprocessingDocument.Create(simpleTable.FilePath, WordprocessingDocumentType.Document); + + //вытаскиваем главную часть из вордовского документа + MainDocumentPart mainPart = _wordDocument.AddMainDocumentPart(); + + mainPart.Document = new Document(); + + //генерируем тело основной части документа + _docBody = mainPart.Document.AppendChild(new Body()); + + _wordDocument.Close(); + + AddTable(simpleTable); + } + + //создание таблицы + private void AddTable(SimpleTable simpleTable) + { + if (!CheckData(simpleTable.DataList)) + { + throw new Exception("Не все ячейки заполнены"); + } + + using (var document = WordprocessingDocument.Open(simpleTable.FilePath, true)) + { + var doc = document.MainDocumentPart.Document; + + #region Создание заголовка + + ParagraphProperties paragraphProperties = new(); + + paragraphProperties.AppendChild(new Justification + { + Val = JustificationValues.Center + }); + + paragraphProperties.AppendChild(new Indentation()); + + Paragraph header = new(); + + header.AppendChild(paragraphProperties); + + var docRun = new Run(); + + var properties = new RunProperties(); + + properties.AppendChild(new FontSize + { + Val = "48" + }); + + properties.AppendChild(new Bold()); + + docRun.AppendChild(properties); + + docRun.AppendChild(new Text(simpleTable.TableName)); + + header.AppendChild(docRun); + + #endregion + + #region Создание таблицы + + Table table = new Table(); + + TableProperties props = new TableProperties( + new TableBorders( + new TopBorder + { + Val = new EnumValue(BorderValues.Single), + Size = 12 + }, + new BottomBorder + { + Val = new EnumValue(BorderValues.Single), + Size = 12 + }, + new LeftBorder + { + Val = new EnumValue(BorderValues.Single), + Size = 12 + }, + new RightBorder + { + Val = new EnumValue(BorderValues.Single), + Size = 12 + }, + new InsideHorizontalBorder + { + Val = new EnumValue(BorderValues.Single), + Size = 12 + }, + new InsideVerticalBorder + { + Val = new EnumValue(BorderValues.Single), + Size = 12 + } + )); + + table.AppendChild(props); + + for (var i = 0; i < simpleTable.DataList.Count; i++) + { + var tr = new TableRow(); + + for (var j = 0; j < simpleTable.DataList[i].Length; j++) + { + var tc = new TableCell(); + + tc.Append(new TableCellProperties(new TableCellWidth + { + Type = TableWidthUnitValues.Dxa, + Width = "2000" + } + )); + + tc.Append(new Paragraph(new Run(new Text(simpleTable.DataList[i][0, j])))); + + tr.Append(tc); + } + + table.Append(tr); + } + + #endregion + + doc.Body.Append(header); + + doc.Body.Append(table); + + doc.Save(); + } + } + + //проверка заполненности входных значений + bool CheckData(List data) + { + for (int i = 0; i < data.Count; i++) + { + for (int j = 0; j < data[i].Length; j++) + { + if (string.IsNullOrEmpty(data[i][0, j])) return false; + } + } + + return true; + } + } +}