using CommunityToolkit.Mvvm.Input; using FLY.Thick.Base.Common; using FLY.Thick.Base.IService; using FLY.Thick.Base.Server; using Microsoft.Win32; using OfficeOpenXml; using OfficeOpenXml.Table; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using Unity; namespace FLY.Thick.Base.UI { /// <summary> /// Page_Curve.xaml 的交互逻辑 /// </summary> public partial class PgCurve : Page { PgCurveVm viewModel; public PgCurve() { InitializeComponent(); InitializeComponent2(); } void InitializeComponent2() { System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); chart1.Name = "chart1"; // // chart1 // chartArea1.Name = "Default"; chartArea1.AxisX.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisX.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); //chartArea1.AxisX.LabelStyle.Format = "%F2"; chartArea1.AxisY.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisY.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.BackColor = System.Drawing.Color.OldLace; //chartArea1.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom; //chartArea1.BackSecondaryColor = System.Drawing.Color.White; chartArea1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.BorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Solid; chartArea1.ShadowColor = System.Drawing.Color.Transparent; //对数坐标 //chartArea1.AxisY.IsLogarithmic = true; //chartArea1.AxisY.LogarithmBase = Math.E; this.chart1.ChartAreas.Add(chartArea1); legend1.Name = "Default"; legend1.BackColor = System.Drawing.Color.Transparent; legend1.Enabled = false; legend1.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); legend1.IsTextAutoFit = false; this.chart1.Legends.Add(legend1); //this.chart1.Location = new System.Drawing.Point(16, 32); series1.Name = "Series 1"; series1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(26)))), ((int)(((byte)(59)))), ((int)(((byte)(105))))); series1.BorderWidth = 3; series1.ChartArea = "Default"; series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; series1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(65)))), ((int)(((byte)(140)))), ((int)(((byte)(240))))); series1.Legend = "Default"; series1.MarkerSize = 8; series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle; series1.ShadowColor = System.Drawing.Color.Black; series1.ShadowOffset = 2; series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double; series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; this.chart1.Series.Add(series1); this.chart1.BackColor = System.Drawing.Color.Transparent; } [InjectionMethod] public void Init(ICurveService curveService) { viewModel = new PgCurveVm(); viewModel.Init(curveService, chart1, this); this.DataContext = viewModel; } } public class PgCurveVm : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; #region 参数 /// <summary> /// AD曲线校正方式 /// </summary> public CurveCorrectWay CorrectWay { get; set; } /// <summary> /// 标记,用于告诉 客户端,当前的曲线类型, 自然对数 / 直线拟合 / 二次拟合 /// </summary> public CurveType Flag { get; set; } public ObservableCollection<CurveCell2> Curves { get; } = new ObservableCollection<CurveCell2>(); #endregion #region Command public RelayCommand ApplyCmd { get; } public RelayCommand AdScaleCmd { get; } public RelayCommand ValueScaleCmd { get; } public RelayCommand SetRevisedCmd { get; } public RelayCommand SaveXlsxCmd { get; } public RelayCommand LoadXlsxCmd { get; } #endregion ICurveService mCurveService; System.Windows.Forms.DataVisualization.Charting.Chart chart1; Page page; public PgCurveVm() { ApplyCmd = new RelayCommand(Apply); AdScaleCmd = new RelayCommand(AdScale); ValueScaleCmd = new RelayCommand(ValueScale); SetRevisedCmd = new RelayCommand(SetRevised); SaveXlsxCmd = new RelayCommand(SaveXlsx); LoadXlsxCmd = new RelayCommand(LoadXlsx); } public void Init( ICurveService curveService, System.Windows.Forms.DataVisualization.Charting.Chart chart, Page page) { mCurveService = curveService; this.chart1 = chart; this.page = page; Misc.BindingOperations.SetBinding(mCurveService, nameof(mCurveService.CorrectWay), this, nameof(CorrectWay)); Misc.BindingOperations.SetBinding(mCurveService, nameof(mCurveService.Flag), this, nameof(Flag)); Misc.BindingOperations.SetBinding(mCurveService, nameof(mCurveService.Curves), () => { update_curves(); }); this.PropertyChanged += PgCurveVm_PropertyChanged; } private void PgCurveVm_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(Flag)) { DataBindAll(); } } void update_curves() { Curves.CollectionChanged -= Curves_CollectionChanged; Curves.Clear(); if (mCurveService.Curves != null) { foreach (var cell in mCurveService.Curves) { var cell2 = new CurveCell2() { AD = cell.AD, Value = cell.Value }; cell2.PropertyChanged += Cell_PropertyChanged; Curves.Add(cell2); } } Curves.CollectionChanged += Curves_CollectionChanged; DataBindAll(); } private void Cell_PropertyChanged(object sender, PropertyChangedEventArgs e) { DataBindAll(); } void Curves_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { foreach (CurveCell2 c in e.NewItems) { c.PropertyChanged += (_s, _e) => { DataBindAll(); }; } DataBindAll(); } else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove) { DataBindAll(); } } void DataBindAll() { CurveCore CurveCore = new CurveCore(); CurveCore.Flag = Flag; CurveCore.Curves = Curves.Select(c2 => new CurveCell() { AD = c2.AD, Value = c2.Value }).ToList(); var curves = CurveCore.Curves; chart1.Series["Series 1"].Points.Clear(); for (int i = 0; i < curves.Count(); i++) { int ad = curves[i].AD; double thick = curves[i].Value; chart1.Series["Series 1"].Points.AddXY(thick, ad); if ((i + 1) <= (curves.Count() - 1)) { //补齐点, 以thick=100 步进 int step = 100; bool isDescending = true;//降序排列 if (curves[i].AD < curves[i + 1].AD) isDescending = false; while (true) { if (isDescending) { ad -= step; if (ad <= curves[i + 1].AD) break; } else { ad += step; if (ad >= curves[i + 1].AD) break; } thick = CurveCore.AD2Value(ad, AD2ValueFlag.NoRevised); thick = Math.Round(thick, 2); chart1.Series["Series 1"].Points.AddXY(thick, ad); chart1.Series["Series 1"].Points[chart1.Series["Series 1"].Points.Count() - 1].MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.None; } } } } private void Apply() { if (!WdPassword.Authorize("Curve")) return; mCurveService.Apply(this.CorrectWay, this.Flag, this.Curves.ToArray()); FLY.ControlLibrary.Window_Tip.Show("应用成功", null, TimeSpan.FromSeconds(2)); } private void AdScale() { var curves = Curves; if (curves.Count > 1) { WdAdScale w = new WdAdScale(); w.Old = curves[0].AD; w.New = curves[0].AD; w.Owner = FLY.ControlLibrary.COMMON.GetWindow(page); if (w.ShowDialog() == true) { if ((w.Old != w.New) && (w.New != 0) && (w.Old != 0)) { double scale = (double)w.New / w.Old; for (int i = 0; i < curves.Count(); i++) { curves[i].AD = (int)Math.Round(scale * curves[i].AD); } } FLY.ControlLibrary.Window_Tip.Show("成功", null, TimeSpan.FromSeconds(2)); } } } private async void LoadXlsx() { //加载数据 //检查是否存在默认曲线,没有就新建 CreateDefaultCurve(); string dirPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "adcurve"); if (!Directory.Exists(dirPath)) { //上面创建失败了。。。 dirPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); } OpenFileDialog sfd = new OpenFileDialog(); sfd.Filter = "xlsx files (*.xlsx)|*.xlsx"; sfd.InitialDirectory = dirPath; if (sfd.ShowDialog() == true) { string filename = sfd.FileName; Exception error = null; var ret = await Task.Factory.StartNew(() => { try { LoadXlsx(filename); } catch (Exception e) { error = e; return false; } return true; }); if (ret) { DataBindAll(); FLY.ControlLibrary.Window_Tip.Show("成功", $"加载{filename}", TimeSpan.FromSeconds(2)); } else { MessageBox.Show($"{error}", $"加载{filename}失败", MessageBoxButton.OK, MessageBoxImage.Error); } } } private void LoadXlsx(string filepath) { //检测标题 DataTable dataTable_curve = new DataTable("table_curve"); dataTable_curve.Columns.Add(new DataColumn() { ColumnName = "AD", DataType = typeof(double), Caption = "0" }); dataTable_curve.Columns.Add(new DataColumn() { ColumnName = "VALUE", DataType = typeof(double), Caption = "0.00" }); DataTable dataTable_info = new DataTable("table_info"); dataTable_info.Columns.Add(new DataColumn() { ColumnName = "曲线类型", DataType = typeof(string) }); dataTable_info.Columns.Add(new DataColumn() { ColumnName = "校正方式", DataType = typeof(string) }); using (ExcelPackage p = new ExcelPackage(new FileInfo(filepath))) { ExcelWorksheet sheet = p.Workbook.Worksheets["AD曲线"]; FromSheet(sheet, dataTable_curve); sheet = p.Workbook.Worksheets["辅助信息"]; FromSheet(sheet, dataTable_info); } page.Dispatcher.Invoke(() => { Curves.CollectionChanged -= Curves_CollectionChanged; this.PropertyChanged -= PgCurveVm_PropertyChanged; Curves.Clear(); for (int i = 0; i < dataTable_curve.Rows.Count; i++) { var dataRow = dataTable_curve.Rows[i]; int ad = System.Convert.ToInt32(dataRow["AD"]); double value = System.Convert.ToDouble(dataRow["VALUE"]); Curves.Add(new CurveCell2() { AD = ad, Value = value }); } if (dataTable_info.Rows.Count > 0) { var dataRow = dataTable_info.Rows[0]; Flag = (CurveType)Enum.Parse(typeof(CurveType), (string)dataRow["曲线类型"]); CorrectWay = (CurveCorrectWay)Enum.Parse(typeof(CurveCorrectWay), (string)dataRow["校正方式"]); } this.PropertyChanged += PgCurveVm_PropertyChanged; Curves.CollectionChanged += Curves_CollectionChanged; }); } void FromSheet(ExcelWorksheet sheet, DataTable dataTable) { int from_row = 1; int row = from_row; for (int i = 0; i < dataTable.Columns.Count; i++) { int col = i + 1; if ((string)(sheet.Cells[row, col].Value) != dataTable.Columns[i].ColumnName) { throw new Exception($"格式出错, 第{i}列 不是{dataTable.Columns[i].ColumnName}"); } } row++; while (true) { var newRow = dataTable.NewRow(); //当一行都是空的,认为没有数据 int nullCnt = 0; for (int j = 0; j < dataTable.Columns.Count; j++) { int col = j + 1; object value = sheet.Cells[row, col].Value; if (value is string || value == null) { if (string.IsNullOrEmpty((string)(value))) { //空的 nullCnt++; //continue; return; } } try { newRow[j] = sheet.Cells[row, col].Value; } catch (Exception e) { throw e; } } if (nullCnt == dataTable.Columns.Count) { //没有数据了 break; } dataTable.Rows.Add(newRow); row++; } } private async void SaveXlsx() { //下载数据 string strDesktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string filename = $"AD曲线_{DateTime.Now:yyyyMMddHHmmss}.xlsx"; SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "xlsx files (*.xlsx)|*.xlsx"; sfd.InitialDirectory = strDesktopPath; sfd.FileName = filename; if (sfd.ShowDialog() == true) { filename = sfd.FileName; await Task.Factory.StartNew(() => { SaveToXlsx(filename); }); FLY.ControlLibrary.Window_Tip.Show("成功", $"导出到{filename}", TimeSpan.FromSeconds(2)); } } private void SaveToXlsx(string filepath) { if (File.Exists(filepath)) { File.Delete(filepath); } using (ExcelPackage p = new ExcelPackage(new FileInfo(filepath))) { ExcelWorksheet sheet = p.Workbook.Worksheets.Add("AD曲线"); DataTable dataTable = new DataTable("table_curve"); dataTable.Columns.Add(new DataColumn() { ColumnName = "AD", DataType = typeof(double), Caption = "0" }); dataTable.Columns.Add(new DataColumn() { ColumnName = "VALUE", DataType = typeof(double), Caption = "0.00" }); for (int i = 0; i < Curves.Count(); i++) { try { var dataRow = dataTable.NewRow(); dataRow["AD"] = Curves[i].AD; dataRow["VALUE"] = Curves[i].Value; dataTable.Rows.Add(dataRow); } catch { break; } } ToSheet(sheet, dataTable); sheet = p.Workbook.Worksheets.Add("辅助信息"); dataTable = new DataTable("table_info"); dataTable.Columns.Add(new DataColumn() { ColumnName = "曲线类型", DataType = typeof(string) }); dataTable.Columns.Add(new DataColumn() { ColumnName = "校正方式", DataType = typeof(string) }); { var dataRow = dataTable.NewRow(); dataRow["曲线类型"] = Flag.ToString(); dataRow["校正方式"] = CorrectWay.ToString(); dataTable.Rows.Add(dataRow); } ToSheet(sheet, dataTable); p.Save(); } } void ToSheet(ExcelWorksheet sheet, DataTable dataTable) { int from_row = 1; int row = from_row; //添加标题 for (int i = 0; i < dataTable.Columns.Count; i++) { int col = i + 1; sheet.Cells[row, col].Value = dataTable.Columns[i].ColumnName; //格式 sheet.Column(col).Style.Numberformat.Format = dataTable.Columns[i].Caption; } row++; for (int i = 0; i < dataTable.Rows.Count; i++) { for (int j = 0; j < dataTable.Columns.Count; j++) { int col = j + 1; sheet.Cells[row, col].Value = dataTable.Rows[i][j]; } row++; } int colcnt = dataTable.Columns.Count; int rowcnt = dataTable.Rows.Count; var range = sheet.Cells[from_row, 1, from_row + rowcnt, colcnt]; var tbl = sheet.Tables.Add(range, dataTable.TableName); tbl.TableStyle = TableStyles.Medium9; sheet.Cells[sheet.Dimension.Address].AutoFitColumns(); } private void SetRevised() { if (mCurveService.Curves != null) { Curves.CollectionChanged -= Curves_CollectionChanged; Curves.Clear(); foreach (var cell in mCurveService.Curves) { Curves.Add(new CurveCell2() { AD = cell.RevisedAD, Value = cell.Value }); cell.PropertyChanged += (s, e) => { DataBindAll(); }; } Curves.CollectionChanged += Curves_CollectionChanged; DataBindAll(); FLY.ControlLibrary.Window_Tip.Show("成功", null, TimeSpan.FromSeconds(2)); } } private void ValueScale() { var curves = Curves; if (curves.Count > 1) { WdAdScale w = new WdAdScale(); w.Old = curves[0].Value; w.New = curves[0].Value; w.Owner = FLY.ControlLibrary.COMMON.GetWindow(page); if (w.ShowDialog() == true) { if ((w.Old != w.New) && (w.New != 0) && (w.Old != 0)) { double scale = w.New / w.Old; for (int i = 0; i < curves.Count(); i++) { curves[i].Value = Math.Round(scale * curves[i].Value, 2); } } FLY.ControlLibrary.Window_Tip.Show("成功", null, TimeSpan.FromSeconds(2)); } } } CurveCollectionJsonDb curve_k85 = new CurveCollectionJsonDb() { Curves = new CurveCell2[] { new CurveCell2() { AD = 58790, Value = 0 }, new CurveCell2() { AD = 39460, Value = 238.38 }, new CurveCell2() { AD = 39070, Value = 244.88 }, new CurveCell2() { AD = 38450, Value = 255.48 }, new CurveCell2() { AD = 37920, Value = 263.08 }, new CurveCell2() { AD = 37436, Value = 270.68 }, new CurveCell2() { AD = 36990, Value = 281.98 }, new CurveCell2() { AD = 36527, Value = 287.08 }, new CurveCell2() { AD = 35892, Value = 296.28 }, new CurveCell2() { AD = 35622, Value = 305.88 }, new CurveCell2() { AD = 35222, Value = 311.58 }, new CurveCell2() { AD = 34552, Value = 321.58 }, new CurveCell2() { AD = 35655, Value = 300.58 }, new CurveCell2() { AD = 34812, Value = 316.78 }, new CurveCell2() { AD = 33700, Value = 335.18 }, new CurveCell2() { AD = 32824, Value = 351.38 }, new CurveCell2() { AD = 31785, Value = 370.78 }, new CurveCell2() { AD = 30896, Value = 386.58 }, new CurveCell2() { AD = 30130, Value = 403.88 }, new CurveCell2() { AD = 29022, Value = 422.48 }, new CurveCell2() { AD = 28520, Value = 433.18 }, new CurveCell2() { AD = 27696, Value = 455.58 } }, CorrectWay = CurveCorrectWay.OnePointIsScale, Flag = CurveType.E }; CurveCollectionJsonDb curve_4k = new CurveCollectionJsonDb() { Curves = new CurveCell2[] { new CurveCell2() { AD = 50300 , Value = 0 }, new CurveCell2() { AD = 46505 , Value = 19 }, new CurveCell2() { AD = 42999 , Value = 38 }, new CurveCell2() { AD = 39698 , Value = 58 }, new CurveCell2() { AD = 36646 , Value = 78 }, new CurveCell2() { AD = 33894 , Value = 98 }, new CurveCell2() { AD = 31229 , Value = 118 }, new CurveCell2() { AD = 28934 , Value = 137 }, new CurveCell2() { AD = 26818 , Value = 156 }, new CurveCell2() { AD = 24908 , Value = 175 }, new CurveCell2() { AD = 23220 , Value = 194 }, new CurveCell2() { AD = 21558 , Value = 213 }, new CurveCell2() { AD = 20057 , Value = 232 }, new CurveCell2() { AD = 18606 , Value = 251 }, new CurveCell2() { AD = 17283 , Value = 271 }, new CurveCell2() { AD = 16035 , Value = 290 } }, CorrectWay = CurveCorrectWay.OnePointIsScale, Flag = CurveType.E }; CurveCollectionJsonDb curve_20k = new CurveCollectionJsonDb() { Curves = new CurveCell2[] { new CurveCell2() { AD = 59297 , Value = 0 }, new CurveCell2() { AD = 22988 , Value = 153.52 }, new CurveCell2() { AD = 22032 , Value = 160.32 }, new CurveCell2() { AD = 20822 , Value = 167.92 }, new CurveCell2() { AD = 19570 , Value = 177.62 }, new CurveCell2() { AD = 17811 , Value = 192.72 }, new CurveCell2() { AD = 16857 , Value = 202.42 }, new CurveCell2() { AD = 16193 , Value = 209.62 }, new CurveCell2() { AD = 15120 , Value = 218.52 }, new CurveCell2() { AD = 14609 , Value = 227.32 }, new CurveCell2() { AD = 13917 , Value = 233.62 }, new CurveCell2() { AD = 11142 , Value = 275.62 }, new CurveCell2() { AD = 10284 , Value = 291.52 }, new CurveCell2() { AD = 9196 , Value = 308.12 }, new CurveCell2() { AD = 8690 , Value = 319.92 }, new CurveCell2() { AD = 8007 , Value = 334.72 }, new CurveCell2() { AD = 7291 , Value = 353.02 }, new CurveCell2() { AD = 6743 , Value = 368.32 }, new CurveCell2() { AD = 6224 , Value = 386.32 }, new CurveCell2() { AD = 5616 , Value = 402.72 }, new CurveCell2() { AD = 5331 , Value = 417.02 }, new CurveCell2() { AD = 4982 , Value = 433.12 } }, CorrectWay = CurveCorrectWay.OnePointIsScale, Flag = CurveType.E }; CurveCollectionJsonDb curve_laser = new CurveCollectionJsonDb() { Curves = new CurveCell2[] { new CurveCell2() { AD = 22130 , Value = 186.00 }, new CurveCell2() { AD = 36774 , Value = 672.00 } }, CorrectWay = CurveCorrectWay.OnePointIsOffset, Flag = CurveType.Line }; private void SaveToXlsx(string filepath, CurveCollectionJsonDb curve) { if (File.Exists(filepath)) { File.Delete(filepath); } using (ExcelPackage p = new ExcelPackage(new FileInfo(filepath))) { ExcelWorksheet sheet = p.Workbook.Worksheets.Add("AD曲线"); DataTable dataTable = new DataTable("table_curve"); dataTable.Columns.Add(new DataColumn() { ColumnName = "AD", DataType = typeof(double), Caption = "0" }); dataTable.Columns.Add(new DataColumn() { ColumnName = "VALUE", DataType = typeof(double), Caption = "0.00" }); for (int i = 0; i < curve.Curves.Count(); i++) { try { var dataRow = dataTable.NewRow(); dataRow["AD"] = curve.Curves[i].AD; dataRow["VALUE"] = curve.Curves[i].Value; dataTable.Rows.Add(dataRow); } catch { break; } } ToSheet(sheet, dataTable); sheet = p.Workbook.Worksheets.Add("辅助信息"); dataTable = new DataTable("table_info"); dataTable.Columns.Add(new DataColumn() { ColumnName = "曲线类型", DataType = typeof(string) }); dataTable.Columns.Add(new DataColumn() { ColumnName = "校正方式", DataType = typeof(string) }); { var dataRow = dataTable.NewRow(); dataRow["曲线类型"] = curve.Flag.ToString(); dataRow["校正方式"] = curve.CorrectWay.ToString(); dataTable.Rows.Add(dataRow); } ToSheet(sheet, dataTable); p.Save(); } } private void CreateDefaultCurve() { Dictionary<string, CurveCollectionJsonDb> defaultCurve = new Dictionary<string, CurveCollectionJsonDb>(); string dirPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "adcurve"); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } defaultCurve.Add(System.IO.Path.Combine(dirPath, "K85.xlsx"), curve_k85); defaultCurve.Add(System.IO.Path.Combine(dirPath, "X光4K.xlsx"), curve_4k); defaultCurve.Add(System.IO.Path.Combine(dirPath, "X光20K.xlsx"), curve_20k); defaultCurve.Add(System.IO.Path.Combine(dirPath, "激光.xlsx"), curve_laser); foreach (var kv in defaultCurve) { string filepath = kv.Key; if (!File.Exists(filepath)) SaveToXlsx(filepath, defaultCurve[filepath]); } } } }