using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Navigation;
using System.Windows.Shapes;
using System.Net;
using FLY.Thick.Base.Common;
using FLY.Thick.Base.Client;
using FLY.Thick.Base.UI.Converter;
using Unity;
using FLY.Thick.Base.IService;
using System.ComponentModel;
using System.Collections.ObjectModel;
using GalaSoft.MvvmLight.Command;
using OfficeOpenXml;
using OfficeOpenXml.Table;
using System.Data;
using System.IO;
using Microsoft.Win32;
using System.Threading.Tasks;
using FLY.Thick.Base.Server;
namespace FLY.Thick.Base.UI
{
///
/// Page_Curve.xaml 的交互逻辑
///
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 参数
///
/// AD曲线校正方式
///
public CurveCorrectWay CorrectWay { get; set; }
///
/// 标记,用于告诉 客户端,当前的曲线类型, 自然对数 / 直线拟合 / 二次拟合
///
public CurveType Flag { get; set; }
public ObservableCollection Curves { get; } = new ObservableCollection();
#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 defaultCurve = new Dictionary();
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]);
}
}
}
}