hx
This commit is contained in:
@@ -172,9 +172,9 @@ namespace WindowsFormsApp6
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
IWorkbook workbook = new XSSFWorkbook();
|
IWorkbook workbook = new XSSFWorkbook();
|
||||||
CreateForm1Sheet(workbook);
|
|
||||||
CreateForm2Sheet(workbook);
|
// 创建单个整合的工作表
|
||||||
CreateForm3Sheet(workbook);
|
CreateIntegratedSheet(workbook);
|
||||||
|
|
||||||
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
|
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
|
||||||
{
|
{
|
||||||
@@ -189,277 +189,62 @@ namespace WindowsFormsApp6
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
private void CreateIntegratedSheet(IWorkbook workbook)
|
||||||
{
|
{
|
||||||
clockTimer?.Stop();
|
ISheet sheet = workbook.CreateSheet("吸收性测试报告");
|
||||||
clockTimer?.Dispose();
|
|
||||||
Application.Exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CreateForm1Sheet(IWorkbook workbook)
|
|
||||||
{
|
|
||||||
ISheet sheet = workbook.CreateSheet("液体吸收时间");
|
|
||||||
var styles = CreateReportStyles(workbook);
|
var styles = CreateReportStyles(workbook);
|
||||||
|
|
||||||
// 获取 Form1 的数据
|
// 获取三个表单的数据
|
||||||
var sampleCountField = form1Instance.GetType()
|
var sampleCountField1 = form1Instance.GetType()
|
||||||
.GetField("currentSampleCount", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
.GetField("currentSampleCount", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||||
int sampleCount = sampleCountField != null ? (int)sampleCountField.GetValue(form1Instance) : 5;
|
int sampleCount = sampleCountField1 != null ? (int)sampleCountField1.GetValue(form1Instance) : 5;
|
||||||
|
|
||||||
var dataTableField = form1Instance.GetType()
|
var dataTableField1 = form1Instance.GetType()
|
||||||
.GetField("sampleDataTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
.GetField("sampleDataTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||||
DataTable dataTable = dataTableField?.GetValue(form1Instance) as DataTable;
|
DataTable dataTable1 = dataTableField1?.GetValue(form1Instance) as DataTable;
|
||||||
|
|
||||||
if (dataTable == null || dataTable.Rows.Count == 0)
|
var dataTableField2 = form2Instance.GetType()
|
||||||
{
|
.GetField("sampleDataTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||||
// 创建空表格
|
DataTable dataTable2 = dataTableField2?.GetValue(form2Instance) as DataTable;
|
||||||
CreateEmptySheet(sheet, "液体吸收时间", sampleCount, styles);
|
|
||||||
return;
|
var dataTableField3 = form3Instance.GetType()
|
||||||
}
|
.GetField("sampleDataTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||||
|
DataTable dataTable3 = dataTableField3?.GetValue(form3Instance) as DataTable;
|
||||||
|
|
||||||
int currentRow = 0;
|
int currentRow = 0;
|
||||||
|
|
||||||
// 创建标题行
|
// 1. 创建总标题
|
||||||
IRow titleRow = sheet.CreateRow(currentRow++);
|
IRow titleRow = sheet.CreateRow(currentRow++);
|
||||||
|
titleRow.Height = 800;
|
||||||
ICell titleCell = titleRow.CreateCell(0);
|
ICell titleCell = titleRow.CreateCell(0);
|
||||||
titleCell.SetCellValue("液体吸收时间");
|
titleCell.SetCellValue("吸收性测试报告");
|
||||||
titleCell.CellStyle = styles.titleStyle;
|
titleCell.CellStyle = styles.titleStyle;
|
||||||
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, sampleCount));
|
// 为合并区域的所有单元格设置样式(总标题不需要边框,但为了一致性也设置)
|
||||||
titleRow.Height = 600;
|
for (int i = 1; i <= sampleCount + 5; i++)
|
||||||
|
{
|
||||||
|
titleRow.CreateCell(i).CellStyle = styles.titleStyle;
|
||||||
|
}
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, sampleCount + 5));
|
||||||
|
|
||||||
currentRow++; // 空行
|
currentRow++; // 空行
|
||||||
|
|
||||||
// 创建表头
|
// 2. 创建信息输入区域
|
||||||
IRow headerRow = sheet.CreateRow(currentRow++);
|
CreateInfoSection(sheet, ref currentRow, sampleCount, styles);
|
||||||
headerRow.Height = 400;
|
|
||||||
ICell seqCell = headerRow.CreateCell(0);
|
|
||||||
seqCell.SetCellValue("序号");
|
|
||||||
seqCell.CellStyle = styles.headerStyle;
|
|
||||||
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
ICell cell = headerRow.CreateCell(i);
|
|
||||||
cell.SetCellValue($"试样{i}");
|
|
||||||
cell.CellStyle = styles.headerStyle;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 填充数据行
|
|
||||||
foreach (DataRow dataRow in dataTable.Rows)
|
|
||||||
{
|
|
||||||
string rowName = dataRow["序号"]?.ToString() ?? "";
|
|
||||||
if (string.IsNullOrEmpty(rowName)) continue;
|
|
||||||
|
|
||||||
IRow row = sheet.CreateRow(currentRow++);
|
|
||||||
row.Height = 380;
|
|
||||||
|
|
||||||
ICell nameCell = row.CreateCell(0);
|
|
||||||
nameCell.SetCellValue(rowName);
|
|
||||||
nameCell.CellStyle = styles.dataStyle;
|
|
||||||
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
ICell cell = row.CreateCell(i);
|
|
||||||
if (dataTable.Columns.Contains($"试样{i}") && dataRow[$"试样{i}"] != DBNull.Value)
|
|
||||||
{
|
|
||||||
if (double.TryParse(dataRow[$"试样{i}"].ToString(), out double value))
|
|
||||||
{
|
|
||||||
cell.SetCellValue(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cell.CellStyle = styles.yellowStyle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置列宽
|
|
||||||
sheet.SetColumnWidth(0, 20 * 256);
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
sheet.SetColumnWidth(i, 15 * 256);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CreateForm2Sheet(IWorkbook workbook)
|
|
||||||
{
|
|
||||||
ISheet sheet = workbook.CreateSheet("液体吸收量");
|
|
||||||
var styles = CreateReportStyles(workbook);
|
|
||||||
|
|
||||||
// 获取 Form2 的数据
|
|
||||||
var sampleCountField = form2Instance.GetType()
|
|
||||||
.GetField("currentSampleCount", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
|
||||||
int sampleCount = sampleCountField != null ? (int)sampleCountField.GetValue(form2Instance) : 5;
|
|
||||||
|
|
||||||
var dataTableField = form2Instance.GetType()
|
|
||||||
.GetField("sampleDataTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
|
||||||
DataTable dataTable = dataTableField?.GetValue(form2Instance) as DataTable;
|
|
||||||
|
|
||||||
if (dataTable == null || dataTable.Rows.Count == 0)
|
|
||||||
{
|
|
||||||
CreateEmptySheet(sheet, "液体吸收量", sampleCount, styles);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int currentRow = 0;
|
|
||||||
|
|
||||||
// 创建标题行
|
|
||||||
IRow titleRow = sheet.CreateRow(currentRow++);
|
|
||||||
ICell titleCell = titleRow.CreateCell(0);
|
|
||||||
titleCell.SetCellValue("液体吸收量");
|
|
||||||
titleCell.CellStyle = styles.titleStyle;
|
|
||||||
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, sampleCount));
|
|
||||||
titleRow.Height = 600;
|
|
||||||
|
|
||||||
currentRow++; // 空行
|
currentRow++; // 空行
|
||||||
|
|
||||||
// 创建表头
|
// 3. 创建液体吸收时间部分
|
||||||
IRow headerRow = sheet.CreateRow(currentRow++);
|
CreateForm1Section(sheet, ref currentRow, sampleCount, dataTable1, styles);
|
||||||
headerRow.Height = 400;
|
|
||||||
ICell seqCell = headerRow.CreateCell(0);
|
|
||||||
seqCell.SetCellValue("序号");
|
|
||||||
seqCell.CellStyle = styles.headerStyle;
|
|
||||||
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
ICell cell = headerRow.CreateCell(i);
|
|
||||||
cell.SetCellValue($"试样{i}");
|
|
||||||
cell.CellStyle = styles.headerStyle;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 填充数据行
|
|
||||||
foreach (DataRow dataRow in dataTable.Rows)
|
|
||||||
{
|
|
||||||
string rowName = dataRow["序号"]?.ToString() ?? "";
|
|
||||||
if (string.IsNullOrEmpty(rowName)) continue;
|
|
||||||
|
|
||||||
IRow row = sheet.CreateRow(currentRow++);
|
|
||||||
row.Height = 380;
|
|
||||||
|
|
||||||
ICell nameCell = row.CreateCell(0);
|
|
||||||
nameCell.SetCellValue(rowName);
|
|
||||||
nameCell.CellStyle = styles.dataStyle;
|
|
||||||
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
ICell cell = row.CreateCell(i);
|
|
||||||
if (dataTable.Columns.Contains($"试样{i}") && dataRow[$"试样{i}"] != DBNull.Value)
|
|
||||||
{
|
|
||||||
object value = dataRow[$"试样{i}"];
|
|
||||||
if (value != null && double.TryParse(value.ToString(), out double numValue))
|
|
||||||
{
|
|
||||||
cell.SetCellValue(numValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cell.CellStyle = styles.yellowStyle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置列宽
|
|
||||||
sheet.SetColumnWidth(0, 25 * 256);
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
sheet.SetColumnWidth(i, 18 * 256);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CreateForm3Sheet(IWorkbook workbook)
|
|
||||||
{
|
|
||||||
ISheet sheet = workbook.CreateSheet("液体芯吸速率");
|
|
||||||
var styles = CreateReportStyles(workbook);
|
|
||||||
|
|
||||||
// 获取 Form3 的数据
|
|
||||||
var sampleCountField = form3Instance.GetType()
|
|
||||||
.GetField("currentSampleCount", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
|
||||||
int sampleCount = sampleCountField != null ? (int)sampleCountField.GetValue(form3Instance) : 5;
|
|
||||||
|
|
||||||
var dataTableField = form3Instance.GetType()
|
|
||||||
.GetField("sampleDataTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
|
||||||
DataTable dataTable = dataTableField?.GetValue(form3Instance) as DataTable;
|
|
||||||
|
|
||||||
if (dataTable == null || dataTable.Rows.Count == 0)
|
|
||||||
{
|
|
||||||
CreateEmptySheet(sheet, "液体芯吸速率", sampleCount, styles);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int currentRow = 0;
|
|
||||||
|
|
||||||
// 创建标题行
|
|
||||||
IRow titleRow = sheet.CreateRow(currentRow++);
|
|
||||||
ICell titleCell = titleRow.CreateCell(0);
|
|
||||||
titleCell.SetCellValue("液体芯吸速率");
|
|
||||||
titleCell.CellStyle = styles.titleStyle;
|
|
||||||
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, sampleCount * 3));
|
|
||||||
titleRow.Height = 600;
|
|
||||||
|
|
||||||
currentRow++; // 空行
|
currentRow++; // 空行
|
||||||
|
|
||||||
// 创建第一级表头(试样1-N)
|
// 4. 创建液体吸收量部分
|
||||||
IRow headerRow1 = sheet.CreateRow(currentRow++);
|
CreateForm2Section(sheet, ref currentRow, sampleCount, dataTable2, styles);
|
||||||
headerRow1.Height = 400;
|
|
||||||
|
|
||||||
ICell cell0 = headerRow1.CreateCell(0);
|
|
||||||
cell0.SetCellValue("序号");
|
|
||||||
cell0.CellStyle = styles.headerStyle;
|
|
||||||
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow, 0, 0));
|
|
||||||
|
|
||||||
int colIndex = 1;
|
currentRow++; // 空行
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
ICell cell = headerRow1.CreateCell(colIndex);
|
|
||||||
cell.SetCellValue($"试样{i}");
|
|
||||||
cell.CellStyle = styles.headerStyle;
|
|
||||||
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow - 1, colIndex, colIndex + 2));
|
|
||||||
colIndex += 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建第二级表头(1、2、3)
|
// 5. 创建液体芯吸速率部分
|
||||||
IRow headerRow2 = sheet.CreateRow(currentRow++);
|
CreateForm3Section(sheet, ref currentRow, sampleCount, dataTable3, styles);
|
||||||
headerRow2.Height = 400;
|
|
||||||
|
|
||||||
colIndex = 1;
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
for (int j = 1; j <= 3; j++)
|
|
||||||
{
|
|
||||||
ICell cell = headerRow2.CreateCell(colIndex++);
|
|
||||||
cell.SetCellValue(j.ToString());
|
|
||||||
cell.CellStyle = styles.headerStyle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 填充数据行
|
|
||||||
foreach (DataRow dataRow in dataTable.Rows)
|
|
||||||
{
|
|
||||||
string rowName = dataRow["序号"]?.ToString() ?? "";
|
|
||||||
if (string.IsNullOrEmpty(rowName)) continue;
|
|
||||||
|
|
||||||
IRow row = sheet.CreateRow(currentRow++);
|
|
||||||
row.Height = 380;
|
|
||||||
|
|
||||||
ICell nameCell = row.CreateCell(0);
|
|
||||||
nameCell.SetCellValue(rowName);
|
|
||||||
nameCell.CellStyle = styles.dataStyle;
|
|
||||||
|
|
||||||
colIndex = 1;
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
|
||||||
{
|
|
||||||
for (int j = 1; j <= 3; j++)
|
|
||||||
{
|
|
||||||
ICell cell = row.CreateCell(colIndex++);
|
|
||||||
string columnName = $"试样{i}_{j}";
|
|
||||||
if (dataTable.Columns.Contains(columnName) && dataRow[columnName] != DBNull.Value)
|
|
||||||
{
|
|
||||||
if (double.TryParse(dataRow[columnName].ToString(), out double value))
|
|
||||||
{
|
|
||||||
if (Math.Abs(value) >= 0.001)
|
|
||||||
{
|
|
||||||
cell.SetCellValue(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cell.CellStyle = styles.yellowStyle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置列宽
|
// 设置列宽
|
||||||
sheet.SetColumnWidth(0, 20 * 256);
|
sheet.SetColumnWidth(0, 20 * 256);
|
||||||
@@ -469,19 +254,120 @@ namespace WindowsFormsApp6
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateEmptySheet(ISheet sheet, string title, int sampleCount,
|
private void CreateInfoSection(ISheet sheet, ref int currentRow, int sampleCount,
|
||||||
(ICellStyle titleStyle, ICellStyle headerStyle, ICellStyle dataStyle, ICellStyle yellowStyle) styles)
|
(ICellStyle titleStyle, ICellStyle headerStyle, ICellStyle dataStyle, ICellStyle yellowStyle) styles)
|
||||||
{
|
{
|
||||||
// 创建标题行
|
// 第一行信息
|
||||||
IRow titleRow = sheet.CreateRow(0);
|
IRow infoRow1 = sheet.CreateRow(currentRow++);
|
||||||
ICell titleCell = titleRow.CreateCell(0);
|
infoRow1.Height = 400;
|
||||||
titleCell.SetCellValue(title);
|
|
||||||
titleCell.CellStyle = styles.titleStyle;
|
|
||||||
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, sampleCount));
|
|
||||||
titleRow.Height = 600;
|
|
||||||
|
|
||||||
// 创建表头
|
// 样品名称
|
||||||
IRow headerRow = sheet.CreateRow(2);
|
ICell cell1 = infoRow1.CreateCell(0);
|
||||||
|
cell1.SetCellValue("样品名称:");
|
||||||
|
cell1.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
ICell cell2 = infoRow1.CreateCell(1);
|
||||||
|
cell2.SetCellValue("手动录入");
|
||||||
|
cell2.CellStyle = styles.yellowStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
infoRow1.CreateCell(2).CellStyle = styles.yellowStyle;
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow - 1, 1, 2));
|
||||||
|
|
||||||
|
// 物料编码
|
||||||
|
ICell cell3 = infoRow1.CreateCell(3);
|
||||||
|
cell3.SetCellValue("物料编码:");
|
||||||
|
cell3.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
ICell cell4 = infoRow1.CreateCell(4);
|
||||||
|
cell4.SetCellValue("手动录入");
|
||||||
|
cell4.CellStyle = styles.yellowStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
infoRow1.CreateCell(5).CellStyle = styles.yellowStyle;
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow - 1, 4, 5));
|
||||||
|
|
||||||
|
// 批号
|
||||||
|
ICell cell5 = infoRow1.CreateCell(6);
|
||||||
|
cell5.SetCellValue("批号:");
|
||||||
|
cell5.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
ICell cell6 = infoRow1.CreateCell(7);
|
||||||
|
cell6.SetCellValue("手动录入");
|
||||||
|
cell6.CellStyle = styles.yellowStyle;
|
||||||
|
|
||||||
|
// 操作人员
|
||||||
|
ICell cell7 = infoRow1.CreateCell(8);
|
||||||
|
cell7.SetCellValue("操作人员:");
|
||||||
|
cell7.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
ICell cell8 = infoRow1.CreateCell(9);
|
||||||
|
cell8.SetCellValue("手动录入");
|
||||||
|
cell8.CellStyle = styles.yellowStyle;
|
||||||
|
|
||||||
|
// 第二行信息
|
||||||
|
IRow infoRow2 = sheet.CreateRow(currentRow++);
|
||||||
|
infoRow2.Height = 400;
|
||||||
|
|
||||||
|
// 测试时间
|
||||||
|
ICell cell21 = infoRow2.CreateCell(0);
|
||||||
|
cell21.SetCellValue("测试时间:");
|
||||||
|
cell21.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
ICell cell22 = infoRow2.CreateCell(1);
|
||||||
|
cell22.SetCellValue("系统检测时间");
|
||||||
|
cell22.CellStyle = styles.yellowStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
infoRow2.CreateCell(2).CellStyle = styles.yellowStyle;
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow - 1, 1, 2));
|
||||||
|
|
||||||
|
// 仪器
|
||||||
|
ICell cell23 = infoRow2.CreateCell(3);
|
||||||
|
cell23.SetCellValue("仪器:");
|
||||||
|
cell23.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
ICell cell24 = infoRow2.CreateCell(4);
|
||||||
|
cell24.SetCellValue("厂家仪器名称");
|
||||||
|
cell24.CellStyle = styles.yellowStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
infoRow2.CreateCell(5).CellStyle = styles.yellowStyle;
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow - 1, 4, 5));
|
||||||
|
|
||||||
|
// 设备编号
|
||||||
|
ICell cell25 = infoRow2.CreateCell(6);
|
||||||
|
cell25.SetCellValue("设备编号:");
|
||||||
|
cell25.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
ICell cell26 = infoRow2.CreateCell(7);
|
||||||
|
cell26.SetCellValue("手动录入");
|
||||||
|
cell26.CellStyle = styles.yellowStyle;
|
||||||
|
|
||||||
|
// 数据文件
|
||||||
|
ICell cell27 = infoRow2.CreateCell(8);
|
||||||
|
cell27.SetCellValue("数据文件:");
|
||||||
|
cell27.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
ICell cell28 = infoRow2.CreateCell(9);
|
||||||
|
cell28.SetCellValue("(报告保存路径)");
|
||||||
|
cell28.CellStyle = styles.yellowStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateForm1Section(ISheet sheet, ref int currentRow, int sampleCount, DataTable dataTable,
|
||||||
|
(ICellStyle titleStyle, ICellStyle headerStyle, ICellStyle dataStyle, ICellStyle yellowStyle) styles)
|
||||||
|
{
|
||||||
|
// 子标题
|
||||||
|
IRow subtitleRow = sheet.CreateRow(currentRow++);
|
||||||
|
subtitleRow.Height = 500;
|
||||||
|
ICell subtitleCell = subtitleRow.CreateCell(0);
|
||||||
|
subtitleCell.SetCellValue("液体吸收时间");
|
||||||
|
subtitleCell.CellStyle = styles.headerStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
for (int i = 1; i <= sampleCount; i++)
|
||||||
|
{
|
||||||
|
subtitleRow.CreateCell(i).CellStyle = styles.headerStyle;
|
||||||
|
}
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow - 1, 0, sampleCount));
|
||||||
|
|
||||||
|
// 表头
|
||||||
|
IRow headerRow = sheet.CreateRow(currentRow++);
|
||||||
headerRow.Height = 400;
|
headerRow.Height = 400;
|
||||||
ICell seqCell = headerRow.CreateCell(0);
|
ICell seqCell = headerRow.CreateCell(0);
|
||||||
seqCell.SetCellValue("序号");
|
seqCell.SetCellValue("序号");
|
||||||
@@ -494,12 +380,346 @@ namespace WindowsFormsApp6
|
|||||||
cell.CellStyle = styles.headerStyle;
|
cell.CellStyle = styles.headerStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置列宽
|
ICell noteCell = headerRow.CreateCell(sampleCount + 1);
|
||||||
sheet.SetColumnWidth(0, 20 * 256);
|
noteCell.SetCellValue("根据样品个数进行选填");
|
||||||
|
noteCell.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
// 数据行
|
||||||
|
if (dataTable != null && dataTable.Rows.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (DataRow dataRow in dataTable.Rows)
|
||||||
|
{
|
||||||
|
string rowName = dataRow["序号"]?.ToString() ?? "";
|
||||||
|
if (string.IsNullOrEmpty(rowName)) continue;
|
||||||
|
|
||||||
|
IRow row = sheet.CreateRow(currentRow++);
|
||||||
|
row.Height = 380;
|
||||||
|
|
||||||
|
ICell nameCell = row.CreateCell(0);
|
||||||
|
nameCell.SetCellValue(rowName);
|
||||||
|
nameCell.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
for (int i = 1; i <= sampleCount; i++)
|
||||||
|
{
|
||||||
|
ICell cell = row.CreateCell(i);
|
||||||
|
if (dataTable.Columns.Contains($"试样{i}") && dataRow[$"试样{i}"] != DBNull.Value)
|
||||||
|
{
|
||||||
|
if (double.TryParse(dataRow[$"试样{i}"].ToString(), out double value))
|
||||||
|
{
|
||||||
|
cell.SetCellValue(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cell.SetCellValue("系统读数");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cell.SetCellValue("系统读数");
|
||||||
|
}
|
||||||
|
cell.CellStyle = styles.yellowStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是平均时间行,添加"系统计算"
|
||||||
|
if (rowName.Contains("平均"))
|
||||||
|
{
|
||||||
|
ICell calcCell = row.CreateCell(sampleCount + 1);
|
||||||
|
calcCell.SetCellValue("系统计算");
|
||||||
|
calcCell.CellStyle = styles.yellowStyle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateForm2Section(ISheet sheet, ref int currentRow, int sampleCount, DataTable dataTable,
|
||||||
|
(ICellStyle titleStyle, ICellStyle headerStyle, ICellStyle dataStyle, ICellStyle yellowStyle) styles)
|
||||||
|
{
|
||||||
|
// 子标题
|
||||||
|
IRow subtitleRow = sheet.CreateRow(currentRow++);
|
||||||
|
subtitleRow.Height = 500;
|
||||||
|
ICell subtitleCell = subtitleRow.CreateCell(0);
|
||||||
|
subtitleCell.SetCellValue("液体吸收量");
|
||||||
|
subtitleCell.CellStyle = styles.headerStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
for (int i = 1; i <= sampleCount + 3; i++)
|
||||||
|
{
|
||||||
|
subtitleRow.CreateCell(i).CellStyle = styles.headerStyle;
|
||||||
|
}
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow - 1, 0, sampleCount + 3));
|
||||||
|
|
||||||
|
// 第一行表头(浸润时间、系统读数等)
|
||||||
|
IRow headerRow1 = sheet.CreateRow(currentRow);
|
||||||
|
headerRow1.Height = 400;
|
||||||
|
ICell seqCell1 = headerRow1.CreateCell(0);
|
||||||
|
seqCell1.SetCellValue("序号");
|
||||||
|
seqCell1.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
ICell timeCell = headerRow1.CreateCell(1);
|
||||||
|
timeCell.SetCellValue("浸润时间");
|
||||||
|
timeCell.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
ICell readCell = headerRow1.CreateCell(2);
|
||||||
|
readCell.SetCellValue("系统读数");
|
||||||
|
readCell.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
ICell hangCell = headerRow1.CreateCell(3);
|
||||||
|
hangCell.SetCellValue("悬挂时间");
|
||||||
|
hangCell.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
ICell readCell2 = headerRow1.CreateCell(4);
|
||||||
|
readCell2.SetCellValue("系统读数");
|
||||||
|
readCell2.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
ICell speedCell = headerRow1.CreateCell(5);
|
||||||
|
speedCell.SetCellValue("运行速度");
|
||||||
|
speedCell.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
ICell readCell3 = headerRow1.CreateCell(6);
|
||||||
|
readCell3.SetCellValue("系统读数");
|
||||||
|
readCell3.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
ICell noteCell1 = headerRow1.CreateCell(sampleCount + 1);
|
||||||
|
noteCell1.SetCellValue("根据样品个数进行选填");
|
||||||
|
noteCell1.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
currentRow++;
|
||||||
|
|
||||||
|
// 第二行表头(试样1-5)
|
||||||
|
IRow headerRow2 = sheet.CreateRow(currentRow++);
|
||||||
|
headerRow2.Height = 400;
|
||||||
|
|
||||||
|
// 序号列在第二行也需要创建并设置样式(用于合并)
|
||||||
|
headerRow2.CreateCell(0).CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
for (int i = 1; i <= sampleCount; i++)
|
for (int i = 1; i <= sampleCount; i++)
|
||||||
{
|
{
|
||||||
sheet.SetColumnWidth(i, 15 * 256);
|
ICell cell = headerRow2.CreateCell(i);
|
||||||
|
cell.SetCellValue($"试样{i}");
|
||||||
|
cell.CellStyle = styles.headerStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 合并序号列(跨两行)
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 2, currentRow - 1, 0, 0));
|
||||||
|
|
||||||
|
// 数据行
|
||||||
|
if (dataTable != null && dataTable.Rows.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (DataRow dataRow in dataTable.Rows)
|
||||||
|
{
|
||||||
|
string rowName = dataRow["序号"]?.ToString() ?? "";
|
||||||
|
if (string.IsNullOrEmpty(rowName)) continue;
|
||||||
|
|
||||||
|
IRow row = sheet.CreateRow(currentRow++);
|
||||||
|
row.Height = 380;
|
||||||
|
|
||||||
|
ICell nameCell = row.CreateCell(0);
|
||||||
|
nameCell.SetCellValue(rowName);
|
||||||
|
nameCell.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
for (int i = 1; i <= sampleCount; i++)
|
||||||
|
{
|
||||||
|
ICell cell = row.CreateCell(i);
|
||||||
|
if (dataTable.Columns.Contains($"试样{i}") && dataRow[$"试样{i}"] != DBNull.Value)
|
||||||
|
{
|
||||||
|
object value = dataRow[$"试样{i}"];
|
||||||
|
if (value != null && double.TryParse(value.ToString(), out double numValue))
|
||||||
|
{
|
||||||
|
cell.SetCellValue(numValue);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cell.SetCellValue("系统读数");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cell.SetCellValue("系统读数");
|
||||||
|
}
|
||||||
|
cell.CellStyle = styles.yellowStyle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加平均值和最大值行的说明
|
||||||
|
if (dataTable != null && dataTable.Rows.Count > 0)
|
||||||
|
{
|
||||||
|
// 查找平均值行
|
||||||
|
for (int i = 0; i < dataTable.Rows.Count; i++)
|
||||||
|
{
|
||||||
|
string rowName = dataTable.Rows[i]["序号"]?.ToString() ?? "";
|
||||||
|
if (rowName.Contains("平均"))
|
||||||
|
{
|
||||||
|
int avgRowIndex = currentRow - (dataTable.Rows.Count - i);
|
||||||
|
IRow avgExcelRow = sheet.GetRow(avgRowIndex);
|
||||||
|
if (avgExcelRow != null)
|
||||||
|
{
|
||||||
|
ICell calcCell = avgExcelRow.CreateCell(sampleCount + 1);
|
||||||
|
calcCell.SetCellValue("系统根据多少组试样,计算多少组的标准偏差");
|
||||||
|
calcCell.CellStyle = styles.yellowStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
avgExcelRow.CreateCell(sampleCount + 2).CellStyle = styles.yellowStyle;
|
||||||
|
avgExcelRow.CreateCell(sampleCount + 3).CellStyle = styles.yellowStyle;
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(avgRowIndex, avgRowIndex, sampleCount + 1, sampleCount + 3));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找最大值行
|
||||||
|
for (int i = 0; i < dataTable.Rows.Count; i++)
|
||||||
|
{
|
||||||
|
string rowName = dataTable.Rows[i]["序号"]?.ToString() ?? "";
|
||||||
|
if (rowName.Contains("最大"))
|
||||||
|
{
|
||||||
|
int maxRowIndex = currentRow - (dataTable.Rows.Count - i);
|
||||||
|
IRow maxExcelRow = sheet.GetRow(maxRowIndex);
|
||||||
|
if (maxExcelRow != null)
|
||||||
|
{
|
||||||
|
ICell calcCell = maxExcelRow.CreateCell(sampleCount + 1);
|
||||||
|
calcCell.SetCellValue("系统计算");
|
||||||
|
calcCell.CellStyle = styles.yellowStyle;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateForm3Section(ISheet sheet, ref int currentRow, int sampleCount, DataTable dataTable,
|
||||||
|
(ICellStyle titleStyle, ICellStyle headerStyle, ICellStyle dataStyle, ICellStyle yellowStyle) styles)
|
||||||
|
{
|
||||||
|
// 子标题
|
||||||
|
IRow subtitleRow = sheet.CreateRow(currentRow++);
|
||||||
|
subtitleRow.Height = 500;
|
||||||
|
ICell subtitleCell = subtitleRow.CreateCell(0);
|
||||||
|
subtitleCell.SetCellValue("液体芯吸速率");
|
||||||
|
subtitleCell.CellStyle = styles.headerStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
for (int i = 1; i <= sampleCount * 3; i++)
|
||||||
|
{
|
||||||
|
subtitleRow.CreateCell(i).CellStyle = styles.headerStyle;
|
||||||
|
}
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow - 1, 0, sampleCount * 3));
|
||||||
|
|
||||||
|
// 第一行表头(纵向/横向)
|
||||||
|
IRow headerRow1 = sheet.CreateRow(currentRow);
|
||||||
|
headerRow1.Height = 400;
|
||||||
|
ICell seqCell1 = headerRow1.CreateCell(0);
|
||||||
|
seqCell1.SetCellValue("序号");
|
||||||
|
seqCell1.CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
ICell dirCell = headerRow1.CreateCell(1);
|
||||||
|
dirCell.SetCellValue("纵向/横向(选择按钮)");
|
||||||
|
dirCell.CellStyle = styles.headerStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
for (int i = 2; i <= sampleCount * 3; i++)
|
||||||
|
{
|
||||||
|
headerRow1.CreateCell(i).CellStyle = styles.headerStyle;
|
||||||
|
}
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow, currentRow, 1, sampleCount * 3));
|
||||||
|
|
||||||
|
currentRow++;
|
||||||
|
|
||||||
|
// 第二行表头(试样1-N,每个3列)
|
||||||
|
IRow headerRow2 = sheet.CreateRow(currentRow);
|
||||||
|
headerRow2.Height = 400;
|
||||||
|
|
||||||
|
// 序号列在第二行也需要创建并设置样式(用于合并)
|
||||||
|
headerRow2.CreateCell(0).CellStyle = styles.headerStyle;
|
||||||
|
|
||||||
|
int colIndex = 1;
|
||||||
|
for (int i = 1; i <= sampleCount; i++)
|
||||||
|
{
|
||||||
|
ICell cell = headerRow2.CreateCell(colIndex);
|
||||||
|
cell.SetCellValue($"试样{i}");
|
||||||
|
cell.CellStyle = styles.headerStyle;
|
||||||
|
// 为合并区域的所有单元格设置样式
|
||||||
|
headerRow2.CreateCell(colIndex + 1).CellStyle = styles.headerStyle;
|
||||||
|
headerRow2.CreateCell(colIndex + 2).CellStyle = styles.headerStyle;
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow, currentRow, colIndex, colIndex + 2));
|
||||||
|
colIndex += 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 合并序号列(跨两行)
|
||||||
|
sheet.AddMergedRegion(new CellRangeAddress(currentRow - 1, currentRow, 0, 0));
|
||||||
|
|
||||||
|
currentRow++;
|
||||||
|
|
||||||
|
// 第三行表头(1、2、3)
|
||||||
|
IRow headerRow3 = sheet.CreateRow(currentRow++);
|
||||||
|
headerRow3.Height = 400;
|
||||||
|
|
||||||
|
colIndex = 1;
|
||||||
|
for (int i = 1; i <= sampleCount; i++)
|
||||||
|
{
|
||||||
|
for (int j = 1; j <= 3; j++)
|
||||||
|
{
|
||||||
|
ICell cell = headerRow3.CreateCell(colIndex++);
|
||||||
|
cell.SetCellValue(j.ToString());
|
||||||
|
cell.CellStyle = styles.headerStyle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数据行
|
||||||
|
if (dataTable != null && dataTable.Rows.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (DataRow dataRow in dataTable.Rows)
|
||||||
|
{
|
||||||
|
string rowName = dataRow["序号"]?.ToString() ?? "";
|
||||||
|
if (string.IsNullOrEmpty(rowName)) continue;
|
||||||
|
|
||||||
|
IRow row = sheet.CreateRow(currentRow++);
|
||||||
|
row.Height = 380;
|
||||||
|
|
||||||
|
ICell nameCell = row.CreateCell(0);
|
||||||
|
nameCell.SetCellValue(rowName);
|
||||||
|
nameCell.CellStyle = styles.dataStyle;
|
||||||
|
|
||||||
|
colIndex = 1;
|
||||||
|
for (int i = 1; i <= sampleCount; i++)
|
||||||
|
{
|
||||||
|
for (int j = 1; j <= 3; j++)
|
||||||
|
{
|
||||||
|
ICell cell = row.CreateCell(colIndex++);
|
||||||
|
string columnName = $"试样{i}_{j}";
|
||||||
|
|
||||||
|
if (dataTable.Columns.Contains(columnName) && dataRow[columnName] != DBNull.Value)
|
||||||
|
{
|
||||||
|
if (double.TryParse(dataRow[columnName].ToString(), out double value))
|
||||||
|
{
|
||||||
|
if (Math.Abs(value) >= 0.001)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 所有空数据都显示为空白
|
||||||
|
cell.SetCellValue("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 所有空数据都显示为空白
|
||||||
|
cell.SetCellValue("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 所有空数据都显示为空白
|
||||||
|
cell.SetCellValue("");
|
||||||
|
}
|
||||||
|
cell.CellStyle = styles.yellowStyle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
clockTimer?.Stop();
|
||||||
|
clockTimer?.Dispose();
|
||||||
|
Application.Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private (ICellStyle titleStyle, ICellStyle headerStyle, ICellStyle dataStyle, ICellStyle yellowStyle)
|
private (ICellStyle titleStyle, ICellStyle headerStyle, ICellStyle dataStyle, ICellStyle yellowStyle)
|
||||||
|
|||||||
Reference in New Issue
Block a user