отчетам быть!!!
This commit is contained in:
parent
d2d0f04421
commit
d45eab6e3b
@ -5,22 +5,6 @@ using EventVisitorLogic.ViewModels;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net;
|
||||
using System.Numerics;
|
||||
using System.Security.Cryptography.Xml;
|
||||
using System.Xml.Linq;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
using DocumentFormat.OpenXml.Office2010.Excel;
|
||||
using System.Text;
|
||||
using System.Security.Cryptography;
|
||||
using DocumentFormat.OpenXml.Spreadsheet;
|
||||
using DocumentFormat.OpenXml.Bibliography;
|
||||
using DocumentFormat.OpenXml.Drawing.Diagrams;
|
||||
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
|
||||
using DocumentFormat.OpenXml.Wordprocessing;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Conventions;
|
||||
|
||||
namespace EventVisitorClientApp.Controllers
|
||||
{
|
||||
@ -639,24 +623,24 @@ namespace EventVisitorClientApp.Controllers
|
||||
/// Îò÷åòû
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IActionResult GetWordFile()
|
||||
///
|
||||
[HttpPost]
|
||||
public IActionResult ReportExcel(int id)
|
||||
{
|
||||
var filePath = "F:\\EventVisitor\\wordfile.docx";
|
||||
|
||||
if (!System.IO.File.Exists(filePath))
|
||||
if (APIClient.Client == null)
|
||||
{
|
||||
return NotFound();
|
||||
throw new Exception("Âû êàê ñóäà ïîïàëè? Ñóäà âõîä òîëüêî àâòîðèçîâàííûì");
|
||||
}
|
||||
|
||||
return new PhysicalFileResult(filePath, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
|
||||
}
|
||||
|
||||
|
||||
public IActionResult GetExcelFile()
|
||||
var reportFilePath = $"F:\\EventVisitor\\Report_{id}_{DateTime.Now.ToString("yyyyMMdd_HHmmss")}.xlsx";
|
||||
APIClient.PostRequest("api/main/createreporttoexcelfile", new ReportVisitorsBindingModel
|
||||
{
|
||||
return new PhysicalFileResult("F:\\EventVisitor\\excelfile.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
}
|
||||
EventId = id,
|
||||
FileName = reportFilePath
|
||||
});
|
||||
|
||||
return PhysicalFile(reportFilePath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
$"Report_{id}.xlsx");
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult ReportWord(int id)
|
||||
@ -666,15 +650,20 @@ namespace EventVisitorClientApp.Controllers
|
||||
throw new Exception("Âû êàê ñóäà ïîïàëè? Ñóäà âõîä òîëüêî àâòîðèçîâàííûì");
|
||||
}
|
||||
|
||||
// Ñîçäàéòå îò÷åò
|
||||
var reportFilePath = $"F:\\EventVisitor\\Report_{id}_{DateTime.Now.ToString("yyyyMMdd_HHmmss")}.docx";
|
||||
APIClient.PostRequest("api/main/createreporttowordfile", new ReportVisitorsBindingModel
|
||||
{
|
||||
EventId = id,
|
||||
FileName = "F:\\EventVisitor\\wordfile.docx"
|
||||
FileName = reportFilePath
|
||||
});
|
||||
return RedirectToAction("GetWordFile");
|
||||
|
||||
// Âîçâðàùàåì ôàéë è óñòàíàâëèâàåì èìÿ ôàéëà äëÿ ñîõðàíåíèÿ
|
||||
return PhysicalFile(reportFilePath, "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||
$"Report_{id}.docx");
|
||||
}
|
||||
|
||||
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
public IActionResult Error(string errorMessage, string returnUrl)
|
||||
{
|
||||
|
@ -3,11 +3,13 @@ using EventVisitorDatabase.Implements;
|
||||
using EventVisitorLogic.OfficePackage.Implements;
|
||||
using EventVisitorLogic.OfficePackage;
|
||||
using EventVisitorLogic.StoragesContracts;
|
||||
using EventVisitorLogic.Logic;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddControllersWithViews();
|
||||
builder.Services.AddTransient<IReportLogic, ReportLogic>();
|
||||
builder.Services.AddTransient<IEventStorage, EventStorage>();
|
||||
builder.Services.AddTransient<IVisitorStorage, VisitorStorage>();
|
||||
builder.Services.AddTransient<IOrganizerStorage, OrganizerStorage>();
|
||||
|
@ -75,7 +75,10 @@
|
||||
<input type="hidden" name="id" value="@Model.Id" />
|
||||
<button type="submit" class="btn btn-black btn-block" style="margin-bottom: 20px;">Отчет Word о посетителях</button>
|
||||
</form>
|
||||
<a class="btn btn-dark btn-block mb-4" asp-action="ReportExcel" asp-route-id="@Model.Id">Отчет Excel о посетителях </a>
|
||||
<form method="post" asp-action="ReportExcel" asp-controller="Home">
|
||||
<input type="hidden" name="id" value="@Model.Id" />
|
||||
<button type="submit" class="btn btn-black btn-block" style="margin-bottom: 20px;">Отчет Excel о посетителях</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -29,9 +29,6 @@ namespace EventVisitorDatabase.Entities
|
||||
public string Password { get; set; } = string.Empty;
|
||||
[Required]
|
||||
public string Phone { get; set; } = string.Empty;
|
||||
|
||||
|
||||
|
||||
public static OrganizerEntity? Create(OrganizerBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
|
@ -11,6 +11,5 @@ namespace EventVisitorLogic.BindingModels
|
||||
{
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
public int EventId { get; set; }
|
||||
public List<VisitorViewModel> Visitors { get; set; } = new();
|
||||
}
|
||||
}
|
||||
|
@ -20,9 +20,15 @@ namespace EventVisitorLogic.OfficePackage
|
||||
Text = info.Title,
|
||||
StyleInfo = ExcelStyleInfoType.Title
|
||||
});
|
||||
MergeCells(new ExcelMergeParameters
|
||||
{
|
||||
CellFromName = "A1",
|
||||
CellToName = "F1"
|
||||
});
|
||||
uint rowIndex = 2;
|
||||
foreach (var pc in info.Visitors)
|
||||
{
|
||||
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
{
|
||||
ColumnName = "A",
|
||||
@ -30,27 +36,47 @@ namespace EventVisitorLogic.OfficePackage
|
||||
Text = pc.Name,
|
||||
StyleInfo = ExcelStyleInfoType.Text
|
||||
});
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
MergeCells(new ExcelMergeParameters
|
||||
{
|
||||
ColumnName = "B",
|
||||
RowIndex = rowIndex,
|
||||
Text = pc.Email,
|
||||
StyleInfo = ExcelStyleInfoType.Text
|
||||
CellFromName = $"A{rowIndex}",
|
||||
CellToName = $"B{rowIndex}"
|
||||
});
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
{
|
||||
ColumnName = "C",
|
||||
RowIndex = rowIndex,
|
||||
Text = pc.Phone,
|
||||
Text = pc.Email,
|
||||
StyleInfo = ExcelStyleInfoType.Text
|
||||
});
|
||||
MergeCells(new ExcelMergeParameters
|
||||
{
|
||||
CellFromName = $"C{rowIndex}",
|
||||
CellToName = $"D{rowIndex}"
|
||||
});
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
{
|
||||
ColumnName = "D",
|
||||
ColumnName = "E",
|
||||
RowIndex = rowIndex,
|
||||
Text = pc.Phone,
|
||||
StyleInfo = ExcelStyleInfoType.Text
|
||||
});
|
||||
MergeCells(new ExcelMergeParameters
|
||||
{
|
||||
CellFromName = $"E{rowIndex}",
|
||||
CellToName = $"F{rowIndex}"
|
||||
});
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
{
|
||||
ColumnName = "G",
|
||||
RowIndex = rowIndex,
|
||||
Text = pc.Status,
|
||||
StyleInfo = ExcelStyleInfoType.Text
|
||||
});
|
||||
MergeCells(new ExcelMergeParameters
|
||||
{
|
||||
CellFromName = $"G{rowIndex}",
|
||||
CellToName = $"H{rowIndex}"
|
||||
});
|
||||
rowIndex++;
|
||||
}
|
||||
SaveExcel(info);
|
||||
|
@ -1,4 +1,6 @@
|
||||
using EventVisitorLogic.OfficePackage.HelperEnums;
|
||||
|
||||
using DocumentFormat.OpenXml.Wordprocessing;
|
||||
using EventVisitorLogic.OfficePackage.HelperEnums;
|
||||
using EventVisitorLogic.OfficePackage.HelperModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -13,21 +15,43 @@ namespace EventVisitorLogic.OfficePackage
|
||||
public void CreateDoc(WordInfo info)
|
||||
{
|
||||
CreateWord(info);
|
||||
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = new List<(string, WordTextProperties)> { (info.Title, new WordTextProperties { Bold = true, Size = "24", }) },
|
||||
Texts = new List<(string, WordTextProperties)>
|
||||
{
|
||||
(info.Title, new WordTextProperties { Bold = true, Size = "24" })
|
||||
},
|
||||
TextProperties = new WordTextProperties
|
||||
{
|
||||
Size = "24",
|
||||
JustificationType = WordJustificationType.Center
|
||||
}
|
||||
});
|
||||
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = new List<(string, WordTextProperties)> { ("", new WordTextProperties()) }, // Пустой параграф
|
||||
TextProperties = new WordTextProperties
|
||||
{
|
||||
Size = "24",
|
||||
JustificationType = WordJustificationType.Center
|
||||
}
|
||||
});
|
||||
|
||||
// Добавление информации о посетителях
|
||||
foreach (var km in info.Visitors)
|
||||
{
|
||||
// Создание параграфа для каждого посетителя с более красивым оформлением
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = new List<(string, WordTextProperties)>
|
||||
{ (km.Name, new WordTextProperties { Size = "20", Bold=true}), (km.Email, new WordTextProperties { Size = "20", Bold=true}), (km.Phone, new WordTextProperties { Size = "20", Bold=true}), (km.Status, new WordTextProperties { Size = "20", Bold=true})},
|
||||
{
|
||||
($"Имя: {km.Name} ", new WordTextProperties { Size = "20", Bold = true }),
|
||||
($"{km.Email} ", new WordTextProperties { Size = "20" }),
|
||||
($"{km.Phone} ", new WordTextProperties { Size = "20" }),
|
||||
($"{km.Status}", new WordTextProperties { Size = "20" }),
|
||||
},
|
||||
TextProperties = new WordTextProperties
|
||||
{
|
||||
Size = "24",
|
||||
@ -35,11 +59,23 @@ namespace EventVisitorLogic.OfficePackage
|
||||
}
|
||||
});
|
||||
|
||||
// Добавление пробела между записями посетителей
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = new List<(string, WordTextProperties)> { ("", new WordTextProperties()) }, // Пустой параграф
|
||||
TextProperties = new WordTextProperties
|
||||
{
|
||||
Size = "24",
|
||||
JustificationType = WordJustificationType.Center
|
||||
}
|
||||
});
|
||||
}
|
||||
SaveWord(info);
|
||||
}
|
||||
|
||||
protected abstract void CreateWord(WordInfo info);
|
||||
protected abstract void CreateParagraph(WordParagraph paragraph);
|
||||
protected abstract void SaveWord(WordInfo info);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -342,6 +342,7 @@ namespace EventVisitorLogic.OfficePackage.Implements
|
||||
};
|
||||
mergeCells.Append(mergeCell);
|
||||
}
|
||||
|
||||
protected override void SaveExcel(ExcelInfo info)
|
||||
{
|
||||
if (_spreadsheetDocument == null)
|
||||
@ -349,7 +350,8 @@ namespace EventVisitorLogic.OfficePackage.Implements
|
||||
return;
|
||||
}
|
||||
_spreadsheetDocument.WorkbookPart!.Workbook.Save();
|
||||
//_spreadsheetDocument.Close();
|
||||
_spreadsheetDocument.Dispose();
|
||||
_spreadsheetDocument = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -107,14 +107,35 @@ namespace EventVisitorLogic.OfficePackage.Implements
|
||||
}
|
||||
_docBody.AppendChild(docParagraph);
|
||||
}
|
||||
|
||||
protected override void SaveWord(WordInfo info)
|
||||
{
|
||||
// Проверьте, инициализированы ли _docBody и _wordDocument
|
||||
if (_docBody == null || _wordDocument == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Добавление свойств секции (если это необходимо)
|
||||
_docBody.AppendChild(CreateSectionProperties());
|
||||
_wordDocument.MainDocumentPart!.Document.Save();
|
||||
|
||||
// Сохранение документа
|
||||
_wordDocument.MainDocumentPart.Document.Save();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Логирование ошибки
|
||||
Console.WriteLine($"Error saving document: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Закрытие документа с помощью Dispose
|
||||
_wordDocument.Dispose(); // Освобождает ресурсы, связанные с документом
|
||||
_wordDocument = null; // Сброс ссылки после освобождения
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user