This commit is contained in:
parent 5262be530e
commit 8197103098
3 changed files with 63 additions and 31 deletions

View File

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Components.NonVisualComponents.HelperModels
{
/// <summary>
/// Вспомогательный класс для настройки колонки Excel
/// </summary>
public class ColumnInfo
{
/// <summary>
/// Название поля объекта
/// </summary>
public string FieldName { get; set; } = string.Empty;
/// <summary>
/// Заголовок колонки
/// </summary>
public string Header { get; set; } = string.Empty;
/// <summary>
/// Ширина колонки
/// </summary>
public int Width { get; set; }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="fieldName"></param>
/// <param name="header"></param>
/// <param name="width"></param>
public ColumnInfo(string fieldName, string header, int width)
{
FieldName = fieldName;
Header = header;
Width = width;
}
}
}

View File

@ -52,8 +52,7 @@ namespace Components.NonVisualComponents
/// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentNullException"></exception>
/// <exception cref="Exception"></exception> /// <exception cref="Exception"></exception>
public void CreateDocument<T>(string filepath, string title, public void CreateDocument<T>(string filepath, string title,
List<MergeCells> mergeCells, List<int> columnsWidth, List<MergeCells> mergeCells, List<ColumnInfo> columns,
List<string> columns, List<string> headers,
List<T> data) where T : class, new() List<T> data) where T : class, new()
{ {
if (string.IsNullOrEmpty(filepath)) if (string.IsNullOrEmpty(filepath))
@ -64,18 +63,10 @@ namespace Components.NonVisualComponents
{ {
throw new ArgumentNullException("Не указан заголовок документа!"); throw new ArgumentNullException("Не указан заголовок документа!");
} }
if (mergeCells == null || mergeCells.Count == 0 || columnsWidth == null || columnsWidth.Count == 0) if (mergeCells == null || mergeCells.Count == 0 || columns == null || columns.Count == 0)
{ {
throw new ArgumentNullException("Не заполнена информация по колонкам!"); throw new ArgumentNullException("Не заполнена информация по колонкам!");
} }
if (columns == null || columns.Count == 0 || headers == null || headers.Count == 0 || columns.Count != headers.Count)
{
throw new ArgumentNullException("Не заполнена информация по заголовкам!");
}
if (columnsWidth.Count != columns.Count)
{
throw new Exception("Количество заголовков не соответствует количеству размеров столбцов!");
}
if (data == null) if (data == null)
{ {
throw new ArgumentNullException("Данные не заполнены!"); throw new ArgumentNullException("Данные не заполнены!");
@ -88,17 +79,17 @@ namespace Components.NonVisualComponents
worksheet.Cells[1, 1] = title; worksheet.Cells[1, 1] = title;
// Заголовки таблицы // Заголовки таблицы
for (int i = 1; i <= headers.Count; i++) for (int i = 1; i <= columns.Count; i++)
{ {
if (string.IsNullOrEmpty(headers[i - 1])) if (string.IsNullOrEmpty(columns[i - 1].Header))
{ {
throw new Exception("Заголовок не имеет данных!"); throw new Exception("Заголовок не имеет данных!");
} }
worksheet.Cells[2, i] = headers[i - 1]; worksheet.Cells[2, i] = columns[i - 1].Header;
Excel.Range column = (Excel.Range)worksheet.Columns[i]; Excel.Range column = (Excel.Range)worksheet.Columns[i];
column.ColumnWidth = columnsWidth[i - 1]; column.ColumnWidth = columns[i - 1].Width;
Excel.Range cell = (Excel.Range)worksheet.Cells[2, i]; Excel.Range cell = (Excel.Range)worksheet.Cells[2, i];
cell.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; cell.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
@ -126,7 +117,7 @@ namespace Components.NonVisualComponents
} }
// Объединение ячеек по строкам, которые не объединяются по столбцам // Объединение ячеек по строкам, которые не объединяются по столбцам
for (int i = 1; i <= headers.Count; i++) for (int i = 1; i <= columns.Count; i++)
{ {
if (!mergeIndexes.Contains(i - 1)) if (!mergeIndexes.Contains(i - 1))
{ {
@ -157,7 +148,7 @@ namespace Components.NonVisualComponents
foreach (var column in columns) foreach (var column in columns)
{ {
if (column == property.Name) if (column.FieldName == property.Name)
{ {
columnIndex = columns.IndexOf(column) + 1; columnIndex = columns.IndexOf(column) + 1;
break; break;
@ -176,7 +167,7 @@ namespace Components.NonVisualComponents
// Границы таблицы // Границы таблицы
for (int i = 2; i <= (data.Count() + 3); i++) for (int i = 2; i <= (data.Count() + 3); i++)
{ {
for (int j = 1; j <= headers.Count(); j++) for (int j = 1; j <= columns.Count(); j++)
{ {
Excel.Range cell = (Excel.Range)worksheet.Cells[i, j]; Excel.Range cell = (Excel.Range)worksheet.Cells[i, j];
cell.BorderAround(true); cell.BorderAround(true);

View File

@ -61,18 +61,18 @@ namespace WinForms
new MergeCells("Личные данные", new int[] { 2, 3, 4 }), new MergeCells("Личные данные", new int[] { 2, 3, 4 }),
new MergeCells("Работа", new int[] { 7, 8 }) new MergeCells("Работа", new int[] { 7, 8 })
}; };
List<int> columnsWidth = new List<int>() List<ColumnInfo> columns = new List<ColumnInfo>()
{ {
10, 10, 20, 20, 20, 20, 20, 30, 30, 10 new ColumnInfo("Id", "Идент.", 10),
}; new ColumnInfo("Status", "Статус", 10),
new ColumnInfo("Name", "Имя", 20),
List<string> columns = new List<string>() new ColumnInfo("Surname", "Фамилия", 20),
{ new ColumnInfo("Age", "Возраст", 20),
"Id", "Status", "Name", "Surname", "Age", "Kids", "Car", "Department", "Post", "Prize" new ColumnInfo("Kids", "Дети", 20),
}; new ColumnInfo("Car", "Машина", 20),
List<string> headers = new List<string>() new ColumnInfo("Department", "Подразделение", 30),
{ new ColumnInfo("Post", "Должность", 30),
"Идент.", "Статус", "Имя", "Фамилия", "Возраст", "Дети", "Машина", "Подразделение", "Должность", "Премия" new ColumnInfo("Prize", "Премия", 10)
}; };
List<Employee> data = new List<Employee>() List<Employee> data = new List<Employee>()
@ -85,8 +85,7 @@ namespace WinForms
}; };
tableComponent1.CreateDocument(filepath, title, tableComponent1.CreateDocument(filepath, title,
mergeCells, columnsWidth, mergeCells, columns,
columns, headers,
data); data);
} }