Добавлено окно для excel

This commit is contained in:
maksim 2024-12-08 18:01:44 +04:00
parent e61e11a192
commit 66c0dcc6c6
3 changed files with 121 additions and 6 deletions

View File

@ -17,6 +17,7 @@ using System.Windows.Input;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.IO; using System.IO;
using Microsoft.Win32;
namespace EmployeeManagmentView.Employee.Salary namespace EmployeeManagmentView.Employee.Salary
@ -57,11 +58,22 @@ namespace EmployeeManagmentView.Employee.Salary
return; return;
} }
// Генерация Excel-файла // Открытие диалогового окна для сохранения файла
string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Отчет_зарплаты.xlsx"); SaveFileDialog saveFileDialog = new SaveFileDialog
GenerateExcelReport(filePath, salaries); {
Filter = "Excel файлы (*.xlsx)|*.xlsx", // фильтр для файлов .xlsx
Title = "Сохранить отчет об зарплатах", // заголовок окна
FileName = "Отчет_зарплат.xlsx" // имя по умолчанию
};
// Проверка, что пользователь выбрал путь и имя файла
if (saveFileDialog.ShowDialog() == true)
{
string filePath = saveFileDialog.FileName; // Путь и имя файла
GenerateExcelReport(filePath, salaries); // Генерация отчета
MessageBox.Show($"Отчет успешно сохранен: {filePath}", "Успех", MessageBoxButton.OK, MessageBoxImage.Information);
}
MessageBox.Show($"Отчет успешно сохранен: {filePath}", "Успех", MessageBoxButton.OK, MessageBoxImage.Information);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -45,6 +45,7 @@
HorizontalAlignment="Center" VerticalAlignment="Bottom" HorizontalAlignment="Center" VerticalAlignment="Bottom"
Width="150" Height="40" Width="150" Height="40"
Margin="0,0,0,20" Margin="0,0,0,20"
Click="ExportToExcelButton_Click"
Background="#004890" Background="#004890"
Foreground="White" Foreground="White"
Style="{StaticResource RoundedButtonStyle}" /> Style="{StaticResource RoundedButtonStyle}" />

View File

@ -1,4 +1,7 @@
using EmployeeManagmentBusinessLogic.BusinessLogic; using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml;
using EmployeeManagmentBusinessLogic.BusinessLogic;
using EmployeeManagmentContracts.BusinessLogicContracts; using EmployeeManagmentContracts.BusinessLogicContracts;
using EmployeeManagmentContracts.ViewModels; using EmployeeManagmentContracts.ViewModels;
using System; using System;
@ -13,7 +16,8 @@ using System.Windows.Documents;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Shapes; using System.IO;
using Microsoft.Win32;
namespace EmployeeManagmentView.Employee.Vacation namespace EmployeeManagmentView.Employee.Vacation
{ {
@ -44,6 +48,104 @@ namespace EmployeeManagmentView.Employee.Vacation
VacationsDataGrid.ItemsSource = _allVacations; VacationsDataGrid.ItemsSource = _allVacations;
} }
private void ExportToExcelButton_Click(object sender, RoutedEventArgs e)
{
try
{
var vacations = _vacationLogic.GetFullList();
if (vacations == null || !vacations.Any())
{
MessageBox.Show("Нет данных для экспорта.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
// Открытие диалогового окна для сохранения файла
SaveFileDialog saveFileDialog = new SaveFileDialog
{
Filter = "Excel файлы (*.xlsx)|*.xlsx",
Title = "Сохранить отчет об отпусках",
FileName = "Отчет_отпуска.xlsx"
};
if (saveFileDialog.ShowDialog() == true)
{
string filePath = saveFileDialog.FileName; // Путь и имя файла
GenerateExcelReport(filePath, vacations); // Генерация отчета
MessageBox.Show($"Отчет успешно сохранен: {filePath}", "Успех", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка экспорта: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private void GenerateExcelReport(string filePath, List<VacationViewModel> vacations)
{
using (SpreadsheetDocument document = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
{
// Создаем Workbook
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
// Создаем Worksheet
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Добавляем лист в Workbook
Sheets sheets = document.WorkbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet()
{
Id = document.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "Отпуска"
};
sheets.Append(sheet);
// Получаем SheetData
SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
// Заполняем заголовки
Row headerRow = new Row();
headerRow.Append(
CreateTextCell("A", "ID"),
CreateTextCell("B", "Сотрудник"),
CreateTextCell("C", "Дата начала"),
CreateTextCell("D", "Дата окончания"),
CreateTextCell("E", "Статус")
);
sheetData.AppendChild(headerRow);
// Заполняем данные
foreach (var vacation in vacations)
{
Row row = new Row();
row.Append(
CreateTextCell("A", vacation.Id.ToString()),
CreateTextCell("B", vacation.EmployeeName),
CreateTextCell("C", vacation.StartData.ToString("dd.MM.yyyy")),
CreateTextCell("D", vacation.EndData.ToString("dd.MM.yyyy")),
CreateTextCell("E", vacation.Passed ? "Проведен" : "Не проведен")
);
sheetData.AppendChild(row);
}
workbookPart.Workbook.Save();
}
}
// Метод для создания текстовой ячейки
private Cell CreateTextCell(string columnName, string text)
{
return new Cell
{
DataType = CellValues.String,
CellReference = columnName,
CellValue = new CellValue(text)
};
}
private void SearchTextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) private void SearchTextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{ {