用于泛型列表数据导出指定格式数据快捷工具集合
License
—
Deps
1
Install Size
—
Vulns
✓ 0
Published
Feb 26, 2026
$ dotnet add package TJC.Cyclops.ReportingCyclops.Reporting是Cyclops.Framework框架中的报表生成组件,提供强大的报表设计、生成和导出功能。该组件支持多种报表格式(如PDF、Excel、Word、CSV等),并提供报表模板管理、数据源配置、图表生成等功能,适用于企业级应用中的各类数据展示和分析场景。
Install-Package Cyclops.Reporting
在应用程序启动时进行配置:
// 在Program.cs或Startup.cs中
using Cyclops.Reporting;
var builder = WebApplication.CreateBuilder(args);
// 添加Cyclops.Reporting服务
builder.Services.AddCyclopsReporting(options => {
// 报表模板路径
options.TemplatePath = Path.Combine(AppContext.BaseDirectory, "ReportTemplates");
// 临时文件路径
options.TempFilePath = Path.Combine(AppContext.BaseDirectory, "Temp");
// 缓存配置
options.EnableTemplateCache = true;
options.CacheExpiration = TimeSpan.FromHours(1);
// 导出配置
options.DefaultExportFormat = ExportFormat.PDF;
options.MaxReportRecords = 100000;
// 启用日志
options.EnableLogging = true;
});
// ...
using Cyclops.Reporting.Models;
using Cyclops.Reporting.Services;
using Microsoft.Extensions.DependencyInjection;
// 获取报表服务
var reportService = serviceProvider.GetRequiredService<IReportService>();
// 准备报表数据
var reportData = new Dictionary<string, object>
{
{ "Title", "月度销售报表" },
{ "Month", "2024年6月" },
{ "CompanyName", "示例公司" },
{ "SalesData", new List<SalesRecord> {
new SalesRecord { Product = "产品A", Quantity = 100, Amount = 15000 },
new SalesRecord { Product = "产品B", Quantity = 150, Amount = 22500 },
new SalesRecord { Product = "产品C", Quantity = 80, Amount = 12000 }
}}
};
// 生成报表
var reportResult = await reportService.GenerateReportAsync(
templateName: "MonthlySalesReport",
data: reportData,
format: ExportFormat.PDF
);
// 保存报表到文件
await using (var fileStream = new FileStream("SalesReport.pdf", FileMode.Create))
{
await reportResult.Content.CopyToAsync(fileStream);
}
Console.WriteLine($"报表已生成: {reportResult.FileName}");
Console.WriteLine($"文件大小: {reportResult.Content.Length} 字节");
using Cyclops.Reporting.Models;
using Cyclops.Reporting.Services;
using Microsoft.Extensions.DependencyInjection;
// 获取报表服务
var reportService = serviceProvider.GetRequiredService<IReportService>();
// 配置SQL数据源
var sqlDataSource = new SqlDataSourceConfig
{
ConnectionString = "Your_Connection_String",
Query = "SELECT p.ProductName, SUM(o.Quantity) as TotalQuantity, SUM(o.Quantity * p.Price) as TotalAmount " +
"FROM Orders o JOIN Products p ON o.ProductId = p.Id " +
"WHERE o.OrderDate BETWEEN @StartDate AND @EndDate " +
"GROUP BY p.ProductName"
};
// 设置查询参数
var parameters = new Dictionary<string, object>
{
{ "StartDate", new DateTime(2024, 1, 1) },
{ "EndDate", new DateTime(2024, 12, 31) }
};
// 生成基于SQL的报表
var sqlReportResult = await reportService.GenerateReportFromSqlAsync(
templateName: "SalesAnalysisReport",
dataSource: sqlDataSource,
parameters: parameters,
format: ExportFormat.Excel
);
// 保存报表
await using (var fileStream = new FileStream("SalesAnalysis.xlsx", FileMode.Create))
{
await sqlReportResult.Content.CopyToAsync(fileStream);
}
using Cyclops.Reporting.Models;
using Cyclops.Reporting.Services;
using Microsoft.Extensions.DependencyInjection;
// 获取报表服务
var reportService = serviceProvider.GetRequiredService<IReportService>();
// 准备图表数据
var chartData = new ChartData
{
Title = "季度销售趋势",
ChartType = ChartType.Line,
XAxisTitle = "季度",
YAxisTitle = "销售额(万元)",
Series = new List<ChartSeries>
{
new ChartSeries
{
Name = "2023年",
Data = new List<double> { 120, 180, 150, 210 }
},
new ChartSeries
{
Name = "2024年",
Data = new List<double> { 150, 220, 190, 260 }
}
},
Categories = new List<string> { "Q1", "Q2", "Q3", "Q4" }
};
// 生成包含图表的报表
var chartReportData = new Dictionary<string, object>
{
{ "ReportTitle", "销售趋势分析报告" },
{ "ReportDate", DateTime.Now.ToString("yyyy-MM-dd") },
{ "ChartData", chartData },
{ "AnalysisNotes", "2024年销售额整体呈上升趋势,Q2增长最为明显" }
};
var chartReportResult = await reportService.GenerateReportAsync(
templateName: "ChartReport",
data: chartReportData,
format: ExportFormat.PDF
);
// 保存图表报表
await using (var fileStream = new FileStream("ChartReport.pdf", FileMode.Create))
{
await chartReportResult.Content.CopyToAsync(fileStream);
}
using Cyclops.Reporting.Models;
using Cyclops.Reporting.Services;
using Microsoft.Extensions.DependencyInjection;
// 获取报表服务
var reportService = serviceProvider.GetRequiredService<IReportService>();
// 准备多个报表的生成请求
var reportRequests = new List<ReportRequest>
{
new ReportRequest
{
TemplateName = "ProductInventoryReport",
Data = new Dictionary<string, object> {
{ "WarehouseId", 1 },
{ "AsOfDate", DateTime.Now }
},
Format = ExportFormat.Excel,
FileName = "Warehouse1_Inventory.xlsx"
},
new ReportRequest
{
TemplateName = "ProductInventoryReport",
Data = new Dictionary<string, object> {
{ "WarehouseId", 2 },
{ "AsOfDate", DateTime.Now }
},
Format = ExportFormat.Excel,
FileName = "Warehouse2_Inventory.xlsx"
},
new ReportRequest
{
TemplateName = "SalesSummaryReport",
Data = new Dictionary<string, object> {
{ "Period", "Monthly" },
{ "Year", 2024 },
{ "Month", 6 }
},
Format = ExportFormat.PDF,
FileName = "June_Sales_Summary.pdf"
}
};
// 批量生成报表
var batchResults = await reportService.GenerateBatchReportsAsync(reportRequests);
// 保存所有生成的报表
foreach (var result in batchResults)
{
await using (var fileStream = new FileStream(result.FileName, FileMode.Create))
{
await result.Content.CopyToAsync(fileStream);
}
Console.WriteLine($"已生成: {result.FileName}");
}
// 也可以将所有报表打包成ZIP文件
var zipStream = await reportService.PackageReportsToZipAsync(batchResults);
await using (var zipFileStream = new FileStream("AllReports.zip", FileMode.Create))
{
await zipStream.CopyToAsync(zipFileStream);
}
Console.WriteLine("所有报表已打包到 AllReports.zip");
using Cyclops.Reporting.Services;
using Microsoft.Extensions.DependencyInjection;
// 获取报表模板服务
var templateService = serviceProvider.GetRequiredService<IReportTemplateService>();
// 上传新模板
await using (var templateStream = File.OpenRead("NewReportTemplate.xlsx"))
{
var templateInfo = await templateService.UploadTemplateAsync(
name: "CustomReportTemplate",
description: "自定义业务报表模板",
content: templateStream,
format: TemplateFormat.Excel
);
Console.WriteLine($"模板已上传: {templateInfo.Name}, ID: {templateInfo.Id}");
}
// 获取所有可用模板
var templates = await templateService.GetAllTemplatesAsync();
Console.WriteLine("可用的报表模板:");
foreach (var template in templates)
{
Console.WriteLine($"- {template.Name} ({template.Format}) - {template.Description}");
}
// 更新模板
await using (var updatedStream = File.OpenRead("UpdatedTemplate.xlsx"))
{
await templateService.UpdateTemplateAsync(
id: "template_id",
name: "UpdatedCustomTemplate",
description: "已更新的自定义模板",
content: updatedStream
);
}
// 删除模板
await templateService.DeleteTemplateAsync("template_id");
Console.WriteLine("模板已删除");
## 版本信息
- 当前版本[](https://www.nuget.org/packages?q=TJC.Cyclops)
- 作者:yswenli
- 描述:企服版框架中报表生成组件
## 贡献者
- yswenli
## 许可证
保留所有权利