diff --git a/UserComponentsOption19/AppShopInternetOption19/AppShopInternetOption19.csproj b/UserComponentsOption19/AppShopInternetOption19/AppShopInternetOption19.csproj
index 663fdb8..6b8ff78 100644
--- a/UserComponentsOption19/AppShopInternetOption19/AppShopInternetOption19.csproj
+++ b/UserComponentsOption19/AppShopInternetOption19/AppShopInternetOption19.csproj
@@ -8,4 +8,9 @@
enable
+
+
+
+
+
\ No newline at end of file
diff --git a/UserComponentsOption19/AppShopInternetOption19/Form1.Designer.cs b/UserComponentsOption19/AppShopInternetOption19/Form1.Designer.cs
index 5a88dd1..60ef221 100644
--- a/UserComponentsOption19/AppShopInternetOption19/Form1.Designer.cs
+++ b/UserComponentsOption19/AppShopInternetOption19/Form1.Designer.cs
@@ -28,10 +28,16 @@
///
private void InitializeComponent()
{
- this.components = new System.ComponentModel.Container();
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(800, 450);
- this.Text = "Form1";
+ SuspendLayout();
+ //
+ // Form1
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Name = "Form1";
+ Text = "Главная форма";
+ ResumeLayout(false);
}
#endregion
diff --git a/UserComponentsOption19/AppShopInternetOption19/Form1.resx b/UserComponentsOption19/AppShopInternetOption19/Form1.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/UserComponentsOption19/AppShopInternetOption19/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/UserComponentsOption19/TestAppForCheckComponentsWorking/FormTestNoVisibleComponents.cs b/UserComponentsOption19/TestAppForCheckComponentsWorking/FormTestNoVisibleComponents.cs
index 50cc694..a2bdf26 100644
--- a/UserComponentsOption19/TestAppForCheckComponentsWorking/FormTestNoVisibleComponents.cs
+++ b/UserComponentsOption19/TestAppForCheckComponentsWorking/FormTestNoVisibleComponents.cs
@@ -46,21 +46,18 @@ namespace TestAppForCheckComponentsWorking
new Employee { Id = 5, Status = "да", FirstName = "Татьяна", LastName = "Петрова", Age = 44, Children = "да", Car = "нет", Position = "Ст. бух.", Departament = "Бухг.", Bonus = 7000.6 }
};
- string[] headerRow1 = { "Идент.", "Статус", "Личные данные", "Личные данные", "Личные данные", "Дети", "Машина", "Работа", "Работа", "Премия" };
- string[] headerRow2 = { "Идент.", "Статус", "Имя", "Фамилия", "Возраст", "Дети", "Машина", "Должность", "Подразделение", "Премия" };
-
- var headerTitles = new List
+ List<(float columnWidth, string headerRowCell1, string headerRowCell2, string property)> columnWidths = new List<(float, string, string, string)>
{
- new[] { "Идент.", "Статус", "Личные данные", "Личные данные", "Личные данные", "Дети", "Машина", "Работа", "Работа", "Премия" },
- new[] { "Идент.", "Статус", "Имя", "Фамилия", "Возраст", "Дети", "Машина", "Должность", "Подразделение", "Премия" }
- };
-
- var columnWidths = new List { 3.0f, 3.0f, 2.0f, 2.0f, 2.0f, 2.0f, 3.0f, 3.0f, 2.0f, 2.0f };
-
- var columnMerges = new List<(int StartColumn, int EndColumn)>
- {
- (2, 4), // Объединяем "Личные данные" на три столбца
- (7, 8) // Объединяем "Работа" на два столбца
+ (1.0f, "Идент.", "Идент.", "Id"),
+ (2.0f, "Статус.", "Статус", "Status" ),
+ (2.0f, "Личные данные.", "Имя.", "FirstName"),
+ (3.0f, "Личные данные.", "Фамилия.", "LastName" ),
+ (2.0f, "Личные данные.", "Возраст.", "Age"),
+ (2.0f, "Дети.", "Дети.", "Children" ),
+ (2.0f, "Машина.", "Машина.", "Car" ),
+ (3.0f, "Работа.", "Должность.", "Position" ),
+ (3.0f, "Работа.", "Подразделение.", "Departament"),
+ (3.0f, "Премия.", "Премия.", "Bonus" ),
};
var columnPropertyMapping = new Dictionary
@@ -77,8 +74,25 @@ namespace TestAppForCheckComponentsWorking
{ 9, "Bonus" }
};
+ string[] headerRow1 = { "Идент.", "Статус", "Личные данные", "Личные данные", "Личные данные", "Дети", "Машина", "Работа", "Работа", "Премия" };
+ string[] headerRow2 = { "Идент.", "Статус", "Имя", "Фамилия", "Возраст", "Дети", "Машина", "Должность", "Подразделение", "Премия" };
+
+ var headerTitles = new List
+ {
+ new[] { "Идент.", "Статус", "Личные данные", "Личные данные", "Личные данные", "Дети", "Машина", "Работа", "Работа", "Премия" },
+ new[] { "Идент.", "Статус", "Имя", "Фамилия", "Возраст", "Дети", "Машина", "Должность", "Подразделение", "Премия" }
+ };
+
+ //var columnWidths = new List { 3.0f, 3.0f, 2.0f, 2.0f, 2.0f, 2.0f, 3.0f, 3.0f, 2.0f, 2.0f };
+
+ var columnMerges = new List<(int StartColumn, int EndColumn)>
+ {
+ (2, 4), // Объединяем "Личные данные" на три столбца
+ (7, 8) // Объединяем "Работа" на два столбца
+ };
+
tableWordNoVisibleComponent.CreateTableInWordDocument(filePath, "Оп... какие-то рабы", columnMerges, columnWidths,
- headerRow1, headerRow2, columnPropertyMapping, dataList);
+ dataList);
//tableWordNoVisibleComponent.CreateWordTestTable(filePath);
MessageBox.Show("Успешно :D проверяй скорее наличие файла...");
@@ -127,7 +141,7 @@ namespace TestAppForCheckComponentsWorking
new DiagramWordNoVisibleComponent.ChartSeries
{
Name = "Ем пельмени день 1",
- Data = new List { 10, 5, 30, 4, 500 }
+ Data = new List { 10, 5, 30, 4, 2 }
},
new DiagramWordNoVisibleComponent.ChartSeries
{
diff --git a/UserComponentsOption19/UserComponentsOption19/DiagramWordNoVisibleComponent.cs b/UserComponentsOption19/UserComponentsOption19/DiagramWordNoVisibleComponent.cs
index 553d94c..17ffe20 100644
--- a/UserComponentsOption19/UserComponentsOption19/DiagramWordNoVisibleComponent.cs
+++ b/UserComponentsOption19/UserComponentsOption19/DiagramWordNoVisibleComponent.cs
@@ -33,10 +33,18 @@ namespace UserComponentsOption19
}
// Основной метод для создания документа с диаграммой
- public void CreateDocumentWithChart(string fileName, string documentTitle, string chartTitle, LegendPosition legendPosition, List chartData)
+ public void CreateDocumentWithChart(
+ string fileName,
+ string documentTitle,
+ string chartTitle,
+ LegendPosition legendPosition,
+ List chartData
+ )
{
// Проверка входных данных
- if (string.IsNullOrWhiteSpace(fileName) || string.IsNullOrWhiteSpace(documentTitle) || chartData == null || chartData.Count == 0)
+ if (
+ string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(documentTitle) ||
+ chartData == null || chartData.Count == 0)
{
throw new ArgumentException("Некорректные входные данные: проверьте имя файла, заголовок документа и наличие данных для диаграммы.");
}
@@ -98,15 +106,6 @@ namespace UserComponentsOption19
break;
}
- //// Экспорт диаграммы в PNG
- //string chartPath = Path.Combine(Path.GetTempPath(), "chart.png");
- //chart.Export(chartPath, "PNG", false);
-
- // Теперь вставляем изображение в документ Word
- //var paragraph = document.Content.Paragraphs.Add();
- //paragraph.Range.InlineShapes.AddChart2(chart);
-
-
// Копирование диаграммы в буфер обмена
chartObject.Copy();
@@ -126,196 +125,3 @@ namespace UserComponentsOption19
}
}
}
-
-
-
-
-
-//using DocumentFormat.OpenXml.Drawing.Charts;
-//using DocumentFormat.OpenXml.Drawing.Wordprocessing;
-//using DocumentFormat.OpenXml.Packaging;
-//using DocumentFormat.OpenXml;
-//using System.ComponentModel;
-//using DocumentFormat.OpenXml.Wordprocessing;
-//using Index = DocumentFormat.OpenXml.Drawing.Charts.Index;
-//using DocumentFormat.OpenXml.Drawing;
-//DocumentFormat.OpenXml.Drawing.Charts.Index chartIndex = new DocumentFormat.OpenXml.Drawing.Charts.Index();
-
-//namespace UserComponentsOption19
-//{
-// public partial class DiagramWordNoVisibleComponent : Component
-// {
-// public DiagramWordNoVisibleComponent()
-// {
-// InitializeComponent();
-// }
-
-// public DiagramWordNoVisibleComponent(IContainer container) : this()
-// {
-// container.Add(this);
-// }
-
-// // Перечисление для позиции легенды
-// public enum LegendPosition
-// {
-// Top,
-// Bottom,
-// Left,
-// Right
-// }
-
-// // Класс для представления серии данных
-// public class ChartSeries
-// {
-// public string? Name { get; set; }
-// public List? Data { get; set; }
-// }
-
-// // Основной метод для создания документа с диаграммой
-// public void CreateDocumentWithChart(string fileName, string documentTitle, string chartTitle, LegendPosition legendPosition, List chartData)
-// {
-// // Проверка входных данных
-// if (string.IsNullOrWhiteSpace(fileName) || string.IsNullOrWhiteSpace(documentTitle) || chartData == null || chartData.Count == 0)
-// {
-// throw new ArgumentException("Некорректные входные данные: проверьте имя файла, заголовок документа и наличие данных для диаграммы.");
-// }
-
-// // Создаем Word документ
-// using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(fileName, WordprocessingDocumentType.Document))
-// {
-// // Основная часть документа
-// MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
-// mainPart.Document = new Document();
-// Body body = new Body();
-
-// // Добавляем заголовок документа
-// DocumentFormat.OpenXml.Drawing.Paragraph titleParagraph = CreateTitle(documentTitle);
-// body.AppendChild(titleParagraph);
-
-// // Добавляем диаграмму в документ
-// ChartPart chartPart = mainPart.AddNewPart();
-// GenerateChart(chartPart, chartTitle, legendPosition, chartData);
-
-// // Вставляем диаграмму в документ
-// Drawing chartDrawing = CreateChartDrawing(chartPart);
-// DocumentFormat.OpenXml.Drawing.Paragraph chartParagraph = new DocumentFormat.OpenXml.Drawing.Paragraph(new DocumentFormat.OpenXml.Drawing.Run(chartDrawing));
-// body.AppendChild(chartParagraph);
-
-// mainPart.Document.Append(body);
-// mainPart.Document.Save();
-// }
-// }
-
-// // Метод для генерации заголовка документа
-// private DocumentFormat.OpenXml.Drawing.Paragraph CreateTitle(string documentTitle)
-// {
-// var titleParagraph = new DocumentFormat.OpenXml.Drawing.Paragraph(new DocumentFormat.OpenXml.Drawing.Run(new DocumentFormat.OpenXml.Drawing.Text(documentTitle)));
-// titleParagraph.ParagraphProperties = new DocumentFormat.OpenXml.Drawing.ParagraphProperties(new Justification { Val = JustificationValues.Center });
-// return titleParagraph;
-// }
-
-// // Метод для создания диаграммы
-// private void GenerateChart(ChartPart chartPart, string chartTitle, LegendPosition legendPosition, List chartData)
-// {
-// ChartSpace chartSpace = new ChartSpace();
-// DocumentFormat.OpenXml.Drawing.Charts.Chart chart = new DocumentFormat.OpenXml.Drawing.Charts.Chart();
-// chart.Append(new Title(new ChartText(new RichText(new DocumentFormat.OpenXml.Drawing.Run(new DocumentFormat.OpenXml.Drawing.Text(chartTitle))))));
-
-// PlotArea plotArea = new PlotArea();
-// LineChart lineChart = new LineChart();
-// uint index = 0;
-
-// // Добавляем данные серий в диаграмму
-// foreach (var series in chartData)
-// {
-// if (series.Name == null || series.Data == null || series.Data.Count == 0)
-// {
-// throw new ArgumentException("Некорректные данные серии.");
-// }
-
-// LineChartSeries lineChartSeries = new LineChartSeries(
-// new Index { Val = index },
-// new Order { Val = index },
-// new SeriesText(new StringReference { Formula = new DocumentFormat.OpenXml.Drawing.Charts.Formula(series.Name) }));
-
-// // Добавляем значения данных
-// var numberLiteral = new NumberLiteral();
-// numberLiteral.Append(new PointCount() { Val = (uint)series.Data.Count });
-// foreach (var dataPoint in series.Data)
-// {
-// numberLiteral.Append(new NumericValue(dataPoint.ToString()));
-// }
-
-// lineChartSeries.Append(new DocumentFormat.OpenXml.Drawing.Charts.Values(numberLiteral));
-// lineChart.Append(lineChartSeries);
-// index++;
-// }
-
-// plotArea.Append(lineChart);
-// chart.Append(plotArea);
-
-// // Добавляем легенду
-// Legend legend = CreateLegend(legendPosition);
-// chart.Append(legend);
-
-// chartSpace.Append(chart);
-// chartPart.ChartSpace = chartSpace;
-// }
-
-// // Метод для создания легенды
-// private Legend CreateLegend(LegendPosition legendPosition)
-// {
-// Legend legend = new Legend();
-// LegendPositionValues legendPos;
-
-// // Преобразуем наше перечисление в OpenXML значение
-// switch (legendPosition)
-// {
-// case LegendPosition.Top:
-// legendPos = LegendPositionValues.Top;
-// break;
-// case LegendPosition.Bottom:
-// legendPos = LegendPositionValues.Bottom;
-// break;
-// case LegendPosition.Left:
-// legendPos = LegendPositionValues.Left;
-// break;
-// case LegendPosition.Right:
-// legendPos = LegendPositionValues.Right;
-// break;
-// default:
-// throw new ArgumentOutOfRangeException(nameof(legendPosition), "Некорректная позиция легенды.");
-// }
-
-// legend.Append(new DocumentFormat.OpenXml.Drawing.Charts.LegendPosition()
-// {
-// Val = new EnumValue(legendPos)
-// });
-
-// return legend;
-// }
-
-// // Метод для вставки диаграммы в документ
-// private Drawing CreateChartDrawing(ChartPart chartPart)
-// {
-// return new Drawing(
-// new Inline(
-// new Extent() { Cx = 5486400, Cy = 3200400 },
-// new EffectExtent()
-// {
-// LeftEdge = 0L,
-// TopEdge = 0L,
-// RightEdge = 0L,
-// BottomEdge = 0L
-// },
-// new DocProperties() { Id = (UInt32Value)1U, Name = "Chart 1" },
-// new Graphic(
-// new GraphicData(
-// new ChartReference() { Id = chartPart.GetIdOfPart(chartPart) })
-// { Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart" })
-// )
-// { DistanceFromTop = (UInt32Value)0U, DistanceFromBottom = (UInt32Value)0U, DistanceFromLeft = (UInt32Value)0U, DistanceFromRight = (UInt32Value)0U }
-// );
-// }
-// }
-//}
diff --git a/UserComponentsOption19/UserComponentsOption19/TableWordNoVisibleComponent.cs b/UserComponentsOption19/UserComponentsOption19/TableWordNoVisibleComponent.cs
index 66febc6..ffbe7e9 100644
--- a/UserComponentsOption19/UserComponentsOption19/TableWordNoVisibleComponent.cs
+++ b/UserComponentsOption19/UserComponentsOption19/TableWordNoVisibleComponent.cs
@@ -22,14 +22,13 @@ namespace UserComponentsOption19
string filePath,
string title,
List<(int start, int end)> mergeColumns,
- List columnWidths,
- string[] headerRow1,
- string[] headerRow2,
- Dictionary columnPropertyMapping,
+
+ List<(float columnWidth, string headerRowCell1, string headerRowCell2, string property)> columnWidths,
+
List data) where T : class
{
// Проверка входных данных
- ValidateInput(filePath, title, mergeColumns, columnWidths, headerRow1, headerRow2, columnPropertyMapping, data);
+ ValidateInput(filePath, title, mergeColumns, columnWidths, data);
var wordApp = new Word.Application();
var document = wordApp.Documents.Add();
@@ -38,14 +37,15 @@ namespace UserComponentsOption19
document.Content.Text = title;
// Добавление таблицы
- var tableRange = document.Bookmarks["\\endofdoc"].Range;
- Table table = document.Tables.Add(tableRange, data.Count + 2, headerRow1.Length);
+ //var tableRange = document.Bookmarks["\\endofdoc"].Range;
+ var tableRange = document.Content;
+ Table table = document.Tables.Add(tableRange, data.Count + 2, columnWidths.Count);
table.Borders.Enable = 1;
// Заполнение данных
- FillData(table, data, columnPropertyMapping, columnWidths);
+ FillData(table, data, columnWidths);
// Заполнение заголовка
- FillHeader(table, headerRow1, headerRow2, mergeColumns);
+ FillHeader(table, columnWidths, mergeColumns);
// Сохранение документа
document.SaveAs2(filePath);
@@ -57,26 +57,26 @@ namespace UserComponentsOption19
string filePath,
string title,
List<(int start, int end)> mergeColumns,
- List columnWidths,
- string[] headerRow1,
- string[] headerRow2,
- Dictionary columnPropertyMapping,
+ List<(float columnWidth, string headerRowCell1, string headerRowCell2, string property)> columnWidths,
List data)
{
if (string.IsNullOrEmpty(filePath)) throw new ArgumentNullException("нужно ввести путь до файла");
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException("нужно ввести заголовок документа");
if (mergeColumns == null) throw new ArgumentNullException("где информация по объединению колонок?");
- if (columnWidths == null) throw new ArgumentNullException("где информация по ширине колонок?");
- if (headerRow1 == null || headerRow2 == null) throw new ArgumentNullException("нужно ввести заголовки");
+ if (columnWidths == null) throw new ArgumentNullException("где информация по ширине колонок и заголовкам?");
if (data == null) throw new ArgumentNullException("все ввел, а данные забыл ввести? ну ты и умник");
- if (columnPropertyMapping == null) throw new ArgumentNullException("все ввел, а данные забыл ввести? ну ты и умник");
}
- private void FillHeader(Table table, string[] headerRow1, string[] headerRow2, List<(int start, int end)> mergeColumns)
+ private void FillHeader(
+ Table table,
+ List<(float columnWidth, string headerRowCell1, string headerRowCell2, string property)> columnWidths,
+ List<(int start, int end)> mergeColumns
+ )
{
- for (int i = 0; i < headerRow2.Length; i++)
+ for (int i = 0; i < columnWidths.Count; i++)
{
- table.Cell(2, i + 1).Range.Text = headerRow2[i];
+ table.Cell(2, i + 1).Range.Text = columnWidths[i].headerRowCell2;
+ table.Columns[i + 1].Width = columnWidths[i].columnWidth * 20;
}
var sortDeskMergeColumns = mergeColumns.OrderByDescending(x => x.start);
@@ -100,25 +100,27 @@ namespace UserComponentsOption19
foreach (var item in notMergedColumns)
{
table.Cell(1, item + 1).Merge(table.Cell(2, item + 1));
- table.Cell(1, item + 1).Range.Text = headerRow1[item];
+ table.Cell(1, item + 1).Range.Text = columnWidths[item].headerRowCell1;
}
foreach (var item in sortDeskMergeColumns)
{
table.Cell(1, item.start + 1).Merge(table.Cell(1, item.end + 1));
- table.Cell(1, item.start + 1).Range.Text = headerRow1[item.start];
+ table.Cell(1, item.start + 1).Range.Text = columnWidths[item.start].headerRowCell1;
}
}
- private void FillData(Table table, List data, Dictionary columnPropertyMapping, List columnWidths) where T : class
+ private void FillData(Table table, List data,
+ List<(float columnWidth, string headerRowCell1, string headerRowCell2, string property)> columnWidths
+ ) where T : class
{
int rowIndex = 3;
foreach (var item in data)
{
- for (int i = 0; i < columnPropertyMapping.Count; i++)
+ for (int i = 0; i < columnWidths.Count; i++)
{
- string propName = columnPropertyMapping[i];
+ string propName = columnWidths[i].property;
var property = typeof(T).GetProperty(propName);
if (property != null)
{