| | |
| | | /// </summary> |
| | | public class PhartExcelHelper |
| | | { |
| | | |
| | | #region Export |
| | | |
| | | public static void ExportUniversalTemplate(string file_path, Yw.Ahart.eCurveType curve_type) |
| | |
| | | |
| | | public static string ParseUniversalExcel(string file_path, out List<Yw.Geometry.Point2d> list) |
| | | { |
| | | list = new List<Geometry.Point2d>(); ; |
| | | if (!File.Exists(file_path)) |
| | | return "文件不存在"; |
| | | |
| | | //初始化文件 |
| | | NPOI.HSSF.UserModel.HSSFWorkbook theBook = null; |
| | | using (FileStream file = new FileStream(file_path, FileMode.Open, FileAccess.Read)) |
| | | list = new List<Geometry.Point2d>(); |
| | | try |
| | | { |
| | | theBook = new NPOI.HSSF.UserModel.HSSFWorkbook(file); |
| | | } |
| | | if (!File.Exists(file_path)) |
| | | return "文件不存在"; |
| | | |
| | | //检查表格是否符合 |
| | | NPOI.SS.UserModel.ISheet sheet1 = theBook.GetSheet("Sheet1"); |
| | | if (sheet1 == null) |
| | | { |
| | | sheet1 = theBook.GetSheetAt(0); |
| | | //初始化文件 |
| | | 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) |
| | | return ("无Sheet数据"); |
| | | { |
| | | 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(x, y)); |
| | | } |
| | | } |
| | | |
| | | //标题行 |
| | | 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) |
| | | catch (Exception ex) |
| | | { |
| | | return ("第一行第一列不能空"); |
| | | 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(x, y)); |
| | | } |
| | | |
| | | return ""; |
| | | } |
| | | |
| | |
| | | qh = new List<Geometry.Point2d>(); |
| | | qe = new List<Geometry.Point2d>(); |
| | | qp = new List<Geometry.Point2d>(); |
| | | |
| | | if (!File.Exists(fileName)) |
| | | return "文件不存在"; |
| | | int line = 0; |
| | | |
| | | //初始化文件 |
| | | NPOI.HSSF.UserModel.HSSFWorkbook theBook = null; |
| | | using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read)) |
| | | try |
| | | { |
| | | theBook = new NPOI.HSSF.UserModel.HSSFWorkbook(file); |
| | | } |
| | | if (!File.Exists(fileName)) |
| | | return "文件不存在"; |
| | | int line = 0; |
| | | |
| | | //检查表格是否符合 |
| | | NPOI.SS.UserModel.ISheet sheet1 = theBook.GetSheet("Sheet1"); |
| | | if (sheet1 == null) |
| | | { |
| | | sheet1 = theBook.GetSheetAt(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) |
| | | 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; |
| | | sheet1 = theBook.GetSheetAt(0); |
| | | if (sheet1 == null) |
| | | return ("无Sheet数据"); |
| | | } |
| | | |
| | | |
| | | cell = row_temp.GetCell(col_index_p); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double power)) |
| | | { |
| | | power = -1; |
| | | } |
| | | |
| | | if (eff > 0) |
| | | { |
| | | power = Yw.Pump.CalculationHelper.CalcuP(flow, head, eff); |
| | | } |
| | | else |
| | | { |
| | | eff = Yw.Pump.CalculationHelper.CalcuE(flow, head, power); |
| | | } |
| | | |
| | | if (eff > 99) |
| | | { |
| | | throw new Exception("效率大于100%"); |
| | | } |
| | | |
| | | qh.Add(new Geometry.Point2d(flow, head)); |
| | | qe.Add(new Geometry.Point2d(flow, eff)); |
| | | qp.Add(new Geometry.Point2d(flow, power)); |
| | | } |
| | | |
| | | return ""; |
| | | } |
| | | |
| | | public static string ParseValveExcel(string fileName, out List<(Yw.Ahart.eCurveType CurveType, List<Yw.Geometry.Point2d> DefPointList, int Opening)> list) |
| | | { |
| | | list = new List<(Ahart.eCurveType CurveType, List<Geometry.Point2d> DefPointList, int Opening)>(); |
| | | if (!File.Exists(fileName)) |
| | | return "文件不存在"; |
| | | int line = 0; |
| | | |
| | | //初始化文件 |
| | | NPOI.HSSF.UserModel.HSSFWorkbook theBook = null; |
| | | using (FileStream file = new(fileName, FileMode.Open, FileAccess.Read)) |
| | | theBook = new NPOI.HSSF.UserModel.HSSFWorkbook(file); |
| | | |
| | | |
| | | //检查表格是否符合 |
| | | NPOI.SS.UserModel.ISheet sheet_ql = theBook.GetSheet("流量损失"); |
| | | if (sheet_ql != null) |
| | | { |
| | | //标题行 |
| | | int title_line_index = 0; |
| | | //开度列 |
| | | int col_index_opening = 0; |
| | | //流量列 |
| | | int col_index_flow = 1; |
| | | //水头损失列 |
| | | int col_index_head_loss = 2; |
| | | int col_index_q = 1; |
| | | //扬程列 |
| | | int col_index_h = 2; |
| | | //效率列 |
| | | int col_index_e = 3; |
| | | //功率列 |
| | | int col_index_p = 4; |
| | | |
| | | var row_title = sheet_ql.GetRow(title_line_index); |
| | | var row_title = sheet1.GetRow(title_line_index); |
| | | if (row_title == null) |
| | | { |
| | | return ("第一行第一列不能空"); |
| | |
| | | { |
| | | 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 cell_value_list = new List<(double Opening, double Flow, double HeadLoss)>(); |
| | | var list = new List<(double Q, double H, double P, double E)>(); |
| | | for (line = start_line; line < 1000; line++) |
| | | { |
| | | row_temp = sheet_ql.GetRow(line); |
| | | |
| | | row_temp = sheet1.GetRow(line); |
| | | if (row_temp == null) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_opening); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double opening)) |
| | | break; |
| | | if (opening < 0 || opening > 100) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_flow); |
| | | cell = row_temp.GetCell(col_index_q); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double flow)) |
| | |
| | | if (flow < 0) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_head_loss); |
| | | cell = row_temp.GetCell(col_index_h); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double head_loss)) |
| | | if (!ParseCellValue(cell, out double head)) |
| | | break; |
| | | if (head_loss < 0) |
| | | if (head < 0) |
| | | break; |
| | | |
| | | cell_value_list.Add((opening, flow, head_loss)); |
| | | 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 = Yw.Pump.CalculationHelper.CalcuP(flow, head, eff); |
| | | } |
| | | else |
| | | { |
| | | eff = Yw.Pump.CalculationHelper.CalcuE(flow, head, power); |
| | | } |
| | | |
| | | if (eff > 99) |
| | | { |
| | | throw new Exception("效率大于100%"); |
| | | } |
| | | |
| | | qh.Add(new Geometry.Point2d(flow, head)); |
| | | qe.Add(new Geometry.Point2d(flow, eff)); |
| | | qp.Add(new Geometry.Point2d(flow, power)); |
| | | } |
| | | |
| | | var opening_group = cell_value_list.GroupBy(x => x.Opening); |
| | | foreach (var item in opening_group) |
| | | { |
| | | var pt_list = item.Select(x => new Yw.Geometry.Point2d(x.Flow, x.HeadLoss)); |
| | | list.Add((Yw.Ahart.eCurveType.QL, pt_list.ToList(), (int)item.Key)); |
| | | } |
| | | return ""; |
| | | |
| | | } |
| | | |
| | | |
| | | //检查表格是否符合 |
| | | NPOI.SS.UserModel.ISheet sheet_ol = theBook.GetSheet("开度损失"); |
| | | if (sheet_ol != null) |
| | | catch (Exception ex) |
| | | { |
| | | //标题行 |
| | | int title_line_index = 0; |
| | | //开度列 |
| | | int col_index_opening = 0; |
| | | //损失系数列 |
| | | int col_index_k = 1; |
| | | |
| | | var row_title = sheet_ol.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 ("无法读取表头文件"); |
| | | } |
| | | |
| | | |
| | | |
| | | NPOI.SS.UserModel.IRow row_temp = null; |
| | | NPOI.SS.UserModel.ICell cell; |
| | | |
| | | var pt_list = new List<Yw.Geometry.Point2d>(); |
| | | for (line = start_line; line < 1000; line++) |
| | | { |
| | | row_temp = sheet_ol.GetRow(line); |
| | | if (row_temp == null) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_opening); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double opening)) |
| | | break; |
| | | if (opening < 0 || opening > 100) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_k); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double k)) |
| | | break; |
| | | if (k < 0) |
| | | break; |
| | | |
| | | pt_list.Add(new Geometry.Point2d(opening, k)); |
| | | } |
| | | |
| | | list.Add((Yw.Ahart.eCurveType.OL, pt_list.ToList(), 100)); |
| | | return "文件异常!"; |
| | | } |
| | | } |
| | | |
| | | if (list == null || !list.Any()) |
| | | public static string ParseValveExcel(string fileName, out List<(Yw.Ahart.eCurveType CurveType, List<Yw.Geometry.Point2d> DefPointList, int Opening)> list) |
| | | { |
| | | list = new List<(Ahart.eCurveType CurveType, List<Geometry.Point2d> DefPointList, int Opening)>(); |
| | | try |
| | | { |
| | | return ("表格不符合格式"); |
| | | } |
| | | if (!File.Exists(fileName)) |
| | | return "文件不存在"; |
| | | int line = 0; |
| | | |
| | | return ""; |
| | | //初始化文件 |
| | | NPOI.HSSF.UserModel.HSSFWorkbook theBook = null; |
| | | using (FileStream file = new(fileName, FileMode.Open, FileAccess.ReadWrite)) |
| | | theBook = new NPOI.HSSF.UserModel.HSSFWorkbook(file); |
| | | |
| | | |
| | | //检查表格是否符合 |
| | | NPOI.SS.UserModel.ISheet sheet_ql = theBook.GetSheet("流量损失"); |
| | | if (sheet_ql != null) |
| | | { |
| | | //标题行 |
| | | int title_line_index = 0; |
| | | //开度列 |
| | | int col_index_opening = 0; |
| | | //流量列 |
| | | int col_index_flow = 1; |
| | | //水头损失列 |
| | | int col_index_head_loss = 2; |
| | | |
| | | var row_title = sheet_ql.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 ("无法读取表头文件"); |
| | | } |
| | | |
| | | |
| | | |
| | | NPOI.SS.UserModel.IRow row_temp = null; |
| | | NPOI.SS.UserModel.ICell cell; |
| | | |
| | | var cell_value_list = new List<(double Opening, double Flow, double HeadLoss)>(); |
| | | for (line = start_line; line < 1000; line++) |
| | | { |
| | | row_temp = sheet_ql.GetRow(line); |
| | | if (row_temp == null) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_opening); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double opening)) |
| | | break; |
| | | if (opening < 0 || opening > 100) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_flow); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double flow)) |
| | | break; |
| | | if (flow < 0) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_head_loss); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double head_loss)) |
| | | break; |
| | | if (head_loss < 0) |
| | | break; |
| | | |
| | | cell_value_list.Add((opening, flow, head_loss)); |
| | | } |
| | | |
| | | var opening_group = cell_value_list.GroupBy(x => x.Opening); |
| | | foreach (var item in opening_group) |
| | | { |
| | | var pt_list = item.Select(x => new Yw.Geometry.Point2d(x.Flow, x.HeadLoss)); |
| | | list.Add((Yw.Ahart.eCurveType.QL, pt_list.ToList(), (int)item.Key)); |
| | | } |
| | | } |
| | | |
| | | |
| | | //检查表格是否符合 |
| | | NPOI.SS.UserModel.ISheet sheet_ol = theBook.GetSheet("开度损失"); |
| | | if (sheet_ol != null) |
| | | { |
| | | //标题行 |
| | | int title_line_index = 0; |
| | | //开度列 |
| | | int col_index_opening = 0; |
| | | //损失系数列 |
| | | int col_index_k = 1; |
| | | |
| | | var row_title = sheet_ol.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 ("无法读取表头文件"); |
| | | } |
| | | |
| | | |
| | | |
| | | NPOI.SS.UserModel.IRow row_temp = null; |
| | | NPOI.SS.UserModel.ICell cell; |
| | | |
| | | var pt_list = new List<Yw.Geometry.Point2d>(); |
| | | for (line = start_line; line < 1000; line++) |
| | | { |
| | | row_temp = sheet_ol.GetRow(line); |
| | | if (row_temp == null) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_opening); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double opening)) |
| | | break; |
| | | if (opening < 0 || opening > 100) |
| | | break; |
| | | |
| | | cell = row_temp.GetCell(col_index_k); |
| | | if (cell == null) |
| | | break; |
| | | if (!ParseCellValue(cell, out double k)) |
| | | break; |
| | | if (k < 0) |
| | | break; |
| | | |
| | | pt_list.Add(new Geometry.Point2d(opening, k)); |
| | | } |
| | | |
| | | if (pt_list.Any()) |
| | | list.Add((Yw.Ahart.eCurveType.OL, pt_list.ToList(), 100)); |
| | | } |
| | | |
| | | if (list == null || !list.Any()) |
| | | { |
| | | return ("表格不符合格式"); |
| | | } |
| | | |
| | | return ""; |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return "文件异常!"; |
| | | } |
| | | } |
| | | |
| | | private static bool ParseCellValue(NPOI.SS.UserModel.ICell cell, out double cell_value) |
| | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | } |