using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Models.Models; using SamplePre.ProcessBll.SampleSequence; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using OfficeOpenXml; namespace SamplePreSystem.UI.ViewModel.QueryManager { public partial class SampleQueryViewModel : ObservableObject { public event PropertyChangedEventHandler PropertyChanged; SampleSequenceBll sampleSequenceBll = new SampleSequenceBll(); public SampleQueryViewModel() { GetData(); } private DateTime _startDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00"); public DateTime StartDate { get { return _startDate; } set { SetProperty(ref _startDate, value); } } private DateTime _endDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00"); public DateTime EndDate { get { return _endDate; } set { SetProperty(ref _endDate, value); } } private List _sampleList = new List(); public List SampleList { get { return _sampleList; } set { SetProperty(ref _sampleList, value); } } protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } [RelayCommand] public void GetData() { DateTime dt1 = DateTime.Parse(StartDate.ToString("yyyy-MM-dd") + " 00:00:00"); DateTime dt2 = DateTime.Parse(EndDate.ToString("yyyy-MM-dd") + " 23:00:00"); SampleList = sampleSequenceBll.GetTubeData(dt1, dt2); } [RelayCommand] public void ExportExcel() { if (SampleList == null || SampleList.Count == 0) { MessageBox.Show("没有数据可导出", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } try { // 设置EPPlus许可证为个人使用 ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial; // 创建保存文件对话框 Microsoft.Win32.SaveFileDialog saveFileDialog = new Microsoft.Win32.SaveFileDialog(); saveFileDialog.Filter = "Excel文件 (*.xlsx)|*.xlsx"; saveFileDialog.FileName = "样品查询导出_" + DateTime.Now.ToString("yyyyMMddHHmmss"); if (saveFileDialog.ShowDialog() == true) { string filePath = saveFileDialog.FileName; // 创建Excel包 using (ExcelPackage package = new ExcelPackage()) { // 创建工作表 ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("样品数据"); // 设置表头 worksheet.Cells[1, 1].Value = "二维码"; worksheet.Cells[1, 2].Value = "样品名称"; worksheet.Cells[1, 3].Value = "标准ID"; worksheet.Cells[1, 4].Value = "标准名称"; worksheet.Cells[1, 5].Value = "录入人员"; worksheet.Cells[1, 6].Value = "录入日期"; worksheet.Cells[1, 7].Value = "批号"; // 设置表头样式 using (var range = worksheet.Cells["A1:G1"]) { range.Style.Font.Bold = true; range.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; range.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray); range.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center; } // 填充数据 for (int i = 0; i < SampleList.Count; i++) { var sample = SampleList[i]; worksheet.Cells[i + 2, 1].Value = sample.qrcode; worksheet.Cells[i + 2, 2].Value = sample.item_name; worksheet.Cells[i + 2, 3].Value = sample.standrad_id; worksheet.Cells[i + 2, 4].Value = sample.standrad; worksheet.Cells[i + 2, 5].Value = sample.input_user; worksheet.Cells[i + 2, 6].Value = sample.input_date; worksheet.Cells[i + 2, 7].Value = sample.bach_no; } // 自动调整列宽 worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns(); // 保存文件 FileInfo file = new FileInfo(filePath); package.SaveAs(file); MessageBox.Show("导出成功!", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } } } catch (Exception ex) { MessageBox.Show("导出失败:" + ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error); } } } }