using MeterVision.db;
using MeterVision.Dlg;
using OfficeOpenXml;
using System;
using System.Collections.Generic;
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 Microsoft.Win32;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace MeterVision.Stand
{
///
/// AppendFromExcel.xaml 的交互逻辑
///
public partial class AppendFromExcel : Window
{
//新增的TStand
//public TStand mTStand { get; set; }
public List mStandDetailList;
public AppendFromExcel()
{
InitializeComponent();
}
private void BtnImportExcel_Click(object sender, RoutedEventArgs e)
{
// 打开文件选择对话框
var openFileDialog = new OpenFileDialog
{
//Filter = "Excel Files (*.xls;*.xlsx)|*.xls;*.xlsx",
Filter = "Excel Files (*.xlsx)|*.xlsx",
Title = "选择Excel文件"
};
if (openFileDialog.ShowDialog() == true)
{
// 显示选择的文件名
txtExcelFile.Text = openFileDialog.FileName;
/*if (string.IsNullOrWhiteSpace(txtStandName.Text.Trim()))
{
txtStandName.Text = ThisApp.GetFileNameWithoutExtension(txtExcelFile.Text.Trim());
}*/
}
}
private async void BtnOK_Click(object sender, RoutedEventArgs e)
{
string filePath = txtExcelFile.Text.Trim();
if (string.IsNullOrWhiteSpace(filePath))
{
MessageBox.Show(Application.Current.MainWindow, "请选择Excel文件!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
bool blLoad = await LoadTStandDetailList(filePath);
this.DialogResult = true;
this.Close();
}
//加载列表数据
private async Task LoadTStandDetailList(string fileName)
{
string titleInfo = "正在获取数据,请稍候...";
WaitImportDlg waitWindow = new WaitImportDlg(titleInfo)
{
Owner = this,
WindowStartupLocation = WindowStartupLocation.CenterOwner
};
waitWindow.Show();
try
{
await Task.Run(() =>
{
//ImportExcel(mTStand.StandFile, waitWindow);
ImportExcel(fileName, waitWindow);
});
// 如果mStandDetailList不为空,则表示导入成功
return mStandDetailList != null && mStandDetailList.Count > 0;
}
catch (Exception ex)
{
MessageBox.Show(this, $"获取Excel数据失败:{ex.Message}", "错误",
MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
finally
{
waitWindow.Close();
}
}
public void ImportExcel(string filePath, WaitImportDlg importDlg)
{
mStandDetailList = new List();
Console.WriteLine($"正在读取文件: {filePath}");
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
Console.WriteLine($"工作表数量: {package.Workbook.Worksheets.Count}");
//检查是否存在工作表
if (package.Workbook.Worksheets.Count == 0)
{
throw new InvalidOperationException("Excel文件中没有工作表。");
}
// 获取第一个工作表
var worksheet = package.Workbook.Worksheets[1];
// 获取总行数
int rowCount = worksheet.Dimension?.Rows ?? 0;
Console.WriteLine($"行数: {rowCount}");
importDlg.PrgCount = rowCount;
// 遍历每一行
for (int row = 2; row <= rowCount; row++) // 假设第一行是标题行
{
importDlg.PrgIndex = row;
//判断图像是否符合要求的规格
string srcImage = worksheet.Cells[row, 1].Text.Trim();
//为了导入excel表格中的内容,先暂时不判断文件是否满足要求
/*if (!ThisApp.IsImageDimensionsValid(srcImage))
{
continue;
}*/
var standDetail = new TStandDetail
{
StandDetailId = Guid.NewGuid().ToString(),
CreateTime = ThisApp.GetNowTime_yyyyMMddHHmmss(),
//StandId = mTStand.StandId,
// 读取图像路径(假设图像路径在A列)
SrcImage = worksheet.Cells[row, 1].Text.Trim(),
// 读取标准答案(假设标准答案在B列)
StandValue = worksheet.Cells[row, 2].Text.Trim(),
DeviceSn = worksheet.Cells[row, 3].Text.Trim(),
StationId = worksheet.Cells[row, 4].Text.Trim(),
SampleTime = worksheet.Cells[row, 5].Text.Trim(),
ENumCount = ThisApp.ConvertToInt(worksheet.Cells[row, 6].Text.Trim()),
ELastUnit = ThisApp.ConvertToInt(worksheet.Cells[row, 7].Text.Trim())
};
// 添加到结果列表
mStandDetailList.Add(standDetail);
}
}
}
private void BtnClose_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
//---------------------------------------------------------------------------
}
}