| | |
| | | using DevExpress.Utils; |
| | | using DevExpress.XtraCharts; |
| | | using DevExpress.XtraGrid.Columns; |
| | | using DevExpress.XtraGrid.Views.Grid; |
| | | using System.Data; |
| | | using System.IO; |
| | | using Yw.WinFrmUI; |
| | |
| | | if (dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK) |
| | | return; |
| | | var datalist = new List<FlowPressChartViewModel>(); |
| | | ParseExcel(dlg.FileName, out datalist); |
| | | var datatable = new DataTable(); |
| | | ParseExcel(dlg.FileName, out datalist,out datatable); |
| | | if (datalist.Any()) |
| | | { |
| | | SetBindingData(datalist); |
| | | SetBindingData(datalist,datatable); |
| | | } |
| | | } |
| | | #region Private Variable |
| | | |
| | | private XYDiagram _diagram; |
| | | private XYDiagramDefaultPane _default_pane; |
| | | private XYDiagramPane _bottom_pane; |
| | | |
| | | private AxisX _axis_x_flow; |
| | | private AxisY _axis_y_head; |
| | |
| | | |
| | | this.chartControl1.RuntimeHitTesting = true; |
| | | |
| | | |
| | | |
| | | this.chartControl1.Legend.Visibility = DefaultBoolean.True; |
| | | _diagram = (XYDiagram)this.chartControl1.Diagram; |
| | | _diagram.EnableAxisXScrolling = true; |
| | | _diagram.EnableAxisYScrolling = true; |
| | | _diagram.EnableAxisXZooming = true; |
| | | _diagram.EnableAxisYZooming = true; |
| | | _default_pane = _diagram.DefaultPane; |
| | | _bottom_pane = (XYDiagramPane)_diagram.FindPaneByName("BottomPanel"); |
| | | |
| | | _diagram.AxisX.TimeSpanScaleOptions.MeasureUnit = TimeSpanMeasureUnit.Minute; |
| | | _diagram.AxisX.TimeSpanScaleOptions.ScaleMode = ScaleMode.Continuous; |
| | | |
| | | _axis_x_flow = _diagram.AxisX; |
| | | _axis_y_head = _diagram.AxisY; |
| | |
| | | _axis_y_eff.Alignment = AxisAlignment.Far; |
| | | |
| | | |
| | | _axis_x_flow.Visibility = DefaultBoolean.False; |
| | | _axis_x_flow.GridLines.Visible = false; |
| | | _axis_y_head.Visibility = DefaultBoolean.False; |
| | | _axis_y_head.GridLines.Visible = false; |
| | | _axis_y_eff.Visibility = DefaultBoolean.False; |
| | | _axis_y_eff.GridLines.Visible = false; |
| | | |
| | | this.chartControl1.CrosshairEnabled = DefaultBoolean.True; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置图表 |
| | | /// </summary> |
| | | public void SetBindingData(List<FlowPressChartViewModel> vm_list) |
| | | public void SetBindingData(List<FlowPressChartViewModel> vm_list,DataTable dataTable) |
| | | { |
| | | var view = gridControl1.MainView as GridView; |
| | | view.Columns.Clear(); |
| | | |
| | | this.chartControl1.BeginInit(); |
| | | this.chartControl1.Series.Clear(); |
| | |
| | | AxisYBase axis_y = null; |
| | | XYDiagramPaneBase pane = null; |
| | | |
| | | var colTime = new GridColumn(); |
| | | colTime.FieldName = "时间"; |
| | | colTime.Caption = "时间"; |
| | | colTime.Visible = true; |
| | | view.Columns.Add(colTime); |
| | | |
| | | foreach (var vm in vm_list) |
| | | { |
| | | if (vm.Name.Contains("压力")) |
| | | if (!vm.Name.Contains("压力")) |
| | | { |
| | | axis_x = _axis_x_flow; |
| | | axis_y = _axis_y_head; |
| | |
| | | pane = _default_pane; |
| | | |
| | | } |
| | | var col = new GridColumn(); |
| | | col.FieldName = vm.Name; |
| | | col.Caption = vm.Name; |
| | | col.Visible = true; |
| | | view.Columns.Add(col); |
| | | |
| | | AddLineSeries(vm.Name, axis_x, axis_y, pane, vm.Datas); |
| | | } |
| | | |
| | | var min_x = vm_list.SelectMany(x => x.Datas).Min(x => TimeSpan.Parse(x.Time)); |
| | | var max_x = vm_list.SelectMany(x => x.Datas).Max(x => TimeSpan.Parse(x.Time)); |
| | | |
| | | |
| | | _axis_x_flow.NumericScaleOptions.AutoGrid = false; |
| | | _axis_x_flow.WholeRange.SideMarginsValue = 0; |
| | | _axis_x_flow.VisualRange.SideMarginsValue = 0; |
| | | _axis_x_flow.WholeRange.SetMinMaxValues(min_x, max_x); |
| | | _axis_x_flow.VisualRange.SetMinMaxValues(min_x, max_x); |
| | | |
| | | gridControl1.DataSource = dataTable; |
| | | this.chartControl1.EndInit(); |
| | | |
| | | } |
| | |
| | | view.EmptyPointOptions.Color = Color.Transparent; |
| | | view.Pane = pane; |
| | | |
| | | var series_pt_list = pt_list.Select(x => new SeriesPoint(x.Time, x.Y)).ToArray(); |
| | | |
| | | var series_pt_list = pt_list.Select(x => new SeriesPoint(TimeSpan.Parse(x.Time), x.Y)).ToArray(); |
| | | var series = new DevExpress.XtraCharts.Series(); |
| | | series.Tag = id; |
| | | series.ShowInLegend = false; |
| | | series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.DateTime; |
| | | //series.ShowInLegend = false; |
| | | series.Name = id; |
| | | series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.TimeSpan; |
| | | series.TimeSpanSummaryOptions.MeasureUnit = TimeSpanMeasureUnit.Minute; |
| | | series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; |
| | | series.CrosshairEnabled = DefaultBoolean.False; |
| | | series.CrosshairEnabled = DefaultBoolean.True; |
| | | series.CrosshairLabelPattern = id + ":{V:N2}"; |
| | | series.ToolTipEnabled = DefaultBoolean.False; |
| | | series.SeriesPointsSorting = SortingMode.None; |
| | | series.Visible = true; |
| | |
| | | |
| | | this.chartControl1.Series.Add(series); |
| | | } |
| | | public static string ParseExcel(string fileName, out List<FlowPressChartViewModel> datalist) |
| | | public static string ParseExcel(string fileName, out List<FlowPressChartViewModel> datalist,out DataTable dataTable) |
| | | { |
| | | datalist = new List<FlowPressChartViewModel>(); |
| | | try |
| | | dataTable = new DataTable(); |
| | | if (!File.Exists(fileName)) |
| | | return "文件不存在"; |
| | | int line = 0; |
| | | |
| | | //初始化文件 |
| | | NPOI.HSSF.UserModel.HSSFWorkbook theBook = null; |
| | | using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite)) |
| | | { |
| | | if (!File.Exists(fileName)) |
| | | return "文件不存在"; |
| | | int line = 0; |
| | | theBook = new NPOI.HSSF.UserModel.HSSFWorkbook(file); |
| | | } |
| | | |
| | | //初始化文件 |
| | | NPOI.HSSF.UserModel.HSSFWorkbook theBook = null; |
| | | using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite)) |
| | | { |
| | | theBook = new NPOI.HSSF.UserModel.HSSFWorkbook(file); |
| | | } |
| | | |
| | | //检查表格是否符合 |
| | | NPOI.SS.UserModel.ISheet sheet1 = theBook.GetSheet("Sheet1"); |
| | | //检查表格是否符合 |
| | | NPOI.SS.UserModel.ISheet sheet1 = theBook.GetSheet("Sheet1"); |
| | | if (sheet1 == null) |
| | | { |
| | | sheet1 = theBook.GetSheetAt(0); |
| | | if (sheet1 == null) |
| | | return ("无Sheet数据"); |
| | | } |
| | | |
| | | //标题行 |
| | | int title_line_index = 0; |
| | | |
| | | var row_title = sheet1.GetRow(title_line_index); |
| | | if (row_title == null) |
| | | { |
| | | return ("第一行第一列不能空"); |
| | | } |
| | | |
| | | //开始读取的行 |
| | | int start_line = title_line_index + 1; |
| | | var cell_0 = row_title.GetCell(0); |
| | | if (cell_0 == null) |
| | | { |
| | | return ("无法读取表头文件"); |
| | | } |
| | | |
| | | var totalcell = row_title.Cells.Count; |
| | | for (int i = 0; i < totalcell; i++) |
| | | { |
| | | var row_cell = row_title.GetCell(i); |
| | | |
| | | if (i > 0) |
| | | { |
| | | sheet1 = theBook.GetSheetAt(0); |
| | | if (sheet1 == null) |
| | | return ("无Sheet数据"); |
| | | if (row_cell != null) |
| | | { |
| | | datalist.Add(new FlowPressChartViewModel() |
| | | { |
| | | Name = row_cell.StringCellValue, |
| | | Datas = new List<TimeChartViewModel>() |
| | | }); |
| | | } |
| | | dataTable.Columns.Add(row_cell.StringCellValue, typeof(double)); |
| | | } |
| | | |
| | | //标题行 |
| | | int title_line_index = 0; |
| | | |
| | | var row_title = sheet1.GetRow(title_line_index); |
| | | if (row_title == null) |
| | | else |
| | | { |
| | | return ("第一行第一列不能空"); |
| | | } |
| | | dataTable.Columns.Add(row_cell.StringCellValue, typeof(string)); |
| | | |
| | | //开始读取的行 |
| | | int start_line = title_line_index + 1; |
| | | var cell_0 = row_title.GetCell(0); |
| | | if (cell_0 == null) |
| | | { |
| | | return ("无法读取表头文件"); |
| | | } |
| | | } |
| | | |
| | | var totalcell = row_title.Cells.Count; |
| | | NPOI.SS.UserModel.IRow row_temp = null; |
| | | NPOI.SS.UserModel.ICell cell; |
| | | |
| | | for (line = start_line; line < 10000; line++) |
| | | { |
| | | |
| | | row_temp = sheet1.GetRow(line); |
| | | if (row_temp == null) |
| | | break; |
| | | var rowData = new object[totalcell]; |
| | | for (int i = 0; i < totalcell; i++) |
| | | { |
| | | if (i > 0) |
| | | { |
| | | var row_cell = row_title.GetCell(i); |
| | | if (row_cell != null) |
| | | { |
| | | datalist.Add(new FlowPressChartViewModel() |
| | | { |
| | | Name = row_cell.StringCellValue, |
| | | Datas = new List<TimeChartViewModel>() |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | |
| | | NPOI.SS.UserModel.IRow row_temp = null; |
| | | NPOI.SS.UserModel.ICell cell; |
| | | |
| | | for (line = start_line; line < 10000; line++) |
| | | { |
| | | |
| | | row_temp = sheet1.GetRow(line); |
| | | if (row_temp == null) |
| | | break; |
| | | |
| | | for (int i = 0; i < totalcell; i++) |
| | | try |
| | | { |
| | | if (i > 0) |
| | | { |
| | | var cell_temp = row_temp.GetCell(i); |
| | | datalist[i].Datas.Add(new TimeChartViewModel() |
| | | double yvalue = cell_temp.NumericCellValue; |
| | | var timevalue = row_temp.GetCell(0).NumericCellValue; |
| | | //double.TryParse(cell_temp.StringCellValue,out yvalue); |
| | | datalist[i - 1].Datas.Add(new TimeChartViewModel() |
| | | { |
| | | Time = row_temp.GetCell(0).StringCellValue, |
| | | Y = row_temp.GetCell(i).NumericCellValue, |
| | | Time = DateTime.FromOADate(timevalue).ToString("HH:mm:ss"), |
| | | Y = yvalue, |
| | | }); |
| | | rowData[i] = yvalue; |
| | | } |
| | | else |
| | | { |
| | | var timevalue = row_temp.GetCell(0).NumericCellValue; |
| | | rowData[i] = DateTime.FromOADate(timevalue).ToString("HH:mm:ss"); |
| | | } |
| | | } |
| | | |
| | | |
| | | catch (Exception ex) |
| | | { |
| | | var a = ex.Message; |
| | | } |
| | | } |
| | | |
| | | return ""; |
| | | dataTable.Rows.Add(rowData); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return "文件异常!"; |
| | | } |
| | | return ""; |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | } |