更新
This commit is contained in:
@@ -321,8 +321,14 @@ namespace WindowsFormsApp6
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void RemoveAverageRows()
|
private void RemoveAverageRows()
|
||||||
{
|
{
|
||||||
var avgRows = sampleDataTable.Select($"序号 = '{AVG_ROW_LABEL}'");
|
var avgRows1 = sampleDataTable.Select($"序号 = '平均时间(s)试样1-5'");
|
||||||
foreach (var row in avgRows)
|
var avgRows2 = sampleDataTable.Select($"序号 = '平均时间(s)试样6-10'");
|
||||||
|
|
||||||
|
foreach (var row in avgRows1)
|
||||||
|
{
|
||||||
|
sampleDataTable.Rows.Remove(row);
|
||||||
|
}
|
||||||
|
foreach (var row in avgRows2)
|
||||||
{
|
{
|
||||||
sampleDataTable.Rows.Remove(row);
|
sampleDataTable.Rows.Remove(row);
|
||||||
}
|
}
|
||||||
@@ -415,38 +421,96 @@ namespace WindowsFormsApp6
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void UpdateAverageRow(double[] averages)
|
private void UpdateAverageRow(double[] averages)
|
||||||
{
|
{
|
||||||
var avgRows = sampleDataTable.Select($"序号 = '{AVG_ROW_LABEL}'");
|
// 移除所有平均值行
|
||||||
|
var avgRows1 = sampleDataTable.Select($"序号 = '平均时间(s)试样1-5'");
|
||||||
|
var avgRows2 = sampleDataTable.Select($"序号 = '平均时间(s)试样6-10'");
|
||||||
|
|
||||||
// 计算总平均值
|
foreach (var row in avgRows1)
|
||||||
double overallAvg = CalculateOverallAverage();
|
|
||||||
|
|
||||||
if (avgRows.Length == 0)
|
|
||||||
{
|
{
|
||||||
// 添加新的平均值行
|
sampleDataTable.Rows.Remove(row);
|
||||||
DataRow avgRow = sampleDataTable.NewRow();
|
|
||||||
avgRow["序号"] = AVG_ROW_LABEL;
|
|
||||||
|
|
||||||
// 只在第一列显示总平均值
|
|
||||||
avgRow["试样1"] = overallAvg;
|
|
||||||
|
|
||||||
// 其他列设置为空
|
|
||||||
for (int i = 2; i <= currentSampleCount; i++)
|
|
||||||
{
|
|
||||||
avgRow[$"试样{i}"] = DBNull.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
sampleDataTable.Rows.Add(avgRow);
|
|
||||||
}
|
}
|
||||||
else
|
foreach (var row in avgRows2)
|
||||||
{
|
{
|
||||||
// 更新现有平均值行
|
sampleDataTable.Rows.Remove(row);
|
||||||
avgRows[0]["试样1"] = overallAvg;
|
}
|
||||||
|
|
||||||
|
// 获取所有时间行数据
|
||||||
|
var timeRows = sampleDataTable.AsEnumerable()
|
||||||
|
.Where(r => r.Field<string>("序号") == TIME_ROW_LABEL);
|
||||||
|
|
||||||
|
if (!timeRows.Any())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// 计算试样1-5的平均值
|
||||||
|
int group1Count = Math.Min(5, currentSampleCount);
|
||||||
|
if (group1Count > 0)
|
||||||
|
{
|
||||||
|
double sum1 = 0;
|
||||||
|
int count1 = 0;
|
||||||
|
|
||||||
|
foreach (var row in timeRows)
|
||||||
|
{
|
||||||
|
for (int i = 1; i <= group1Count; i++)
|
||||||
|
{
|
||||||
|
sum1 += row.Field<double>($"试样{i}");
|
||||||
|
count1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double avg1 = count1 > 0 ? sum1 / count1 : 0;
|
||||||
|
|
||||||
|
// 添加试样1-5平均值行
|
||||||
|
DataRow avgRow1 = sampleDataTable.NewRow();
|
||||||
|
avgRow1["序号"] = "平均时间(s)试样1-5";
|
||||||
|
avgRow1["试样1"] = avg1;
|
||||||
|
|
||||||
// 其他列设置为空
|
// 其他列设置为空
|
||||||
for (int i = 2; i <= currentSampleCount; i++)
|
for (int i = 2; i <= currentSampleCount; i++)
|
||||||
{
|
{
|
||||||
avgRows[0][$"试样{i}"] = DBNull.Value;
|
avgRow1[$"试样{i}"] = DBNull.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sampleDataTable.Rows.Add(avgRow1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算试样6-10的平均值(仅当试样数量>5时)
|
||||||
|
if (currentSampleCount > 5)
|
||||||
|
{
|
||||||
|
int group2Count = Math.Min(5, currentSampleCount - 5);
|
||||||
|
double sum2 = 0;
|
||||||
|
int count2 = 0;
|
||||||
|
|
||||||
|
foreach (var row in timeRows)
|
||||||
|
{
|
||||||
|
for (int i = 6; i <= 5 + group2Count; i++)
|
||||||
|
{
|
||||||
|
sum2 += row.Field<double>($"试样{i}");
|
||||||
|
count2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double avg2 = count2 > 0 ? sum2 / count2 : 0;
|
||||||
|
|
||||||
|
// 添加试样6-10平均值行
|
||||||
|
DataRow avgRow2 = sampleDataTable.NewRow();
|
||||||
|
avgRow2["序号"] = "平均时间(s)试样6-10";
|
||||||
|
|
||||||
|
// 前5列为空
|
||||||
|
for (int i = 1; i <= 5; i++)
|
||||||
|
{
|
||||||
|
avgRow2[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 第6列显示平均值
|
||||||
|
avgRow2["试样6"] = avg2;
|
||||||
|
|
||||||
|
// 其他列为空
|
||||||
|
for (int i = 7; i <= currentSampleCount; i++)
|
||||||
|
{
|
||||||
|
avgRow2[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
sampleDataTable.Rows.Add(avgRow2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -596,31 +660,82 @@ namespace WindowsFormsApp6
|
|||||||
private void AddAverageRow(ISheet sheet, ICellStyle avgStyle)
|
private void AddAverageRow(ISheet sheet, ICellStyle avgStyle)
|
||||||
{
|
{
|
||||||
var dataRows = sampleDataTable.AsEnumerable()
|
var dataRows = sampleDataTable.AsEnumerable()
|
||||||
.Where(r => r.Field<string>("序号") != AVG_ROW_LABEL);
|
.Where(r => r.Field<string>("序号") != "平均时间(s)试样1-5" &&
|
||||||
|
r.Field<string>("序号") != "平均时间(s)试样6-10");
|
||||||
|
|
||||||
if (!dataRows.Any())
|
if (!dataRows.Any())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int rowIndex = sheet.LastRowNum + 1;
|
int rowIndex = sheet.LastRowNum + 1;
|
||||||
IRow avgRow = sheet.CreateRow(rowIndex);
|
|
||||||
|
|
||||||
// 序号列
|
// 计算试样1-5的平均值
|
||||||
ICell labelCell = avgRow.CreateCell(0);
|
int group1Count = Math.Min(5, currentSampleCount);
|
||||||
labelCell.SetCellValue(AVG_ROW_LABEL);
|
if (group1Count > 0)
|
||||||
labelCell.CellStyle = avgStyle;
|
|
||||||
|
|
||||||
// 计算总平均值
|
|
||||||
double overallAvg = CalculateOverallAverage();
|
|
||||||
|
|
||||||
// 在第一个试样列显示总平均值
|
|
||||||
ICell avgCell = avgRow.CreateCell(1);
|
|
||||||
avgCell.SetCellValue(overallAvg);
|
|
||||||
avgCell.CellStyle = avgStyle;
|
|
||||||
|
|
||||||
// 合并所有试样列
|
|
||||||
if (currentSampleCount > 1)
|
|
||||||
{
|
{
|
||||||
sheet.AddMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 1, currentSampleCount));
|
double sum1 = 0;
|
||||||
|
int count1 = 0;
|
||||||
|
|
||||||
|
foreach (var row in dataRows)
|
||||||
|
{
|
||||||
|
for (int i = 1; i <= group1Count; i++)
|
||||||
|
{
|
||||||
|
sum1 += row.Field<double>($"试样{i}");
|
||||||
|
count1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double avg1 = count1 > 0 ? sum1 / count1 : 0;
|
||||||
|
|
||||||
|
// 添加试样1-5平均值行
|
||||||
|
IRow avgRow1 = sheet.CreateRow(rowIndex++);
|
||||||
|
ICell labelCell1 = avgRow1.CreateCell(0);
|
||||||
|
labelCell1.SetCellValue("平均时间(s)试样1-5");
|
||||||
|
labelCell1.CellStyle = avgStyle;
|
||||||
|
|
||||||
|
ICell avgCell1 = avgRow1.CreateCell(1);
|
||||||
|
avgCell1.SetCellValue(avg1);
|
||||||
|
avgCell1.CellStyle = avgStyle;
|
||||||
|
|
||||||
|
// 合并试样1-5列
|
||||||
|
if (group1Count > 1)
|
||||||
|
{
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(rowIndex - 1, rowIndex - 1, 1, group1Count));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算试样6-10的平均值(仅当试样数量>5时)
|
||||||
|
if (currentSampleCount > 5)
|
||||||
|
{
|
||||||
|
int group2Count = Math.Min(5, currentSampleCount - 5);
|
||||||
|
double sum2 = 0;
|
||||||
|
int count2 = 0;
|
||||||
|
|
||||||
|
foreach (var row in dataRows)
|
||||||
|
{
|
||||||
|
for (int i = 6; i <= 5 + group2Count; i++)
|
||||||
|
{
|
||||||
|
sum2 += row.Field<double>($"试样{i}");
|
||||||
|
count2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double avg2 = count2 > 0 ? sum2 / count2 : 0;
|
||||||
|
|
||||||
|
// 添加试样6-10平均值行
|
||||||
|
IRow avgRow2 = sheet.CreateRow(rowIndex);
|
||||||
|
ICell labelCell2 = avgRow2.CreateCell(0);
|
||||||
|
labelCell2.SetCellValue("平均时间(s)试样6-10");
|
||||||
|
labelCell2.CellStyle = avgStyle;
|
||||||
|
|
||||||
|
ICell avgCell2 = avgRow2.CreateCell(6);
|
||||||
|
avgCell2.SetCellValue(avg2);
|
||||||
|
avgCell2.CellStyle = avgStyle;
|
||||||
|
|
||||||
|
// 合并试样6-10列
|
||||||
|
if (group2Count > 1)
|
||||||
|
{
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 6, 5 + group2Count));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -795,22 +910,74 @@ namespace WindowsFormsApp6
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 平均时间行
|
// 计算试样1-5的平均值
|
||||||
IRow avgRow = sheet.CreateRow(rowIndex);
|
int group1Count = Math.Min(5, currentSampleCount);
|
||||||
ICell avgLabelCell = avgRow.CreateCell(0);
|
if (group1Count > 0 && timeRows.Any())
|
||||||
avgLabelCell.SetCellValue(AVG_ROW_LABEL);
|
|
||||||
avgLabelCell.CellStyle = dataStyle;
|
|
||||||
|
|
||||||
// 计算并显示总平均值
|
|
||||||
double overallAvg = CalculateOverallAverage();
|
|
||||||
ICell avgCell = avgRow.CreateCell(1);
|
|
||||||
avgCell.SetCellValue(overallAvg);
|
|
||||||
avgCell.CellStyle = yellowStyle;
|
|
||||||
|
|
||||||
// 合并所有试样列
|
|
||||||
if (currentSampleCount > 1)
|
|
||||||
{
|
{
|
||||||
sheet.AddMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 1, currentSampleCount));
|
double sum1 = 0;
|
||||||
|
int count1 = 0;
|
||||||
|
|
||||||
|
foreach (var row in timeRows)
|
||||||
|
{
|
||||||
|
for (int i = 1; i <= group1Count; i++)
|
||||||
|
{
|
||||||
|
sum1 += row.Field<double>($"试样{i}");
|
||||||
|
count1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double avg1 = count1 > 0 ? sum1 / count1 : 0;
|
||||||
|
|
||||||
|
// 添加试样1-5平均值行
|
||||||
|
IRow avgRow1 = sheet.CreateRow(rowIndex++);
|
||||||
|
ICell avgLabelCell1 = avgRow1.CreateCell(0);
|
||||||
|
avgLabelCell1.SetCellValue("平均时间(s)试样1-5");
|
||||||
|
avgLabelCell1.CellStyle = dataStyle;
|
||||||
|
|
||||||
|
ICell avgCell1 = avgRow1.CreateCell(1);
|
||||||
|
avgCell1.SetCellValue(avg1);
|
||||||
|
avgCell1.CellStyle = yellowStyle;
|
||||||
|
|
||||||
|
// 合并试样1-5列
|
||||||
|
if (group1Count > 1)
|
||||||
|
{
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(rowIndex - 1, rowIndex - 1, 1, group1Count));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算试样6-10的平均值(仅当试样数量>5时)
|
||||||
|
if (currentSampleCount > 5 && timeRows.Any())
|
||||||
|
{
|
||||||
|
int group2Count = Math.Min(5, currentSampleCount - 5);
|
||||||
|
double sum2 = 0;
|
||||||
|
int count2 = 0;
|
||||||
|
|
||||||
|
foreach (var row in timeRows)
|
||||||
|
{
|
||||||
|
for (int i = 6; i <= 5 + group2Count; i++)
|
||||||
|
{
|
||||||
|
sum2 += row.Field<double>($"试样{i}");
|
||||||
|
count2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double avg2 = count2 > 0 ? sum2 / count2 : 0;
|
||||||
|
|
||||||
|
// 添加试样6-10平均值行
|
||||||
|
IRow avgRow2 = sheet.CreateRow(rowIndex);
|
||||||
|
ICell avgLabelCell2 = avgRow2.CreateCell(0);
|
||||||
|
avgLabelCell2.SetCellValue("平均时间(s)试样6-10");
|
||||||
|
avgLabelCell2.CellStyle = dataStyle;
|
||||||
|
|
||||||
|
ICell avgCell2 = avgRow2.CreateCell(6);
|
||||||
|
avgCell2.SetCellValue(avg2);
|
||||||
|
avgCell2.CellStyle = yellowStyle;
|
||||||
|
|
||||||
|
// 合并试样6-10列
|
||||||
|
if (group2Count > 1)
|
||||||
|
{
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 6, 5 + group2Count));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -306,7 +306,13 @@ namespace WindowsFormsApp6
|
|||||||
r.Field<string>("序号") == ROW_RUN_SPEED ||
|
r.Field<string>("序号") == ROW_RUN_SPEED ||
|
||||||
r.Field<string>("序号") == ROW_AVG_ABSORPTION ||
|
r.Field<string>("序号") == ROW_AVG_ABSORPTION ||
|
||||||
r.Field<string>("序号") == ROW_MAX_ABSORPTION ||
|
r.Field<string>("序号") == ROW_MAX_ABSORPTION ||
|
||||||
r.Field<string>("序号") == ROW_STD_DEVIATION)
|
r.Field<string>("序号") == ROW_STD_DEVIATION ||
|
||||||
|
r.Field<string>("序号") == "液体吸收量平均值(%)试样1-5" ||
|
||||||
|
r.Field<string>("序号") == "液体吸收量平均值(%)试样6-10" ||
|
||||||
|
r.Field<string>("序号") == "液体吸收量最大值(%)试样1-5" ||
|
||||||
|
r.Field<string>("序号") == "液体吸收量最大值(%)试样6-10" ||
|
||||||
|
r.Field<string>("序号") == "标准偏差试样1-5" ||
|
||||||
|
r.Field<string>("序号") == "标准偏差试样6-10")
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
foreach (var row in rowsToRemove)
|
foreach (var row in rowsToRemove)
|
||||||
@@ -447,54 +453,138 @@ namespace WindowsFormsApp6
|
|||||||
}
|
}
|
||||||
sampleDataTable.Rows.Add(runSpeedRow);
|
sampleDataTable.Rows.Add(runSpeedRow);
|
||||||
|
|
||||||
// 7. 液体吸收量平均值行
|
// 7. 液体吸收量平均值行(试样1-5)
|
||||||
DataRow avgRow = sampleDataTable.NewRow();
|
DataRow avgRow1 = sampleDataTable.NewRow();
|
||||||
avgRow["序号"] = ROW_AVG_ABSORPTION;
|
avgRow1["序号"] = "液体吸收量平均值(%)试样1-5";
|
||||||
|
|
||||||
// 根据实际试样数量计算平均值
|
// 计算试样1-5的平均值
|
||||||
double avgAbsorption = count > 0 ? absorptions.Take(count).Average() : 0;
|
int group1Count = Math.Min(5, count);
|
||||||
|
if (group1Count > 0)
|
||||||
// 第1列显示平均值
|
{
|
||||||
avgRow["试样1"] = avgAbsorption;
|
double avgAbsorption1 = absorptions.Take(group1Count).Average();
|
||||||
|
avgRow1["试样1"] = avgAbsorption1;
|
||||||
|
}
|
||||||
|
|
||||||
// 其他列为空
|
// 其他列为空
|
||||||
for (int i = 2; i <= count; i++)
|
for (int i = 2; i <= count; i++)
|
||||||
{
|
{
|
||||||
avgRow[$"试样{i}"] = DBNull.Value;
|
avgRow1[$"试样{i}"] = DBNull.Value;
|
||||||
}
|
}
|
||||||
sampleDataTable.Rows.Add(avgRow);
|
sampleDataTable.Rows.Add(avgRow1);
|
||||||
|
|
||||||
// 8. 液体吸收量最大值行
|
// 8. 液体吸收量平均值行(试样6-10)- 仅当试样数量>5时添加
|
||||||
DataRow maxRow = sampleDataTable.NewRow();
|
if (count > 5)
|
||||||
maxRow["序号"] = ROW_MAX_ABSORPTION;
|
{
|
||||||
double maxAbsorption = absorptions.Max();
|
DataRow avgRow2 = sampleDataTable.NewRow();
|
||||||
|
avgRow2["序号"] = "液体吸收量平均值(%)试样6-10";
|
||||||
|
|
||||||
// 第1列显示最大值
|
// 计算试样6-10的平均值
|
||||||
maxRow["试样1"] = maxAbsorption;
|
int group2Count = Math.Min(5, count - 5);
|
||||||
|
if (group2Count > 0)
|
||||||
|
{
|
||||||
|
double avgAbsorption2 = absorptions.Skip(5).Take(group2Count).Average();
|
||||||
|
avgRow2["试样6"] = avgAbsorption2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他列为空
|
||||||
|
for (int i = 1; i <= 5; i++)
|
||||||
|
{
|
||||||
|
avgRow2[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
for (int i = 7; i <= count; i++)
|
||||||
|
{
|
||||||
|
avgRow2[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
sampleDataTable.Rows.Add(avgRow2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 9. 液体吸收量最大值行(试样1-5)
|
||||||
|
DataRow maxRow1 = sampleDataTable.NewRow();
|
||||||
|
maxRow1["序号"] = "液体吸收量最大值(%)试样1-5";
|
||||||
|
|
||||||
|
// 计算试样1-5的最大值
|
||||||
|
if (group1Count > 0)
|
||||||
|
{
|
||||||
|
double maxAbsorption1 = absorptions.Take(group1Count).Max();
|
||||||
|
maxRow1["试样1"] = maxAbsorption1;
|
||||||
|
}
|
||||||
|
|
||||||
// 其他列为空
|
// 其他列为空
|
||||||
for (int i = 2; i <= count; i++)
|
for (int i = 2; i <= count; i++)
|
||||||
{
|
{
|
||||||
maxRow[$"试样{i}"] = DBNull.Value;
|
maxRow1[$"试样{i}"] = DBNull.Value;
|
||||||
}
|
}
|
||||||
sampleDataTable.Rows.Add(maxRow);
|
sampleDataTable.Rows.Add(maxRow1);
|
||||||
|
|
||||||
// 9. 标准偏差行(最后一行)
|
// 10. 液体吸收量最大值行(试样6-10)- 仅当试样数量>5时添加
|
||||||
DataRow stdDevRow = sampleDataTable.NewRow();
|
if (count > 5)
|
||||||
stdDevRow["序号"] = ROW_STD_DEVIATION;
|
{
|
||||||
|
DataRow maxRow2 = sampleDataTable.NewRow();
|
||||||
|
maxRow2["序号"] = "液体吸收量最大值(%)试样6-10";
|
||||||
|
|
||||||
// 根据实际试样数量计算标准偏差
|
// 计算试样6-10的最大值
|
||||||
double stdDev = count > 1 ? CalculateStandardDeviation(absorptions.Take(count).ToArray()) : 0;
|
int group2Count = Math.Min(5, count - 5);
|
||||||
|
if (group2Count > 0)
|
||||||
|
{
|
||||||
|
double maxAbsorption2 = absorptions.Skip(5).Take(group2Count).Max();
|
||||||
|
maxRow2["试样6"] = maxAbsorption2;
|
||||||
|
}
|
||||||
|
|
||||||
// 第1列显示标准偏差
|
// 其他列为空
|
||||||
stdDevRow["试样1"] = stdDev;
|
for (int i = 1; i <= 5; i++)
|
||||||
|
{
|
||||||
|
maxRow2[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
for (int i = 7; i <= count; i++)
|
||||||
|
{
|
||||||
|
maxRow2[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
sampleDataTable.Rows.Add(maxRow2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 11. 标准偏差行(试样1-5)
|
||||||
|
DataRow stdDevRow1 = sampleDataTable.NewRow();
|
||||||
|
stdDevRow1["序号"] = "标准偏差试样1-5";
|
||||||
|
|
||||||
|
// 计算试样1-5的标准偏差
|
||||||
|
if (group1Count > 1)
|
||||||
|
{
|
||||||
|
double stdDev1 = CalculateStandardDeviation(absorptions.Take(group1Count).ToArray());
|
||||||
|
stdDevRow1["试样1"] = stdDev1;
|
||||||
|
}
|
||||||
|
|
||||||
// 其他列为空
|
// 其他列为空
|
||||||
for (int i = 2; i <= count; i++)
|
for (int i = 2; i <= count; i++)
|
||||||
{
|
{
|
||||||
stdDevRow[$"试样{i}"] = DBNull.Value;
|
stdDevRow1[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
sampleDataTable.Rows.Add(stdDevRow1);
|
||||||
|
|
||||||
|
// 12. 标准偏差行(试样6-10)- 仅当试样数量>5时添加
|
||||||
|
if (count > 5)
|
||||||
|
{
|
||||||
|
DataRow stdDevRow2 = sampleDataTable.NewRow();
|
||||||
|
stdDevRow2["序号"] = "标准偏差试样6-10";
|
||||||
|
|
||||||
|
// 计算试样6-10的标准偏差
|
||||||
|
int group2Count = Math.Min(5, count - 5);
|
||||||
|
if (group2Count > 1)
|
||||||
|
{
|
||||||
|
double stdDev2 = CalculateStandardDeviation(absorptions.Skip(5).Take(group2Count).ToArray());
|
||||||
|
stdDevRow2["试样6"] = stdDev2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他列为空
|
||||||
|
for (int i = 1; i <= 5; i++)
|
||||||
|
{
|
||||||
|
stdDevRow2[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
for (int i = 7; i <= count; i++)
|
||||||
|
{
|
||||||
|
stdDevRow2[$"试样{i}"] = DBNull.Value;
|
||||||
|
}
|
||||||
|
sampleDataTable.Rows.Add(stdDevRow2);
|
||||||
}
|
}
|
||||||
sampleDataTable.Rows.Add(stdDevRow);
|
|
||||||
|
|
||||||
// 刷新界面
|
// 刷新界面
|
||||||
RefreshDataGridView();
|
RefreshDataGridView();
|
||||||
@@ -668,33 +758,94 @@ namespace WindowsFormsApp6
|
|||||||
|
|
||||||
foreach (DataRow dataRow in sampleDataTable.Rows)
|
foreach (DataRow dataRow in sampleDataTable.Rows)
|
||||||
{
|
{
|
||||||
IRow row = sheet.CreateRow(rowIndex++);
|
|
||||||
string rowName = dataRow["序号"].ToString();
|
string rowName = dataRow["序号"].ToString();
|
||||||
|
|
||||||
// 序号列
|
// 处理试样1-5分组行的合并单元格
|
||||||
ICell nameCell = row.CreateCell(0);
|
if (rowName == "液体吸收量平均值(%)试样1-5" ||
|
||||||
nameCell.SetCellValue(rowName);
|
rowName == "液体吸收量最大值(%)试样1-5" ||
|
||||||
nameCell.CellStyle = dataStyle;
|
rowName == "标准偏差试样1-5")
|
||||||
|
|
||||||
// 数据列
|
|
||||||
for (int i = 1; i <= currentSampleCount; i++)
|
|
||||||
{
|
{
|
||||||
ICell cell = row.CreateCell(i);
|
IRow row = sheet.CreateRow(rowIndex++);
|
||||||
var value = dataRow[$"试样{i}"];
|
|
||||||
|
|
||||||
|
// 序号列
|
||||||
|
ICell nameCell = row.CreateCell(0);
|
||||||
|
nameCell.SetCellValue(rowName);
|
||||||
|
nameCell.CellStyle = dataStyle;
|
||||||
|
|
||||||
|
// 获取试样1的值
|
||||||
|
var value = dataRow["试样1"];
|
||||||
if (value != null && value != DBNull.Value)
|
if (value != null && value != DBNull.Value)
|
||||||
{
|
{
|
||||||
if (double.TryParse(value.ToString(), out double numValue))
|
ICell cell = row.CreateCell(1);
|
||||||
|
cell.SetCellValue(Convert.ToDouble(value));
|
||||||
|
cell.CellStyle = yellowStyle;
|
||||||
|
|
||||||
|
// 合并试样1-5列
|
||||||
|
int group1Count = Math.Min(5, currentSampleCount);
|
||||||
|
if (group1Count > 1)
|
||||||
{
|
{
|
||||||
cell.SetCellValue(numValue);
|
sheet.AddMergedRegion(new CellRangeAddress(rowIndex - 1, rowIndex - 1, 1, group1Count));
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cell.SetCellValue(value.ToString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
// 处理试样6-10分组行的合并单元格
|
||||||
|
else if (rowName == "液体吸收量平均值(%)试样6-10" ||
|
||||||
|
rowName == "液体吸收量最大值(%)试样6-10" ||
|
||||||
|
rowName == "标准偏差试样6-10")
|
||||||
|
{
|
||||||
|
IRow row = sheet.CreateRow(rowIndex++);
|
||||||
|
|
||||||
cell.CellStyle = yellowStyle;
|
// 序号列
|
||||||
|
ICell nameCell = row.CreateCell(0);
|
||||||
|
nameCell.SetCellValue(rowName);
|
||||||
|
nameCell.CellStyle = dataStyle;
|
||||||
|
|
||||||
|
// 获取试样6的值
|
||||||
|
var value = dataRow["试样6"];
|
||||||
|
if (value != null && value != DBNull.Value)
|
||||||
|
{
|
||||||
|
ICell cell = row.CreateCell(6);
|
||||||
|
cell.SetCellValue(Convert.ToDouble(value));
|
||||||
|
cell.CellStyle = yellowStyle;
|
||||||
|
|
||||||
|
// 合并试样6-10列
|
||||||
|
int group2Count = Math.Min(5, currentSampleCount - 5);
|
||||||
|
if (group2Count > 1)
|
||||||
|
{
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(rowIndex - 1, rowIndex - 1, 6, 5 + group2Count));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 普通行处理
|
||||||
|
IRow row = sheet.CreateRow(rowIndex++);
|
||||||
|
|
||||||
|
// 序号列
|
||||||
|
ICell nameCell = row.CreateCell(0);
|
||||||
|
nameCell.SetCellValue(rowName);
|
||||||
|
nameCell.CellStyle = dataStyle;
|
||||||
|
|
||||||
|
// 数据列
|
||||||
|
for (int i = 1; i <= currentSampleCount; i++)
|
||||||
|
{
|
||||||
|
ICell cell = row.CreateCell(i);
|
||||||
|
var value = dataRow[$"试样{i}"];
|
||||||
|
|
||||||
|
if (value != null && value != DBNull.Value)
|
||||||
|
{
|
||||||
|
if (double.TryParse(value.ToString(), out double numValue))
|
||||||
|
{
|
||||||
|
cell.SetCellValue(numValue);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cell.SetCellValue(value.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cell.CellStyle = yellowStyle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user