все работает НАКОНЕЦ ТО Я ЕГО РОТ НАОБОРОТ да и поздно уже... на паре ему не работалось...(

This commit is contained in:
Елена Бакальская 2024-10-23 22:51:01 +04:00
parent 78cadc292f
commit dd9e86a211
2 changed files with 42 additions and 325 deletions

View File

@ -39,11 +39,11 @@ namespace TestAppForCheckComponentsWorking
string filePath = saveFileDialog.FileName;
var dataList = new List<Employee>{
new Employee { Id = 1, Status = "нет", FirstName = "Иван", LastName = "Иванов", Age = 34, Children = "нет", Car = "есть", Position = "Инж.", Department = "Деп.", Bonus = 2000.1 },
new Employee { Id = 2, Status = "есть", FirstName = "Петр", LastName = "Петров", Age = 44, Children = "есть", Car = "есть", Position = "Инж.", Department = "Деп.", Bonus = 2000.1 },
new Employee { Id = 3, Status = "да", FirstName = "Сергей", LastName = "Сергеев", Age = 55, Children = "да", Car = "есть", Position = "Рук.", Department = "Деп.", Bonus = 5000.5 },
new Employee { Id = 4, Status = "есть", FirstName = "Ольга", LastName = "Иванова", Age = 34, Children = "есть", Car = "нет", Position = "Бух.", Department = "Бухг.", Bonus = 2000.1 },
new Employee { Id = 5, Status = "да", FirstName = "Татьяна", LastName = "Петрова", Age = 44, Children = "да", Car = "нет", Position = "Ст. бух.", Department = "Бухг.", Bonus = 7000.6 }
new Employee { Id = 1, Status = "нет", FirstName = "Иван", LastName = "Иванов", Age = 34, Children = "нет", Car = "есть", Position = "Инж.", Departament = "Деп.", Bonus = 2000.1 },
new Employee { Id = 2, Status = "есть", FirstName = "Петр", LastName = "Петров", Age = 44, Children = "есть", Car = "есть", Position = "Инж.", Departament = "Деп.", Bonus = 2000.1 },
new Employee { Id = 3, Status = "да", FirstName = "Сергей", LastName = "Сергеев", Age = 55, Children = "да", Car = "есть", Position = "Рук.", Departament = "Деп.", Bonus = 5000.5 },
new Employee { Id = 4, Status = "есть", FirstName = "Ольга", LastName = "Иванова", Age = 34, Children = "есть", Car = "нет", Position = "Бух.", Departament = "Бухг.", Bonus = 2000.1 },
new Employee { Id = 5, Status = "да", FirstName = "Татьяна", LastName = "Петрова", Age = 44, Children = "да", Car = "нет", Position = "Ст. бух.", Departament = "Бухг.", Bonus = 7000.6 }
};
string[] headerRow1 = { "Идент.", "Статус", "Личные данные", "Личные данные", "Личные данные", "Дети", "Машина", "Работа", "Работа", "Премия" };
@ -103,7 +103,7 @@ namespace TestAppForCheckComponentsWorking
public string Car { get; set; } = string.Empty;
public string Department { get; set; } = string.Empty;
public string Departament { get; set; } = string.Empty;
public string Position { get; set; } = string.Empty;

View File

@ -39,21 +39,14 @@ namespace UserComponentsOption19
// Добавление таблицы
var tableRange = document.Bookmarks["\\endofdoc"].Range;
Table table = document.Tables.Add(tableRange, 1, headerRow1.Length);
Table table = document.Tables.Add(tableRange, data.Count + 2, headerRow1.Length);
table.Borders.Enable = 1;
// Заполнение данных
FillData(table, data, columnPropertyMapping);
//// Настройка ширины столбцов
//for (int i = 0; i < columnWidths.Count; i++)
//{
// table.Columns[i].Width = (columnWidths[i]);
//}
FillData(table, data, columnPropertyMapping, columnWidths);
// Заполнение заголовка
FillHeader(table, headerRow1, headerRow2, mergeColumns);
// Сохранение документа
document.SaveAs2(filePath);
document.Close();
@ -81,62 +74,47 @@ namespace UserComponentsOption19
private void FillHeader(Table table, string[] headerRow1, string[] headerRow2, List<(int start, int end)> mergeColumns)
{
// Заполнение второй строки заголовка без объединений
for (int i = 0; i < headerRow2.Length; i++)
{
table.Cell(2, i).Range.Text = headerRow2[i];
table.Cell(2, i + 1).Range.Text = headerRow2[i];
}
for (int i = headerRow1.Length - 1; i > 0; i--)
var sortDeskMergeColumns = mergeColumns.OrderByDescending(x => x.start);
List<int> notMergedColumns = new List<int>();
for (int i = 0; i < table.Columns.Count; i++)
{
// Проверяем, нужно ли объединять текущий столбец
foreach (var merge in mergeColumns)
notMergedColumns.Add(i);
}
for (int i = 0; i < table.Columns.Count; i++)
{
foreach (var item in mergeColumns)
{
if (merge.start == i)
{
// Объединяем столбцы от merge.start до merge.end
table.Cell(1, merge.start).Merge(table.Cell(1, merge.end));
// Заполняем объединённую ячейку текстом
table.Cell(1, merge.end).Range.Text = headerRow1[i];
break;
}
else
{
table.Cell(1, i).Range.Text = headerRow1[i];
}
if (i >= item.start && i <= item.end) notMergedColumns.Remove(i)
;
}
}
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];
}
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];
}
}
private void FillData<T>(Table table, List<T> data, Dictionary<int, string> columnPropertyMapping) where T : class
private void FillData<T>(Table table, List<T> data, Dictionary<int, string> columnPropertyMapping, List<float> columnWidths) where T : class
{
//int rowIndex = 3; // Начинаем с третьей строки таблицы
//foreach (var item in data) // Проходим по каждому объекту в списке данных
//{
// for (int i = 0; i < columnPropertyMapping.Count; i++)
// {
// if (columnPropertyMapping.TryGetValue(i, out string propName)) // Получаем имя свойства
// {
// var property = typeof(T).GetProperty(propName); // Находим свойство по имени
// if (property != null)
// {
// var valueProp = property.GetValue(item)?.ToString() ?? string.Empty; // Получаем значение свойства
// table.Cell(rowIndex, i).Range.Text = valueProp; // Заполняем ячейку
// }
// else
// {
// table.Cell(rowIndex, i).Range.Text = string.Empty; // Пустая ячейка, если свойство не найдено
// }
// }
// }
// rowIndex++;
//}
int rowIndex = 3;
foreach (var item in data) // Проходим по каждому объекту в списке данных
foreach (var item in data)
{
for (int i = 0; i < columnPropertyMapping.Count; i++)
{
@ -145,276 +123,15 @@ namespace UserComponentsOption19
if (property != null)
{
var valueProp = property.GetValue(item)?.ToString() ?? string.Empty;
table.Cell(rowIndex, i).Range.Text = valueProp;
table.Cell(rowIndex, i + 1).Range.Text = valueProp;
}
else
{
table.Cell(rowIndex, i).Range.Text = string.Empty;
table.Cell(rowIndex, i + 1).Range.Text = string.Empty;
}
rowIndex++;
}
rowIndex++;
}
//{
// TableRow dataRow = new TableRow();
// // Проходим по каждому столбцу и вытаскиваем соответствующее свойство
// for (int columnIndex = 0; columnIndex < columnPropertyMapping.Count; columnIndex++)
// {
// string propertyName = columnPropertyMapping[columnIndex];
// var property = typeof(T).GetProperty(propertyName);
// if (property != null)
// {
// var value = property.GetValue(data)?.ToString() ?? string.Empty;
// TableCell dataCell = new TableCell(new Paragraph(new Run(new Text(value))));
// dataRow.Append(dataCell);
// }
// else
// {
// // Если свойство не найдено, добавляем пустую ячейку
// TableCell emptyCell = new TableCell(new Paragraph(new Run(new Text(""))));
// dataRow.Append(emptyCell);
// }
// }
// return dataRow;
}
}
}
//public void CreateWordDocumentWithTable<T>(string filePath,
// string title,
// List<(int StartColumn, int EndColumn)> columnMerges,
// List<double> columnWidths,
// List<string[]> headerTitles,
// List<T> dataList,
// Dictionary<int, string> columnPropertyMapping) where T : class
//{
// // Проверка на корректность входных данных
// if (string.IsNullOrEmpty(filePath) || string.IsNullOrEmpty(title) || headerTitles == null || headerTitles.Count != 2 || dataList == null || columnWidths == null)
// {
// throw new ArgumentException("Некорректные входные данные.");
// }
// if (headerTitles[0].Length != headerTitles[1].Length || columnWidths.Count != headerTitles[0].Length)
// {
// throw new ArgumentException("Неверные размеры заголовков или ширин колонок.");
// }
// using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(filePath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
// {
// // Создаем основную часть документа
// MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
// mainPart.Document = new Document();
// Body body = new Body();
// mainPart.Document.AppendChild(body);
// // Добавляем заголовок документа
// Paragraph titleParagraph = new Paragraph(new Run(new Text(title)));
// body.Append(titleParagraph);
// // Создаем таблицу
// Table table = new Table();
// TableProperties tblProperties = new TableProperties(
// new TableBorders(
// new TopBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
// new BottomBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
// new LeftBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
// new RightBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
// new InsideHorizontalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
// new InsideVerticalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 }
// )
// );
// table.AppendChild(tblProperties);
// // Добавляем заголовки таблицы (шапка)
// AddTableHeader(table, headerTitles, columnMerges);
// // Заполняем таблицу данными из списка объектов T
// foreach (var item in dataList)
// {
// TableRow dataRow = CreateDataRow(item, columnPropertyMapping);
// table.Append(dataRow);
// }
// // Устанавливаем ширину колонок
// SetColumnWidths(table, columnWidths);
// // Добавляем таблицу в документ
// body.Append(table);
// mainPart.Document.Save();
// }
//}
//private void AddTableHeader(Table table, List<string[]> headerTitles, List<(int StartColumn, int EndColumn)> columnMerges)
//{
// TableRow headerRow1 = new();
// TableRow headerRow2 = new();
// for (int i = 0; i < headerTitles[0].Length; i++)
// {
// // Проверяем, нужно ли объединить ячейки в первой строке
// var merge = columnMerges.FirstOrDefault(m => m.StartColumn == i);
// if (merge != default && merge.StartColumn == i)
// {
// // Создаем объединенную ячейку для первой строки
// TableCell mergedCell = new TableCell(new Paragraph(new Run(new Text(headerTitles[0][i]))));
// mergedCell.Append(new TableCellProperties(new HorizontalMerge() { Val = MergedCellValues.Restart }));
// headerRow1.Append(mergedCell);
// // Добавляем пустые ячейки для остальных объединенных столбцов
// for (int j = i + 1; j <= merge.EndColumn; j++)
// {
// TableCell emptyCell = new TableCell(new Paragraph(new Run(new Text(""))));
// emptyCell.Append(new TableCellProperties(new HorizontalMerge() { Val = MergedCellValues.Continue }));
// headerRow1.Append(emptyCell);
// }
// i = merge.EndColumn; // Пропускаем объединенные столбцы
// }
// else
// {
// // Если объединение не требуется, добавляем обычную ячейку
// TableCell headerCell1 = new TableCell(new Paragraph(new Run(new Text(headerTitles[0][i]))));
// headerRow1.Append(headerCell1);
// }
// // Добавляем подзаголовки во вторую строку
// TableCell headerCell2 = new TableCell(new Paragraph(new Run(new Text(headerTitles[1][i]))));
// headerRow2.Append(headerCell2);
// }
// // Добавляем строки заголовков в таблицу
// table.Append(headerRow1);
// table.Append(headerRow2);
//}
//private TableRow CreateDataRow<T>(T data, Dictionary<int, string> columnPropertyMapping) where T : class
//{
// TableRow dataRow = new TableRow();
// // Проходим по каждому столбцу и вытаскиваем соответствующее свойство
// for (int columnIndex = 0; columnIndex < columnPropertyMapping.Count; columnIndex++)
// {
// string propertyName = columnPropertyMapping[columnIndex];
// var property = typeof(T).GetProperty(propertyName);
// if (property != null)
// {
// var value = property.GetValue(data)?.ToString() ?? string.Empty;
// TableCell dataCell = new TableCell(new Paragraph(new Run(new Text(value))));
// dataRow.Append(dataCell);
// }
// else
// {
// // Если свойство не найдено, добавляем пустую ячейку
// TableCell emptyCell = new TableCell(new Paragraph(new Run(new Text(""))));
// dataRow.Append(emptyCell);
// }
// }
// return dataRow;
//}
//private void SetColumnWidths(Table table, List<double> columnWidths)
//{
// TableGrid tableGrid = new TableGrid();
// foreach (var width in columnWidths)
// {
// tableGrid.Append(new GridColumn() { Width = (width * 100).ToString() }); // Ширину нужно умножить на 100 для Word
// }
// table.Append(tableGrid);
//}
////public void CreateWordTestTable(string filePath)
////{
//// using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(filePath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
//// {
//// // Создаем основную часть документа
//// MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
//// mainPart.Document = new Document();
//// Body body = new Body();
//// mainPart.Document.Append(body);
//// // Создаем таблицу
//// Table table = new Table();
//// TableProperties tblProperties = new TableProperties(
//// new TableBorders(
//// new TopBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
//// new BottomBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
//// new LeftBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
//// new RightBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
//// new InsideHorizontalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 },
//// new InsideVerticalBorder() { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 4 }
//// )
//// );
//// table.AppendChild(tblProperties);
//// // Добавляем строки и объединяем ячейки
//// TableRow row1 = new TableRow();
//// TableCell cell1 = new TableCell(new Paragraph(new Run(new Text("Объединенная ячейка"))));
//// cell1.Append(new TableCellProperties(new HorizontalMerge() { Val = MergedCellValues.Restart }));
//// row1.Append(cell1);
//// row1.Append(new TableCell(new Paragraph(new Run(new Text("Ячейка 2")))));
//// row1.Append(new TableCell(new Paragraph(new Run(new Text("Ячейка 3")))));
//// table.Append(row1);
//// TableRow row2 = new TableRow();
//// TableCell cell2 = new TableCell(new Paragraph(new Run(new Text("Объединенная ячейка по строкам"))));
//// cell2.Append(new TableCellProperties(new VerticalMerge() { Val = MergedCellValues.Restart }));
//// row2.Append(cell2);
//// row2.Append(new TableCell(new Paragraph(new Run(new Text("Ячейка 5")))));
//// row2.Append(new TableCell(new Paragraph(new Run(new Text("Ячейка 6")))));
//// table.Append(row2);
//// // Добавляем еще одну строку для завершения вертикального объединения
//// TableRow row3 = new TableRow();
//// row3.Append(new TableCell(new Paragraph(new Run(new Text(""))))); // Пустая ячейка для вертикального объединения
//// row3.Append(new TableCell(new Paragraph(new Run(new Text("Ячейка 8")))));
//// row3.Append(new TableCell(new Paragraph(new Run(new Text("Ячейка 9")))));
//// table.Append(row3);
//// // Добавляем таблицу в документ
//// body.Append(table);
//// mainPart.Document.Save();
//// }
////}
////private TableRow CreateDataRow<T>(T data, Dictionary<int, string> columnPropertyMapping) where T : class
////{
//// TableRow dataRow = new TableRow();
//// // Проходим по каждому столбцу и вытаскиваем соответствующее свойство
//// for (int columnIndex = 0; columnIndex < columnPropertyMapping.Count; columnIndex++)
//// {
//// string propertyName = columnPropertyMapping[columnIndex];
//// var property = typeof(T).GetProperty(propertyName);
//// if (property != null)
//// {
//// var value = property.GetValue(data)?.ToString() ?? string.Empty;
//// TableCell dataCell = new TableCell(new Paragraph(new Run(new Text(value))));
//// dataRow.Append(dataCell);
//// }
//// else
//// {
//// // Если свойство не найдено, добавляем пустую ячейку
//// TableCell emptyCell = new TableCell(new Paragraph(new Run(new Text(""))));
//// dataRow.Append(emptyCell);
//// }
//// }
//// return dataRow;
////}