Files
NoBuilding/建材不燃性试验炉/TestReportWindow.xaml.cs
2026-02-03 16:12:03 +08:00

820 lines
37 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using ClosedXML.Excel;
using jiancaiburanxing.data;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using ;
using Path = System.IO.Path;
namespace jiancaiburanxing
{
/// <summary>
/// TestReportWindow.xaml 的交互逻辑
/// </summary>
public partial class TestReportWindow : Window
{
private ObservableCollection<TestReportData> _testData;
private ICollectionView _testDataView;
#region
public TestReportWindow()
{
InitializeComponent();
InitializeDataGrid();
LoadTestData();
}
#endregion
private void InitializeDataGrid()
{
_testData = new ObservableCollection<TestReportData>();
_testDataView = CollectionViewSource.GetDefaultView(_testData);
dgTestReport.ItemsSource = _testDataView;
// 设置按钮事件
btnClearData.Click += BtnClearData_Click;
btnExportReport.Click += BtnExportReport_Click;
btnReturn.Click += btnReturn_Click;
}
// 加载试验数据
private void LoadTestData()
{
try
{
LoadDataFromTempFile();
//LoadTempDataFromFile();
//AddSampleData();
}
catch (Exception ex)
{
MessageBox.Show($"加载数据失败: {ex.Message}", "错误",
MessageBoxButton.OK, MessageBoxImage.Error);
}
}
// 在类中添加这些辅助方法
private double ParseDouble(string value)
{
if (string.IsNullOrWhiteSpace(value))
return 0;
// 移除可能的中文单位字符
value = value.Replace("℃", "").Replace("°C", "").Replace("g", "").Replace("%", "").Trim();
if (double.TryParse(value, out double result))
return result;
return 0;
}
private int ParseInt(string value)
{
if (string.IsNullOrWhiteSpace(value))
return 0;
// 移除非数字字符
value = new string(value.Where(char.IsDigit).ToArray());
if (int.TryParse(value, out int result))
return result;
return 0;
}
private List<TestReportData> LoadDataFromTempFile()
{
var reportDataList = new List<TestReportData>();
try
{
string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TempReportData.txt");
if (!File.Exists(filePath))
{
return reportDataList;
}
var lines = File.ReadAllLines(filePath, Encoding.UTF8);
// 跳过表头(第一行)
for (int i = 1; i < lines.Length; i++)
{
if (string.IsNullOrWhiteSpace(lines[i]))
continue;
var fields = lines[i].Split('|');
if (fields.Length >= 19) // 确保有足够的字段
{
var data = new TestReportData
{
SampleCode = fields[0],
SampleName = fields[1],
SampleSpec = fields[2],
InitialTemp = ParseDouble(fields[3]),
MaxTemp = ParseDouble(fields[4]),
FinalTemp = ParseDouble(fields[5]),
TempRise = ParseDouble(fields[6]),
CenterMaxTemp = ParseDouble(fields[7]),
CenterFinalTemp = ParseDouble(fields[8]),
SurfaceMaxTemp = ParseDouble(fields[9]),
SurfaceFinalTemp = ParseDouble(fields[10]),
InitialWeight = ParseDouble(fields[11]),
FinalWeight = ParseDouble(fields[12]),
LossPercent = ParseDouble(fields[13]),
FlameDuration = ParseInt(fields[14]),
TestDate = fields[15],
TestDuration = fields[16],
BalanceStatus = fields[17],
Remarks = fields.Length > 18 ? fields[18] : ""
};
reportDataList.Add(data);
}
}
}
catch (Exception ex)
{
Debug.WriteLine($"读取临时数据失败: {ex.Message}");
}
return reportDataList;
}
// 可选:从临时文件加载数据
//private void LoadTempDataFromFile()
//{
// try
// {
// string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TempReportData.txt");
// if (!File.Exists(filePath)) return;
// var lines = File.ReadAllLines(filePath, Encoding.UTF8);
// foreach (var line in lines)
// {
// var parts = line.Split('|');
// if (parts.Length >= 14)
// {
// var reportData = new TestReportData
// {
// SampleCode = parts[0],
// SampleName = parts[1],
// SampleSpec = parts[2],
// InitialTemp = double.Parse(parts[3]),
// MaxTemp = double.Parse(parts[4]),
// FinalTemp = double.Parse(parts[5]),
// TempRise = double.Parse(parts[6]),
// InitialWeight = double.Parse(parts[7]),
// FinalWeight = double.Parse(parts[8]),
// LossPercent = double.Parse(parts[9]),
// FlameDuration = int.Parse(parts[10]),
// TestDate = parts[11],
// TestDuration = parts[12],
// BalanceStatus = parts[13],
// Remarks = parts.Length > 14 ? parts[14] : ""
// };
// _testData.Add(reportData);
// }
// }
// Debug.WriteLine($"从临时文件加载了 {_testData.Count} 条数据");
// }
// catch (Exception ex)
// {
// Debug.WriteLine($"加载临时数据失败: {ex.Message}");
// }
//}
//// 添加示例数据
//private void AddSampleData()
//{
// _testData.Add(new TestReportData
// {
// SampleCode = "TEST001",
// SampleName = "岩棉板",
// SampleSpec = "50mm",
// InitialTemp = 750.0,
// MaxTemp = 877.8,
// FinalTemp = 802.3,
// TempRise = 75.5,
// CenterMaxTemp = 850.0,
// CenterFinalTemp = 800.0,
// SurfaceMaxTemp = 900.0,
// SurfaceFinalTemp = 820.0,
// InitialWeight = 45.32,
// FinalWeight = 44.78,
// LossPercent = 1.19,
// FlameDuration = 0,
// TestDate = DateTime.Now.ToString("yyyy-MM-dd"),
// TestDuration = "30:00",
// BalanceStatus = "达到平衡",
// Remarks = "符合标准GB/T 5464-2010"
// });
//}
// 导出报表
private void BtnExportReport_Click(object sender, RoutedEventArgs e)
{
try
{
var saveDialog = new Microsoft.Win32.SaveFileDialog
{
Filter = "Excel文件 (*.xlsx)|*.xlsx|CSV文件 (*.csv)|*.csv|所有文件 (*.*)|*.*",
FileName = $"不燃性试验报告_{DateTime.Now:yyyyMMdd_HHmmss}",
DefaultExt = ".xlsx"
};
if (saveDialog.ShowDialog() == true)
{
ExportToExcel(saveDialog.FileName);
MessageBox.Show($"报表已导出到:\n{saveDialog.FileName}", "导出成功",
MessageBoxButton.OK, MessageBoxImage.Information);
}
}
catch (Exception ex)
{
MessageBox.Show($"导出失败: {ex.Message}", "错误",
MessageBoxButton.OK, MessageBoxImage.Error);
}
}
// 导出到Excel简化版本
//private void ExportToExcel(string filePath)
//{
// using (var writer = new StreamWriter(filePath, false, Encoding.UTF8))
// {
// // 写入标题
// writer.WriteLine("建材不燃性试验数据报表");
// writer.WriteLine($"生成时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
// writer.WriteLine("符合标准: GB/T 5464-2010");
// writer.WriteLine();
// // 写入表头
// writer.WriteLine("试样编号,试样名称,试样规格,炉内初始温度(℃),炉内最高温度(℃),炉内最终温度(℃),温升(℃)," +
// "试样中心最高温度(℃),试样中心最终温度(℃),试样表面最高温度(℃),试样表面最终温度(℃)," +
// "试样初始质量(g),试样结束质量(g),质量损失(%),火焰持续时间(s),试验日期,试验持续时间,平衡状态,备注");
// // 写入数据
// foreach (var item in _testData)
// {
// writer.WriteLine($"{item.SampleCode},{item.SampleName},{item.SampleSpec}," +
// $"{item.InitialTemp:F1},{item.MaxTemp:F1},{item.FinalTemp:F1},{item.TempRise:F1}," +
// $"{item.CenterMaxTemp:F1},{item.CenterFinalTemp:F1},{item.SurfaceMaxTemp:F1},{item.SurfaceFinalTemp:F1}," +
// $"{item.InitialWeight:F2},{item.FinalWeight:F2},{item.LossPercent:F2}," +
// $"{item.FlameDuration},{item.TestDate},{item.TestDuration},{item.BalanceStatus},{item.Remarks}");
// }
// }
//}
// 添加新的试验数据(由主窗口调用)
//private void ExportToExcel(string filePath)
//{
// using (var workbook = new XLWorkbook())
// {
// // 创建一个工作表
// var worksheet = workbook.Worksheets.Add("不燃性试验报告");
// // 设置整体样式
// worksheet.Style.Font.FontName = "微软雅黑";
// worksheet.Style.Font.FontSize = 10;
// // 1. 标题行
// var titleRow1 = worksheet.Cell(1, 1);
// titleRow1.Value = "建材不燃性试验数据报表";
// titleRow1.Style.Font.FontSize = 16;
// titleRow1.Style.Font.Bold = true;
// titleRow1.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// titleRow1.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// worksheet.Range(1, 1, 1, 19).Merge(); // 合并单元格19列增加4个温度字段
// var titleRow2 = worksheet.Cell(2, 1);
// titleRow2.Value = $"生成时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
// titleRow2.Style.Font.FontSize = 11;
// titleRow2.Style.Font.Italic = true;
// worksheet.Range(2, 1, 2, 19).Merge();
// var titleRow3 = worksheet.Cell(3, 1);
// titleRow3.Value = "符合标准: GB/T 5464-2010";
// titleRow3.Style.Font.FontSize = 11;
// worksheet.Range(3, 1, 3, 19).Merge();
// // 空行
// worksheet.Row(4).Height = 10;
// // 2. 表头共19列
// var headers = new string[]
// {
// "试样编号", "试样名称", "试样规格",
// "炉内初始温度(℃)", "炉内最高温度(℃)", "炉内最终温度(℃)", "温升(℃)",
// "试样中心最高温(℃)", "试样中心最终温(℃)", // 新增字段
// "试样表面最高温(℃)", "试样表面最终温(℃)", // 新增字段
// "试样初始质量(g)", "试样结束质量(g)", "质量损失(%)",
// "火焰持续时间(s)", "试验日期", "试验持续时间", "平衡状态", "备注"
// };
// int rowIndex = 5;
// for (int i = 0; i < headers.Length; i++)
// {
// var cell = worksheet.Cell(rowIndex, i + 1);
// cell.Value = headers[i];
// cell.Style.Font.Bold = true;
// cell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// cell.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// cell.Style.Fill.BackgroundColor = XLColor.LightGray;
// cell.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
// cell.Style.Border.OutsideBorderColor = XLColor.Black;
// // 设置列宽(根据内容调整)
// switch (i)
// {
// case 0: worksheet.Column(i + 1).Width = 12; break; // 试样编号
// case 1: worksheet.Column(i + 1).Width = 15; break; // 试样名称
// case 2: worksheet.Column(i + 1).Width = 10; break; // 试样规格
// case 3: worksheet.Column(i + 1).Width = 15; break; // 炉内初始温度
// case 4: worksheet.Column(i + 1).Width = 15; break; // 炉内最高温度
// case 5: worksheet.Column(i + 1).Width = 15; break; // 炉内最终温度
// case 6: worksheet.Column(i + 1).Width = 12; break; // 温升
// case 7: worksheet.Column(i + 1).Width = 15; break; // 试样中心最高温度
// case 8: worksheet.Column(i + 1).Width = 15; break; // 试样中心最终温度
// case 9: worksheet.Column(i + 1).Width = 15; break; // 试样表面最高温度
// case 10: worksheet.Column(i + 1).Width = 15; break; // 试样表面最终温度
// case 11: worksheet.Column(i + 1).Width = 15; break; // 试样初始质量
// case 12: worksheet.Column(i + 1).Width = 15; break; // 试样结束质量
// case 13: worksheet.Column(i + 1).Width = 12; break; // 质量损失
// case 14: worksheet.Column(i + 1).Width = 15; break; // 火焰持续时间
// case 15: worksheet.Column(i + 1).Width = 12; break; // 试验日期
// case 16: worksheet.Column(i + 1).Width = 12; break; // 试验持续时间
// case 17: worksheet.Column(i + 1).Width = 12; break; // 平衡状态
// case 18: worksheet.Column(i + 1).Width = 20; break; // 备注
// }
// }
// // 3. 数据行
// rowIndex++;
// foreach (var item in _testData)
// {
// worksheet.Cell(rowIndex, 1).Value = item.SampleCode;
// worksheet.Cell(rowIndex, 2).Value = item.SampleName;
// worksheet.Cell(rowIndex, 3).Value = item.SampleSpec;
// worksheet.Cell(rowIndex, 4).Value = item.InitialTemp;
// worksheet.Cell(rowIndex, 5).Value = item.MaxTemp;
// worksheet.Cell(rowIndex, 6).Value = item.FinalTemp;
// worksheet.Cell(rowIndex, 7).Value = item.TempRise;
// // 新增的4个温度字段
// worksheet.Cell(rowIndex, 8).Value = item.CenterMaxTemp;
// worksheet.Cell(rowIndex, 9).Value = item.CenterFinalTemp;
// worksheet.Cell(rowIndex, 10).Value = item.SurfaceMaxTemp;
// worksheet.Cell(rowIndex, 11).Value = item.SurfaceFinalTemp;
// worksheet.Cell(rowIndex, 12).Value = item.InitialWeight;
// worksheet.Cell(rowIndex, 13).Value = item.FinalWeight;
// worksheet.Cell(rowIndex, 14).Value = item.LossPercent;
// worksheet.Cell(rowIndex, 15).Value = item.FlameDuration;
// worksheet.Cell(rowIndex, 16).Value = item.TestDate;
// worksheet.Cell(rowIndex, 17).Value = item.TestDuration;
// worksheet.Cell(rowIndex, 18).Value = item.BalanceStatus;
// worksheet.Cell(rowIndex, 19).Value = item.Remarks;
// // 设置数据行样式
// for (int col = 1; col <= 19; col++)
// {
// var cell = worksheet.Cell(rowIndex, col);
// cell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// cell.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// cell.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
// cell.Style.Border.OutsideBorderColor = XLColor.Gray;
// // 数值格式(温度和质量列保留一位小数)
// if ((col >= 4 && col <= 11) || col == 14) // 所有温度列 + 质量损失
// {
// cell.Style.NumberFormat.Format = "0.0";
// }
// else if (col == 12 || col == 13) // 质量列
// {
// cell.Style.NumberFormat.Format = "0.00";
// }
// }
// // 隔行变色
// if (rowIndex % 2 == 0)
// {
// worksheet.Range(rowIndex, 1, rowIndex, 19).Style
// .Fill.BackgroundColor = XLColor.White;
// }
// else
// {
// worksheet.Range(rowIndex, 1, rowIndex, 19).Style
// .Fill.BackgroundColor = XLColor.LightSkyBlue;
// }
// rowIndex++;
// }
// // 4. 自动调整行高
// worksheet.Rows(5, rowIndex - 1).AdjustToContents();
// // 5. 添加边框
// var dataRange = worksheet.Range(5, 1, rowIndex - 1, 19);
// dataRange.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
// dataRange.Style.Border.InsideBorderColor = XLColor.Gray;
// dataRange.Style.Border.OutsideBorder = XLBorderStyleValues.Medium;
// dataRange.Style.Border.OutsideBorderColor = XLColor.Black;
// // 6. 添加分组标识(可选)
// // 温度相关列设置不同背景色
// //var tempHeaderRange = worksheet.Range(5, 4, 5, 11);
// //tempHeaderRange.Style.Fill.BackgroundColor = XLColor.LightGreen;
// //var weightHeaderRange = worksheet.Range(5, 12, 5, 14);
// //weightHeaderRange.Style.Fill.BackgroundColor = XLColor.LightYellow;
// // 7. 添加页脚
// //var footerRow = worksheet.Cell(rowIndex + 2, 1);
// //footerRow.Value = "备注:本报表自动生成,数据仅供参考";
// //footerRow.Style.Font.FontSize = 9;
// //footerRow.Style.Font.FontColor = XLColor.Gray;
// //footerRow.Style.Font.Italic = true;
// //worksheet.Range(rowIndex + 2, 1, rowIndex + 2, 19).Merge();
// // 8. 保存文件
// workbook.SaveAs(filePath);
// }
//}
private void ExportToExcel(string filePath)
{
try
{
// 从临时文件加载数据
var dataList = LoadDataFromTempFile();
if (dataList.Count == 0)
{
MessageBox.Show("没有可导出的数据", "导出提示",
MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
using (var workbook = new XLWorkbook())
{
// 创建一个工作表
var worksheet = workbook.Worksheets.Add("不燃性试验报告");
// 设置整体样式
worksheet.Style.Font.FontName = "微软雅黑";
worksheet.Style.Font.FontSize = 10;
// 1. 标题行
var titleRow1 = worksheet.Cell(1, 1);
titleRow1.Value = "建材不燃性试验数据报表";
titleRow1.Style.Font.FontSize = 16;
titleRow1.Style.Font.Bold = true;
titleRow1.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
titleRow1.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
worksheet.Range(1, 1, 1, 19).Merge(); // 合并单元格19列
var titleRow2 = worksheet.Cell(2, 1);
titleRow2.Value = $"生成时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
titleRow2.Style.Font.FontSize = 11;
titleRow2.Style.Font.Italic = true;
worksheet.Range(2, 1, 2, 19).Merge();
var titleRow3 = worksheet.Cell(3, 1);
titleRow3.Value = "符合标准: GB/T 5464-2010";
titleRow3.Style.Font.FontSize = 11;
worksheet.Range(3, 1, 3, 19).Merge();
// 空行
worksheet.Row(4).Height = 10;
// 2. 表头共19列
var headers = new string[]
{
"试样编号", "试样名称", "试样规格",
"炉内初始温度(℃)", "炉内最高温度(℃)", "炉内最终温度(℃)", "温升(℃)",
"试样中心最高温度(℃)", "试样中心最终温度(℃)", // 新增字段
"试样表面最高温度(℃)", "试样表面最终温度(℃)", // 新增字段
"试样初始质量(g)", "试样结束质量(g)", "质量损失(%)",
"火焰持续时间(s)", "试验日期", "试验持续时间", "平衡状态", "备注"
};
int rowIndex = 5;
for (int i = 0; i < headers.Length; i++)
{
var cell = worksheet.Cell(rowIndex, i + 1);
cell.Value = headers[i];
cell.Style.Font.Bold = true;
cell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
cell.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
cell.Style.Fill.BackgroundColor = XLColor.LightGray;
cell.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
cell.Style.Border.OutsideBorderColor = XLColor.Black;
// 设置列宽(根据内容调整)
switch (i)
{
case 0: worksheet.Column(i + 1).Width = 12; break; // 试样编号
case 1: worksheet.Column(i + 1).Width = 15; break; // 试样名称
case 2: worksheet.Column(i + 1).Width = 10; break; // 试样规格
case 3: worksheet.Column(i + 1).Width = 15; break; // 炉内初始温度
case 4: worksheet.Column(i + 1).Width = 15; break; // 炉内最高温度
case 5: worksheet.Column(i + 1).Width = 15; break; // 炉内最终温度
case 6: worksheet.Column(i + 1).Width = 12; break; // 温升
case 7: worksheet.Column(i + 1).Width = 15; break; // 试样中心最高温度
case 8: worksheet.Column(i + 1).Width = 15; break; // 试样中心最终温度
case 9: worksheet.Column(i + 1).Width = 15; break; // 试样表面最高温度
case 10: worksheet.Column(i + 1).Width = 15; break; // 试样表面最终温度
case 11: worksheet.Column(i + 1).Width = 15; break; // 试样初始质量
case 12: worksheet.Column(i + 1).Width = 15; break; // 试样结束质量
case 13: worksheet.Column(i + 1).Width = 12; break; // 质量损失
case 14: worksheet.Column(i + 1).Width = 15; break; // 火焰持续时间
case 15: worksheet.Column(i + 1).Width = 12; break; // 试验日期
case 16: worksheet.Column(i + 1).Width = 12; break; // 试验持续时间
case 17: worksheet.Column(i + 1).Width = 12; break; // 平衡状态
case 18: worksheet.Column(i + 1).Width = 20; break; // 备注
}
}
// 3. 数据行
rowIndex++;
foreach (var item in dataList)
{
worksheet.Cell(rowIndex, 1).Value = item.SampleCode ?? "";
worksheet.Cell(rowIndex, 2).Value = item.SampleName ?? "";
worksheet.Cell(rowIndex, 3).Value = item.SampleSpec ?? "";
worksheet.Cell(rowIndex, 4).Value = item.InitialTemp;
worksheet.Cell(rowIndex, 5).Value = item.MaxTemp;
worksheet.Cell(rowIndex, 6).Value = item.FinalTemp;
worksheet.Cell(rowIndex, 7).Value = item.TempRise;
// 新增的4个温度字段
worksheet.Cell(rowIndex, 8).Value = item.CenterMaxTemp;
worksheet.Cell(rowIndex, 9).Value = item.CenterFinalTemp;
worksheet.Cell(rowIndex, 10).Value = item.SurfaceMaxTemp;
worksheet.Cell(rowIndex, 11).Value = item.SurfaceFinalTemp;
worksheet.Cell(rowIndex, 12).Value = item.InitialWeight;
worksheet.Cell(rowIndex, 13).Value = item.FinalWeight;
worksheet.Cell(rowIndex, 14).Value = item.LossPercent;
worksheet.Cell(rowIndex, 15).Value = item.FlameDuration;
worksheet.Cell(rowIndex, 16).Value = item.TestDate ?? "";
worksheet.Cell(rowIndex, 17).Value = item.TestDuration ?? "";
worksheet.Cell(rowIndex, 18).Value = item.BalanceStatus ?? "";
worksheet.Cell(rowIndex, 19).Value = item.Remarks ?? "";
// 设置数据行样式
for (int col = 1; col <= 19; col++)
{
var cell = worksheet.Cell(rowIndex, col);
cell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
cell.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
cell.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
cell.Style.Border.OutsideBorderColor = XLColor.Gray;
// 数值格式(温度和质量列保留一位小数)
if ((col >= 4 && col <= 11) || col == 14) // 所有温度列 + 质量损失
{
cell.Style.NumberFormat.Format = "0.0";
}
else if (col == 12 || col == 13) // 质量列
{
cell.Style.NumberFormat.Format = "0.00";
}
}
// 隔行变色
if (rowIndex % 2 == 0)
{
worksheet.Range(rowIndex, 1, rowIndex, 19).Style
.Fill.BackgroundColor = XLColor.White;
}
else
{
worksheet.Range(rowIndex, 1, rowIndex, 19).Style
.Fill.BackgroundColor = XLColor.FromArgb(240, 248, 255); // 淡蓝色
}
rowIndex++;
}
// 4. 自动调整行高
worksheet.Rows(5, rowIndex - 1).AdjustToContents();
// 5. 添加边框
var dataRange = worksheet.Range(5, 1, rowIndex - 1, 19);
dataRange.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
dataRange.Style.Border.InsideBorderColor = XLColor.Gray;
dataRange.Style.Border.OutsideBorder = XLBorderStyleValues.Medium;
dataRange.Style.Border.OutsideBorderColor = XLColor.Black;
// 6. 添加分组标识(可选)
// 温度相关列设置不同背景色
var tempHeaderRange = worksheet.Range(5, 4, 5, 11);
tempHeaderRange.Style.Fill.BackgroundColor = XLColor.LightGreen;
var weightHeaderRange = worksheet.Range(5, 12, 5, 14);
weightHeaderRange.Style.Fill.BackgroundColor = XLColor.LightYellow;
var otherHeaderRange = worksheet.Range(5, 15, 5, 19);
otherHeaderRange.Style.Fill.BackgroundColor = XLColor.LightSteelBlue;
// 7. 添加统计行(可选)
//rowIndex += 2;
//var statRow = worksheet.Row(rowIndex);
//worksheet.Cell(rowIndex, 1).Value = "统计";
//worksheet.Cell(rowIndex, 1).Style.Font.Bold = true;
//worksheet.Cell(rowIndex, 1).Style.Fill.BackgroundColor = XLColor.LightGray;
//worksheet.Range(rowIndex, 1, rowIndex, 3).Merge();
//// 平均初始温度
//worksheet.Cell(rowIndex, 4).Value = dataList.Average(d => d.InitialTemp);
//worksheet.Cell(rowIndex, 4).Style.NumberFormat.Format = "0.0";
//worksheet.Cell(rowIndex, 4).Style.Fill.BackgroundColor = XLColor.LightGreen;
//// 平均最高温度
//worksheet.Cell(rowIndex, 5).Value = dataList.Average(d => d.MaxTemp);
//worksheet.Cell(rowIndex, 5).Style.NumberFormat.Format = "0.0";
//worksheet.Cell(rowIndex, 5).Style.Fill.BackgroundColor = XLColor.LightGreen;
//// 平均最终温度
//worksheet.Cell(rowIndex, 6).Value = dataList.Average(d => d.FinalTemp);
//worksheet.Cell(rowIndex, 6).Style.NumberFormat.Format = "0.0";
//worksheet.Cell(rowIndex, 6).Style.Fill.BackgroundColor = XLColor.LightGreen;
//// 平均温升
//worksheet.Cell(rowIndex, 7).Value = dataList.Average(d => d.TempRise);
//worksheet.Cell(rowIndex, 7).Style.NumberFormat.Format = "0.0";
//worksheet.Cell(rowIndex, 7).Style.Fill.BackgroundColor = XLColor.LightGreen;
//// 其他统计信息
//worksheet.Cell(rowIndex, 14).Value = dataList.Average(d => d.LossPercent);
//worksheet.Cell(rowIndex, 14).Style.NumberFormat.Format = "0.0";
//worksheet.Cell(rowIndex, 14).Style.Fill.BackgroundColor = XLColor.LightYellow;
//// 8. 添加页脚
//rowIndex += 2;
//var footerRow = worksheet.Cell(rowIndex, 1);
//footerRow.Value = "备注:本报表自动生成,数据仅供参考";
//footerRow.Style.Font.FontSize = 9;
//footerRow.Style.Font.FontColor = XLColor.Gray;
//footerRow.Style.Font.Italic = true;
//worksheet.Range(rowIndex, 1, rowIndex, 19).Merge();
//// 9. 添加筛选
//worksheet.Range(5, 1, 5, 19).SetAutoFilter();
//// 10. 冻结表头
//worksheet.SheetView.FreezeRows(5);
// 11. 保存文件
workbook.SaveAs(filePath);
Debug.WriteLine($"Excel文件已保存: {filePath}");
// 显示成功消息
Dispatcher.Invoke(() =>
{
MessageBox.Show($"数据已成功导出到:\n{filePath}\n\n共导出 {dataList.Count} 条记录",
"导出成功", MessageBoxButton.OK, MessageBoxImage.Information);
});
}
}
catch (Exception ex)
{
Debug.WriteLine($"导出Excel失败: {ex.Message}");
Dispatcher.Invoke(() =>
{
MessageBox.Show($"导出Excel文件失败:\n{ex.Message}",
"导出错误", MessageBoxButton.OK, MessageBoxImage.Error);
});
}
}
public void AddTestReportData(TestReportData data)
{
Dispatcher.Invoke(() =>
{
_testData.Insert(0, data); // 插入到开头
});
}
// 清空数据
private void BtnClearData_Click(object sender, RoutedEventArgs e)
{
var result = MessageBox.Show("确定要清空所有报表数据吗?此操作不可恢复。",
"确认清空", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.Yes)
{
_testData.Clear();
DeleteJsonDataFile();
MessageBox.Show("数据已清空", "提示",
MessageBoxButton.OK, MessageBoxImage.Information);
}
}
// 删除JSON数据文件
private void DeleteJsonDataFile()
{
try
{
// 假设你的JSON文件路径根据你的实际情况调整
string jsonFilePath = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"TestReportData.json");
// 如果文件存在,就删除
if (File.Exists(jsonFilePath))
{
File.Delete(jsonFilePath);
Debug.WriteLine($"JSON数据文件已删除: {jsonFilePath}");
}
else
{
Debug.WriteLine($"JSON数据文件不存在: {jsonFilePath}");
}
string tempFilePath = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"TempReportData.txt");
if (File.Exists(tempFilePath))
{
File.Delete(tempFilePath);
Debug.WriteLine($"临时数据文件已删除: {tempFilePath}");
}
}
catch (Exception ex)
{
// 记录错误但不影响主流程
Debug.WriteLine($"删除JSON数据文件失败: {ex.Message}");
}
}
#region
private MainWindow _mainWindow;
//返回
private void btnReturn_Click(object sender, RoutedEventArgs e)
{
SwitchWindow(ref _mainWindow, () => new MainWindow());
}
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
{
if (windowInstance == null)
{
windowInstance = createFunc();
// 添加窗口关闭事件处理
windowInstance.Closed += (s, args) =>
{
this.Show();
this.Activate();
};
}
else
{
windowInstance.Activate();
return;
}
this.Hide();
windowInstance.Show();
}
#endregion
}
}