using System; using System.Collections.Generic; using System.IO; namespace IStation.WinFrmUI.Monitor { /// /// /// public class PhartExcelHelper { #region Parse public static string ParseUniversalExcel(string file_path, out List list) { list = new List(); try { if (!File.Exists(file_path)) return "文件不存在"; //初始化文件 NPOI.HSSF.UserModel.HSSFWorkbook theBook = null; using (FileStream file = new FileStream(file_path, FileMode.Open, FileAccess.ReadWrite)) { theBook = new NPOI.HSSF.UserModel.HSSFWorkbook(file); } //检查表格是否符合 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; //x 列 int col_index_x = 1; //y 列 int col_index_y = 2; 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 ("无法读取表头文件"); } else if (cell_0.StringCellValue.Contains("序号")) { col_index_x = 1; col_index_y = 2; } else if (cell_0.StringCellValue.Contains("流量")) { col_index_x = 0; col_index_y = 1; } NPOI.SS.UserModel.IRow row_temp; NPOI.SS.UserModel.ICell cell; int line = 0; for (line = start_line; line < 1000; line++) { row_temp = sheet1.GetRow(line); if (row_temp == null) break; cell = row_temp.GetCell(col_index_x); if (cell == null) break; if (!ParseCellValue(cell, out double x)) break; cell = row_temp.GetCell(col_index_y); if (cell == null) break; if (!ParseCellValue(cell, out double y)) break; list.Add(new Model.CurvePoint(x, y)); } } catch (Exception ex) { return "文件异常!"; } return ""; } public static string ParsePumpExcel(string fileName, out List qh, out List qe, out List qp) { qh = new List(); qe = new List(); qp = new List(); try { if (!File.Exists(fileName)) return "文件不存在"; int line = 0; //初始化文件 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"); if (sheet1 == null) { sheet1 = theBook.GetSheetAt(0); if (sheet1 == null) return ("无Sheet数据"); } //标题行 int title_line_index = 0; //流量列 int col_index_q = 1; //扬程列 int col_index_h = 2; //效率列 int col_index_e = 3; //功率列 int col_index_p = 4; 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 ("无法读取表头文件"); } else if (cell_0.StringCellValue.Contains("序号")) { col_index_q = 1; col_index_h = 2; col_index_e = 3; col_index_p = 4; } else if (cell_0.StringCellValue.Contains("流量")) { col_index_q = 0; col_index_h = 1; col_index_e = 2; col_index_p = 3; } NPOI.SS.UserModel.IRow row_temp = null; NPOI.SS.UserModel.ICell cell; var list = new List<(double Q, double H, double P, double E)>(); for (line = start_line; line < 1000; line++) { row_temp = sheet1.GetRow(line); if (row_temp == null) break; cell = row_temp.GetCell(col_index_q); if (cell == null) break; if (!ParseCellValue(cell, out double flow)) break; if (flow < 0) break; cell = row_temp.GetCell(col_index_h); if (cell == null) break; if (!ParseCellValue(cell, out double head)) break; if (head < 0) break; cell = row_temp.GetCell(col_index_e); if (cell == null) break; if (!ParseCellValue(cell, out double eff)) { eff = -1; } cell = row_temp.GetCell(col_index_p); if (cell == null) break; if (!ParseCellValue(cell, out double power)) { power = -1; } if (eff > 0) { power = Model.CurveCalcuHelper.CalculateP(flow, head, eff); } else { eff = Model.CurveCalcuHelper.CalculateE(flow, head, power); } if (eff > 99) { throw new Exception("效率大于100%"); } qh.Add(new Model.CurvePoint(flow, head)); qe.Add(new Model.CurvePoint(flow, eff)); qp.Add(new Model.CurvePoint(flow, power)); } return ""; } catch (Exception ex) { return "文件异常!"; } } public static List ParsePumpExcel(string fileName) { var pt_list =new List(); try { if (!File.Exists(fileName)) return default; int line = 0; //初始化文件 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"); if (sheet1 == null) { sheet1 = theBook.GetSheetAt(0); if (sheet1 == null) throw new Exception("无Sheet数据"); } //标题行 int title_line_index = 0; //流量列 int col_index_t = 0; //流量列 int col_index_q = 1; //扬程列 int col_index_h = 2; //效率列 int col_index_e = 3; //功率列 int col_index_p = 4; var row_title = sheet1.GetRow(title_line_index); if (row_title == null) { throw new Exception("第一行第一列不能空"); } //开始读取的行 int start_line = title_line_index + 1; var cell_0 = row_title.GetCell(0); if (cell_0 == null) { throw new Exception("无法读取表头文件"); } NPOI.SS.UserModel.IRow row_temp = null; NPOI.SS.UserModel.ICell cell; var list = new List<(double Q, double H, double P, double E)>(); for (line = start_line; line < 1000; line++) { row_temp = sheet1.GetRow(line); if (row_temp == null) break; cell = row_temp.GetCell(col_index_t); if (cell == null) break; if (!ParseCellValue(cell, out DateTime time)) break; if (time== DateTime.MinValue) break; cell = row_temp.GetCell(col_index_q); if (cell == null) break; if (!ParseCellValue(cell, out double flow)) break; if (flow < 0) break; cell = row_temp.GetCell(col_index_h); if (cell == null) break; if (!ParseCellValue(cell, out double head)) break; if (head < 0) break; //cell = row_temp.GetCell(col_index_e); //if (cell == null) // break; //if (!ParseCellValue(cell, out double eff)) //{ // eff = -1; //} //cell = row_temp.GetCell(col_index_p); //if (cell == null) // break; //if (!ParseCellValue(cell, out double power)) //{ // power = -1; //} //if (eff > 0) //{ // power = Model.CurveCalcuHelper.CalculateP(flow, head, eff); //} //else //{ // eff = Model.CurveCalcuHelper.CalculateE(flow, head, power); //} //if (eff > 99) //{ // throw new Exception("效率大于100%"); //} var pt = new Model.CurveAnalyzePoint(); pt.Time = time; pt.Q = flow; pt.P1 = 0; pt.P2 =0; pt.H = head; pt.P = 3; pt.E = 99; pt.N = 2900; pt.HZ = 50; pt.Status = 1; pt_list.Add(pt); } return pt_list; } catch (Exception ex) { throw ex; } } private static bool ParseCellValue(NPOI.SS.UserModel.ICell cell, out double cell_value) { cell_value = 0; if (cell.CellType == NPOI.SS.UserModel.CellType.Numeric) { cell_value = cell.NumericCellValue; return true; } if (cell.CellType == NPOI.SS.UserModel.CellType.String) { if (double.TryParse(cell.StringCellValue, out double value)) { cell_value = value; return true; } } return false; } private static bool ParseCellValue(NPOI.SS.UserModel.ICell cell, out DateTime cell_value) { cell_value = DateTime.MinValue; if (cell.CellType == NPOI.SS.UserModel.CellType.Numeric) { cell_value = cell.DateCellValue; return true; } if (cell.CellType == NPOI.SS.UserModel.CellType.String) { if (DateTime.TryParse(cell.StringCellValue, out DateTime value)) { cell_value = value; return true; } } return false; } #endregion } }