This commit is contained in:
xyy
2026-05-06 16:41:32 +08:00
parent 11bf3f4827
commit 27aa99057f
11 changed files with 1393 additions and 300 deletions

View File

@@ -7,20 +7,177 @@ namespace TabletTester2025.Services
{
public class ExcelExportService
{
public void ExportToExcel(IEnumerable<TestBatch> batches, string filePath)
{
using var package = new ExcelPackage(new FileInfo(filePath));
var sheet = package.Workbook.Worksheets.Add("检测记录");
sheet.Cells[1, 1].Value = "时间";
// 按测试类型分组
var hardnessData = batches.Where(b => b.TestType == "硬度").ToList();
var friabilityData = batches.Where(b => b.TestType == "脆碎度").ToList();
var disintegrationData = batches.Where(b => b.TestType == "崩解").ToList();
var dissolutionData = batches.Where(b => b.TestType == "溶出").ToList();
// 硬度表
if (hardnessData.Any())
{
var sheet = package.Workbook.Worksheets.Add("硬度报表");
// 表头
sheet.Cells[1, 1].Value = "检测时间";
sheet.Cells[1, 2].Value = "工位";
sheet.Cells[1, 3].Value = "样品名称";
sheet.Cells[1, 4].Value = "平均值(N)";
sheet.Cells[1, 5].Value = "RSD(%)";
sheet.Cells[1, 6].Value = "最大值(N)";
sheet.Cells[1, 7].Value = "最小值(N)";
sheet.Cells[1, 8].Value = "测试次数";
sheet.Cells[1, 9].Value = "合格";
int row = 2;
foreach (var b in hardnessData)
{
sheet.Cells[row, 1].Value = b.TestTime.ToString("yyyy-MM-dd HH:mm:ss");
sheet.Cells[row, 2].Value = b.StationId;
sheet.Cells[row, 3].Value = b.SampleName;
sheet.Cells[row, 4].Value = b.HardnessAvg;
sheet.Cells[row, 5].Value = b.HardnessRSD;
sheet.Cells[row, 6].Value = b.HardnessMax;
sheet.Cells[row, 7].Value = b.HardnessMin;
sheet.Cells[row, 8].Value = b.HardnessTestCount;
sheet.Cells[row, 9].Value = b.HardnessPass ? "合格" : "不合格";
row++;
}
sheet.Cells.AutoFitColumns();
}
else
{
// 如果没有数据也创建空表(可选),根据需求决定
var sheet = package.Workbook.Worksheets.Add("硬度报表");
sheet.Cells[1, 1].Value = "无硬度测试数据";
}
// 脆碎度表
if (friabilityData.Any())
{
var sheet = package.Workbook.Worksheets.Add("脆碎度报表");
sheet.Cells[1, 1].Value = "检测时间";
sheet.Cells[1, 2].Value = "工位";
sheet.Cells[1, 3].Value = "样品名称";
sheet.Cells[1, 4].Value = "失重率(%)";
sheet.Cells[1, 5].Value = "设定转速(r/min)";
sheet.Cells[1, 6].Value = "方向";
sheet.Cells[1, 7].Value = "总圈数";
sheet.Cells[1, 8].Value = "前重(g)";
sheet.Cells[1, 9].Value = "后重(g)";
sheet.Cells[1, 10].Value = "合格";
int row = 2;
foreach (var b in friabilityData)
{
sheet.Cells[row, 1].Value = b.TestTime.ToString("yyyy-MM-dd HH:mm:ss");
sheet.Cells[row, 2].Value = b.StationId;
sheet.Cells[row, 3].Value = b.SampleName;
sheet.Cells[row, 4].Value = b.FriabilityLoss;
sheet.Cells[row, 5].Value = b.FriabilityTargetRpm;
sheet.Cells[row, 6].Value = b.FriabilityClockwise ? "顺时针" : "逆时针";
sheet.Cells[row, 7].Value = b.FriabilityRemainingRounds;
sheet.Cells[row, 8].Value = b.WeightBefore;
sheet.Cells[row, 9].Value = b.WeightAfter;
sheet.Cells[row, 10].Value = b.FriabilityPass ? "合格" : "不合格";
row++;
}
sheet.Cells.AutoFitColumns();
}
else
{
var sheet = package.Workbook.Worksheets.Add("脆碎度报表");
sheet.Cells[1, 1].Value = "无脆碎度测试数据";
}
// 崩解表
if (disintegrationData.Any())
{
var sheet = package.Workbook.Worksheets.Add("崩解报表");
sheet.Cells[1, 1].Value = "检测时间";
sheet.Cells[1, 2].Value = "工位";
sheet.Cells[1, 3].Value = "样品名称";
sheet.Cells[1, 4].Value = "崩解时间(秒)";
sheet.Cells[1, 5].Value = "剩余未崩解管";
sheet.Cells[1, 6].Value = "设定升降频率";
sheet.Cells[1, 7].Value = "水浴温度(℃)";
sheet.Cells[1, 8].Value = "合格";
int row = 2;
foreach (var b in disintegrationData)
{
sheet.Cells[row, 1].Value = b.TestTime.ToString("yyyy-MM-dd HH:mm:ss");
sheet.Cells[row, 2].Value = b.StationId;
sheet.Cells[row, 3].Value = b.SampleName;
sheet.Cells[row, 4].Value = b.DisintegrationTimeSec;
sheet.Cells[row, 5].Value = b.RemainingTubesAtEnd;
sheet.Cells[row, 6].Value = b.DisintegrationTargetFreq;
sheet.Cells[row, 7].Value = b.DisintegrationTemp;
sheet.Cells[row, 8].Value = b.DisintegrationPass ? "合格" : "不合格";
row++;
}
sheet.Cells.AutoFitColumns();
}
else
{
var sheet = package.Workbook.Worksheets.Add("崩解报表");
sheet.Cells[1, 1].Value = "无崩解测试数据";
}
// 溶出表
if (dissolutionData.Any())
{
var sheet = package.Workbook.Worksheets.Add("溶出报表");
sheet.Cells[1, 1].Value = "检测时间";
sheet.Cells[1, 2].Value = "工位";
sheet.Cells[1, 3].Value = "样品名称";
sheet.Cells[1, 4].Value = "30min溶出度(%)";
sheet.Cells[1, 5].Value = "设定转速(r/min)";
sheet.Cells[1, 6].Value = "R²";
sheet.Cells[1, 7].Value = "取样间隔(min)";
sheet.Cells[1, 8].Value = "升降频率";
sheet.Cells[1, 9].Value = "合格";
int row = 2;
foreach (var b in dissolutionData)
{
sheet.Cells[row, 1].Value = b.TestTime.ToString("yyyy-MM-dd HH:mm:ss");
sheet.Cells[row, 2].Value = b.StationId;
sheet.Cells[row, 3].Value = b.SampleName;
sheet.Cells[row, 4].Value = b.DissolutionRate30Min;
sheet.Cells[row, 5].Value = b.DissolutionTargetRpm;
sheet.Cells[row, 6].Value = b.DissolutionRSquared;
sheet.Cells[row, 7].Value = b.DissolutionSampleInterval;
sheet.Cells[row, 8].Value = b.DissolutionUpDownFreq;
sheet.Cells[row, 9].Value = b.DissolutionPass ? "合格" : "不合格";
row++;
}
sheet.Cells.AutoFitColumns();
}
else
{
var sheet = package.Workbook.Worksheets.Add("溶出报表");
sheet.Cells[1, 1].Value = "无溶出测试数据";
}
package.Save();
}
public void ExportHardnessToExcel(IEnumerable<TestBatch> batches, string filePath)
{
using var package = new ExcelPackage(new FileInfo(filePath));
var sheet = package.Workbook.Worksheets.Add("硬度报表");
// 只导出硬度相关列
sheet.Cells[1, 1].Value = "检测时间";
sheet.Cells[1, 2].Value = "工位";
sheet.Cells[1, 3].Value = "样品";
sheet.Cells[1, 4].Value = "硬度平均值(N)";
sheet.Cells[1, 5].Value = "硬度RSD(%)";
sheet.Cells[1, 6].Value = "脆碎度失重(%)";
sheet.Cells[1, 7].Value = "崩解时间(秒)";
sheet.Cells[1, 8].Value = "剩余未崩解管数";
sheet.Cells[1, 9].Value = "溶出度(30min %)";
sheet.Cells[1, 10].Value = "合格";
sheet.Cells[1, 3].Value = "样品名称";
sheet.Cells[1, 4].Value = "平均值(N)";
sheet.Cells[1, 5].Value = "RSD(%)";
sheet.Cells[1, 6].Value = "最大值(N)";
sheet.Cells[1, 7].Value = "最小值(N)";
sheet.Cells[1, 8].Value = "测试次数";
sheet.Cells[1, 9].Value = "合格";
int row = 2;
foreach (var b in batches)
{
@@ -29,15 +186,113 @@ namespace TabletTester2025.Services
sheet.Cells[row, 3].Value = b.SampleName;
sheet.Cells[row, 4].Value = b.HardnessAvg;
sheet.Cells[row, 5].Value = b.HardnessRSD;
sheet.Cells[row, 6].Value = b.FriabilityLoss;
sheet.Cells[row, 7].Value = b.DisintegrationTimeSec;
sheet.Cells[row, 8].Value = b.RemainingTubesAtEnd;
sheet.Cells[row, 9].Value = b.DissolutionRate30Min;
sheet.Cells[row, 10].Value = b.IsQualified ? "合格" : "不合格";
sheet.Cells[row, 6].Value = b.HardnessMax;
sheet.Cells[row, 7].Value = b.HardnessMin;
sheet.Cells[row, 8].Value = b.HardnessTestCount;
sheet.Cells[row, 9].Value = b.HardnessPass ? "合格" : "不合格";
row++;
}
sheet.Cells.AutoFitColumns();
package.Save();
}
public void ExportFriabilityToExcel(IEnumerable<TestBatch> batches, string filePath)
{
using var package = new ExcelPackage(new FileInfo(filePath));
var sheet = package.Workbook.Worksheets.Add("脆碎度报表");
sheet.Cells[1, 1].Value = "检测时间";
sheet.Cells[1, 2].Value = "工位";
sheet.Cells[1, 3].Value = "样品名称";
sheet.Cells[1, 4].Value = "失重率(%)";
sheet.Cells[1, 5].Value = "设定转速(r/min)";
sheet.Cells[1, 6].Value = "方向";
sheet.Cells[1, 7].Value = "总圈数";
sheet.Cells[1, 8].Value = "前重(g)";
sheet.Cells[1, 9].Value = "后重(g)";
sheet.Cells[1, 10].Value = "合格";
int row = 2;
foreach (var b in batches)
{
sheet.Cells[row, 1].Value = b.TestTime.ToString("yyyy-MM-dd HH:mm:ss");
sheet.Cells[row, 2].Value = b.StationId;
sheet.Cells[row, 3].Value = b.SampleName;
sheet.Cells[row, 4].Value = b.FriabilityLoss;
sheet.Cells[row, 5].Value = b.FriabilityTargetRpm;
sheet.Cells[row, 6].Value = b.FriabilityClockwise ? "顺时针" : "逆时针";
sheet.Cells[row, 7].Value = b.FriabilityRemainingRounds; // 总圈数
sheet.Cells[row, 8].Value = b.WeightBefore;
sheet.Cells[row, 9].Value = b.WeightAfter;
sheet.Cells[row, 10].Value = b.FriabilityPass ? "合格" : "不合格";
row++;
}
sheet.Cells.AutoFitColumns();
package.Save();
}
public void ExportDisintegrationToExcel(IEnumerable<TestBatch> batches, string filePath)
{
using var package = new ExcelPackage(new FileInfo(filePath));
var sheet = package.Workbook.Worksheets.Add("崩解报表");
sheet.Cells[1, 1].Value = "检测时间";
sheet.Cells[1, 2].Value = "工位";
sheet.Cells[1, 3].Value = "样品名称";
sheet.Cells[1, 4].Value = "崩解时间(秒)";
sheet.Cells[1, 5].Value = "剩余未崩解管";
sheet.Cells[1, 6].Value = "设定升降频率";
sheet.Cells[1, 7].Value = "水浴温度(℃)";
sheet.Cells[1, 8].Value = "合格";
int row = 2;
foreach (var b in batches)
{
sheet.Cells[row, 1].Value = b.TestTime.ToString("yyyy-MM-dd HH:mm:ss");
sheet.Cells[row, 2].Value = b.StationId;
sheet.Cells[row, 3].Value = b.SampleName;
sheet.Cells[row, 4].Value = b.DisintegrationTimeSec;
sheet.Cells[row, 5].Value = b.RemainingTubesAtEnd;
sheet.Cells[row, 6].Value = b.DisintegrationTargetFreq;
sheet.Cells[row, 7].Value = b.DisintegrationTemp;
sheet.Cells[row, 8].Value = b.DisintegrationPass ? "合格" : "不合格";
row++;
}
sheet.Cells.AutoFitColumns();
package.Save();
}
public void ExportDissolutionToExcel(IEnumerable<TestBatch> batches, string filePath)
{
using var package = new ExcelPackage(new FileInfo(filePath));
var sheet = package.Workbook.Worksheets.Add("溶出报表");
sheet.Cells[1, 1].Value = "检测时间";
sheet.Cells[1, 2].Value = "工位";
sheet.Cells[1, 3].Value = "样品名称";
sheet.Cells[1, 4].Value = "30min溶出度(%)";
sheet.Cells[1, 5].Value = "设定转速(r/min)";
sheet.Cells[1, 6].Value = "R²";
sheet.Cells[1, 7].Value = "取样间隔(min)";
sheet.Cells[1, 8].Value = "升降频率";
sheet.Cells[1, 9].Value = "合格";
int row = 2;
foreach (var b in batches)
{
sheet.Cells[row, 1].Value = b.TestTime.ToString("yyyy-MM-dd HH:mm:ss");
sheet.Cells[row, 2].Value = b.StationId;
sheet.Cells[row, 3].Value = b.SampleName;
sheet.Cells[row, 4].Value = b.DissolutionRate30Min;
sheet.Cells[row, 5].Value = b.DissolutionTargetRpm;
sheet.Cells[row, 6].Value = b.DissolutionRSquared;
sheet.Cells[row, 7].Value = b.DissolutionSampleInterval;
sheet.Cells[row, 8].Value = b.DissolutionUpDownFreq;
sheet.Cells[row, 9].Value = b.DissolutionPass ? "合格" : "不合格";
row++;
}
sheet.Cells.AutoFitColumns();
package.Save();
}
}
}