Начало 3-го компонента.
This commit is contained in:
parent
f1dbb5e420
commit
d001a8e245
36
VisualComponentsLib/Components/ComponentBigTable.Designer.cs
generated
Normal file
36
VisualComponentsLib/Components/ComponentBigTable.Designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
||||
namespace VisualComponentsLib.Components
|
||||
{
|
||||
partial class ComponentBigTable
|
||||
{
|
||||
/// <summary>
|
||||
/// Обязательная переменная конструктора.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Освободить все используемые ресурсы.
|
||||
/// </summary>
|
||||
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Код, автоматически созданный конструктором компонентов
|
||||
|
||||
/// <summary>
|
||||
/// Требуемый метод для поддержки конструктора — не изменяйте
|
||||
/// содержимое этого метода с помощью редактора кода.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
184
VisualComponentsLib/Components/ComponentBigTable.cs
Normal file
184
VisualComponentsLib/Components/ComponentBigTable.cs
Normal file
@ -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>(BorderValues.Single),
|
||||
Size = 12
|
||||
},
|
||||
new BottomBorder
|
||||
{
|
||||
Val = new EnumValue<BorderValues>(BorderValues.Single),
|
||||
Size = 12
|
||||
},
|
||||
new LeftBorder
|
||||
{
|
||||
Val = new EnumValue<BorderValues>(BorderValues.Single),
|
||||
Size = 12
|
||||
},
|
||||
new RightBorder
|
||||
{
|
||||
Val = new EnumValue<BorderValues>(BorderValues.Single),
|
||||
Size = 12
|
||||
},
|
||||
new InsideHorizontalBorder
|
||||
{
|
||||
Val = new EnumValue<BorderValues>(BorderValues.Single),
|
||||
Size = 12
|
||||
},
|
||||
new InsideVerticalBorder
|
||||
{
|
||||
Val = new EnumValue<BorderValues>(BorderValues.Single),
|
||||
Size = 12
|
||||
}
|
||||
));
|
||||
|
||||
table.AppendChild<TableProperties>(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<string[,]> 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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user