This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user