From 4f1f1a7259dca2ad9e4bf664e0b3b4fb9c887cd8 Mon Sep 17 00:00:00 2001 From: YONGYE Date: Mon, 13 Oct 2025 11:13:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=B0=81=E8=A3=85&=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0Excel=E5=B8=AE=E5=8A=A9=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MainWindow.xaml.cs | 141 ++---------------------- Utils/ExcelHelper.cs | 141 ++++++++++++++++++++++++ Utils/WindowHelper.cs | 34 ++++++ WpfApp.csproj | 2 + src/public/Excel/Report_2025_10_13.xlsx | Bin 0 -> 4100 bytes src/public/Excel/demo.xlsx | Bin 0 -> 9506 bytes src/view/CgCgkPage.xaml | 17 ++- src/view/CgCgkPage.xaml.cs | 63 +++++++---- 8 files changed, 240 insertions(+), 158 deletions(-) create mode 100644 Utils/ExcelHelper.cs create mode 100644 Utils/WindowHelper.cs create mode 100644 src/public/Excel/Report_2025_10_13.xlsx create mode 100644 src/public/Excel/demo.xlsx diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 13a0f25..258f544 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -82,161 +82,35 @@ public partial class MainWindow : Window #region 菜单点击按钮 - // 在 MainWindow 内部 - /// - /// 按钮点击触发文件页面 - /// - /// - /// + private void OnFilePageButtonClick(object sender, RoutedEventArgs e) { - FilePage filePage = new FilePage(); - NavigationWindow navWin = new NavigationWindow(); - - navWin.Width = 810; - navWin.Height = 600; - navWin.ResizeMode = ResizeMode.NoResize; - navWin.Content = filePage; - navWin.ShowsNavigationUI = false; - navWin.Title = "记录列表"; - - - // ✅ 新增:设定父窗口、样式与居中弹出 - navWin.Owner = Application.Current.MainWindow; // 绑定主窗口 - navWin.WindowStartupLocation = WindowStartupLocation.CenterOwner; // 居中弹出 - navWin.WindowStyle = WindowStyle.ToolWindow; - - // ✅ 改这里:Show() 改为 ShowDialog() 实现模态窗口 - navWin.ShowDialog(); + WindowHelper.ShowPageDialog(new FilePage(), "记录列表", 810, 600); } - - /// - /// 按钮点击触发配置页面 - /// - /// - /// private void OnConfigPageButtonClick(object sender, RoutedEventArgs e) { - ConfigPage configPage = new ConfigPage(); - NavigationWindow navWin = new NavigationWindow(); - navWin.Content = configPage; - navWin.ShowsNavigationUI = false; - navWin.Width = 972; - navWin.Height = 648; - navWin.Title = "配置"; - navWin.ResizeMode = ResizeMode.NoResize; - - - - // ✅ 新增:设定父窗口、样式与居中弹出 - navWin.Owner = Application.Current.MainWindow; // 绑定主窗口 - navWin.WindowStartupLocation = WindowStartupLocation.CenterOwner; // 居中弹出 - navWin.WindowStyle = WindowStyle.ToolWindow; - - // ✅ 改这里:Show() 改为 ShowDialog() 实现模态窗口 - navWin.ShowDialog(); + WindowHelper.ShowPageDialog(new ConfigPage(), "配置", 972, 648); } - /// - /// 按钮点击触发标准基准页面 - /// - /// - /// private void OnStandardPageButtonClick(object sender, RoutedEventArgs e) { - StandardPage standardPage = new StandardPage(); - NavigationWindow navWin = new NavigationWindow(); - navWin.Width = 972; - navWin.Height = 648; - //navWin.ResizeMode = ResizeMode.NoResize; - navWin.Content = standardPage; - navWin.ShowsNavigationUI = false; - navWin.Title = "主标定"; - - - // ✅ 新增:设定父窗口、样式与居中弹出 - navWin.Owner = Application.Current.MainWindow; // 绑定主窗口 - navWin.WindowStartupLocation = WindowStartupLocation.CenterOwner; // 居中弹出 - navWin.WindowStyle = WindowStyle.ToolWindow; - - // ✅ 改这里:Show() 改为 ShowDialog() 实现模态窗口 - navWin.ShowDialog(); + WindowHelper.ShowPageDialog(new StandardPage(), "主标定", 972, 648, isResizable: true); } - /// - /// 按钮点击触发Gauge页面 - /// - /// - /// private void OnGaugePageButtonClick(object sender, RoutedEventArgs e) { - GaugePage gaugePage = new GaugePage(); - NavigationWindow navWin = new NavigationWindow(); - navWin.Content = gaugePage; - navWin.ShowsNavigationUI = false; - navWin.Width = 1080; - navWin.Height = 720; - navWin.Title = "Gauge R&&R"; - - // ✅ 新增:设定父窗口、样式与居中弹出 - navWin.Owner = Application.Current.MainWindow; // 绑定主窗口 - navWin.WindowStartupLocation = WindowStartupLocation.CenterOwner; // 居中弹出 - navWin.WindowStyle = WindowStyle.ToolWindow; - - // ✅ 改这里:Show() 改为 ShowDialog() 实现模态窗口 - navWin.ShowDialog(); + WindowHelper.ShowPageDialog(new GaugePage(), "Gauge R&&R", 1080, 720); } - - /// - /// 按钮点击触发CgCgk页面 - /// - /// - /// private void OnCgCgkPageButtonClick(object sender, RoutedEventArgs e) { - CgCgkPage cgCgkPage = new CgCgkPage(); - NavigationWindow navWin = new NavigationWindow(); - navWin.Content = cgCgkPage; - navWin.ShowsNavigationUI = false; - navWin.Title = "CgCgk"; - - - // ✅ 新增:设定父窗口、样式与居中弹出 - navWin.Owner = Application.Current.MainWindow; // 绑定主窗口 - navWin.WindowStartupLocation = WindowStartupLocation.CenterOwner; // 居中弹出 - navWin.WindowStyle = WindowStyle.ToolWindow; - - // ✅ 改这里:Show() 改为 ShowDialog() 实现模态窗口 - navWin.ShowDialog(); + WindowHelper.ShowPageDialog(new CgCgkPage(), "CgCgk", 972, 648, isResizable: true); } - - /// - /// 按钮点击触发系统设置页面 - /// - /// - /// private void OnSysSetPageButtonClick(object sender, RoutedEventArgs e) { - SysSetPage sysSetPage = new SysSetPage(); - NavigationWindow navWin = new NavigationWindow(); - navWin.Width = 810; - navWin.Height = 600; - navWin.ResizeMode = ResizeMode.NoResize; - navWin.Content = sysSetPage; - navWin.ShowsNavigationUI = false; - navWin.Title = "系统设置"; - - - // ✅ 新增:设定父窗口、样式与居中弹出 - navWin.Owner = Application.Current.MainWindow; // 绑定主窗口 - navWin.WindowStartupLocation = WindowStartupLocation.CenterOwner; // 居中弹出 - navWin.WindowStyle = WindowStyle.ToolWindow; - - // ✅ 改这里:Show() 改为 ShowDialog() 实现模态窗口 - navWin.ShowDialog(); + WindowHelper.ShowPageDialog(new SysSetPage(), "系统设置", 810, 600); } #endregion @@ -253,7 +127,6 @@ public partial class MainWindow : Window } - /// /// 测试按钮 /// diff --git a/Utils/ExcelHelper.cs b/Utils/ExcelHelper.cs new file mode 100644 index 0000000..d795f6f --- /dev/null +++ b/Utils/ExcelHelper.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.IO; +using unvell.ReoGrid; + +namespace WpfApp.Utils +{ + /// + /// Excel 操作静态工具类(基于 ReoGrid) + /// + public static class ExcelHelper + { + private static ReoGridControl reoGridControl; + private static Worksheet currentSheet; + + static ExcelHelper() + { + reoGridControl = new ReoGridControl(); + } + + /// + /// 从模板加载 Excel 文件 + /// + public static void LoadTemplate(string filePath) + { + if (!File.Exists(filePath)) + throw new FileNotFoundException($"模板文件不存在: {filePath}"); + + reoGridControl.Load(filePath); + currentSheet = reoGridControl.CurrentWorksheet; + } + + /// + /// 切换到指定工作表 + /// + public static void SelectSheet(string sheetName) + { + if (reoGridControl == null) + throw new InvalidOperationException("请先调用 LoadTemplate 方法加载文件。"); + + var sheet = reoGridControl.Worksheets[sheetName]; + if (sheet == null) + throw new ArgumentException($"未找到名为 '{sheetName}' 的工作表。"); + + currentSheet = sheet; + reoGridControl.CurrentWorksheet = sheet; + } + + /// + /// 获取当前工作表名称 + /// + public static string GetCurrentSheetName() + { + return currentSheet?.Name ?? string.Empty; + } + + /// + /// 读取单元格 + /// + public static object ReadCell(string cellName) + { + return currentSheet?.GetCellData(cellName); + } + + /// + /// 设置单元格值 + /// + public static void WriteCell(string cellName, object value) + { + currentSheet?.SetCellData(cellName, value); + } + + /// + /// 批量写入单元格 + /// + public static void WriteCells(Dictionary cellValues) + { + foreach (var kv in cellValues) + { + currentSheet?.SetCellData(kv.Key, kv.Value); + } + } + + /// + /// 在指定行插入数据(从 startColumn 开始) + /// + public static void InsertRowData(int rowIndex, int startColumn, IList values) + { + if (currentSheet == null) + throw new InvalidOperationException("请先加载模板并选择工作表。"); + + for (int i = 0; i < values.Count; i++) + { + currentSheet[rowIndex, startColumn + i] = values[i]; + } + } + + /// + /// 保存为新文件 + /// + public static void SaveAs(string savePath) + { + if (reoGridControl == null) + throw new InvalidOperationException("请先调用 LoadTemplate 方法加载文件。"); + + reoGridControl.Save(savePath, unvell.ReoGrid.IO.FileFormat.Excel2007); + } + + /// + /// 打开 Excel 文件(并显示到 ReoGrid 控件) + /// + /// Excel 文件路径 + /// 用于显示的 ReoGridControl 容器 + public static void OpenExcel(string filePath, ReoGridControl reoGridHost) + { + if (!File.Exists(filePath)) + throw new FileNotFoundException($"文件不存在: {filePath}"); + + // 替换当前控件引用 + reoGridControl?.Dispose(); + reoGridControl = reoGridHost; + + // 加载 Excel 文件 + reoGridControl.Load(filePath); + + // 默认显示第一个工作表 + currentSheet = reoGridControl.CurrentWorksheet; + } + + + /// + /// 清理资源 + /// + public static void Dispose() + { + reoGridControl?.Dispose(); + reoGridControl = null; + currentSheet = null; + } + } +} diff --git a/Utils/WindowHelper.cs b/Utils/WindowHelper.cs new file mode 100644 index 0000000..97f5805 --- /dev/null +++ b/Utils/WindowHelper.cs @@ -0,0 +1,34 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Navigation; + +namespace WpfApp.Utils; + +public static class WindowHelper +{ + /// + /// 通用窗口打开方法 + /// + /// 要显示的页面实例 + /// 窗口标题 + /// 窗口宽度 + /// 窗口高度 + /// 是否允许调整大小 + public static void ShowPageDialog(Page page, string title, double width = 900, double height = 600, bool isResizable = false) + { + var navWin = new NavigationWindow + { + Content = page, + Title = title, + Width = width, + Height = height, + ShowsNavigationUI = false, + WindowStartupLocation = WindowStartupLocation.CenterOwner, + WindowStyle = WindowStyle.ToolWindow, + Owner = Application.Current.MainWindow, + ResizeMode = isResizable ? ResizeMode.CanResize : ResizeMode.NoResize + }; + + navWin.ShowDialog(); + } +} diff --git a/WpfApp.csproj b/WpfApp.csproj index 2536c12..f3b24e2 100644 --- a/WpfApp.csproj +++ b/WpfApp.csproj @@ -40,6 +40,7 @@ + @@ -49,6 +50,7 @@ + diff --git a/src/public/Excel/Report_2025_10_13.xlsx b/src/public/Excel/Report_2025_10_13.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..535e947e96cfbf7b750f3ed944aa5322f57bb81b GIT binary patch literal 4100 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 literal 0 HcmV?d00001 diff --git a/src/view/CgCgkPage.xaml b/src/view/CgCgkPage.xaml index e8f41c8..bbb0558 100644 --- a/src/view/CgCgkPage.xaml +++ b/src/view/CgCgkPage.xaml @@ -1,6 +1,7 @@  - -