| | |
| | | |
| | | } |
| | | |
| | | public static void ExportValveTemplate(string file_path) |
| | | { |
| | | NPOI.HSSF.UserModel.HSSFWorkbook theBook = new NPOI.HSSF.UserModel.HSSFWorkbook(); |
| | | |
| | | var theSheet1 = theBook.CreateSheet("流量损失"); |
| | | NPOI.SS.UserModel.IRow rowTile1 = theSheet1.CreateRow(0); |
| | | rowTile1.CreateCell(0).SetCellValue("开度 %"); |
| | | rowTile1.CreateCell(1).SetCellValue("流量 m³/h"); |
| | | rowTile1.CreateCell(2).SetCellValue("水头损失 m"); |
| | | |
| | | var theSheet2 = theBook.CreateSheet("开度损失"); |
| | | NPOI.SS.UserModel.IRow rowTile2 = theSheet2.CreateRow(0); |
| | | rowTile2.CreateCell(0).SetCellValue("开度 %"); |
| | | rowTile2.CreateCell(1).SetCellValue("损失系数 k"); |
| | | |
| | | |
| | | theSheet1.ForceFormulaRecalculation = true; |
| | | theSheet2.ForceFormulaRecalculation = true; |
| | | |
| | | using FileStream fs = File.OpenWrite(file_path); |
| | | theBook.Write(fs); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region Parse |
| | |
| | | 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; |
| | | |
| | | 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)); |
| | | } |
| | | |
| | | list.Add((Yw.Ahart.eCurveType.OL, pt_list.ToList(), 100)); |
| | | } |
| | | |
| | | if (list == null || !list.Any()) |
| | | { |
| | | return ("表格不符合格式"); |
| | | } |
| | | |
| | | return ""; |
| | | } |
| | | |
| | | private static bool ParseCellValue(NPOI.SS.UserModel.ICell cell, out double cell_value) |
| | | { |
| | | cell_value = 0; |