using LibDataBase; using OfficeOpenXml; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; namespace LibReadTetraExcel { public class ExcelHelper { public static OrderConfig ReadOCROrder(string execlFileName, string order) { OrderConfig config = new OrderConfig(); try { ExcelPackage.License.SetNonCommercialOrganization("My Noncommercial organization"); using (ExcelPackage package = new ExcelPackage(execlFileName)) { ExcelWorksheet sheet1 = package.Workbook.Worksheets["P2生成数据"]; config.ParseQSV = false; config.ParseProduct = false; config.ParseArrange = false; config.QSV = ""; config.NumberOfLanes = 0; for (int i = 1; i < sheet1.Dimension.Rows; i++) { if (sheet1.GetValue(i, 3) == null) continue; if (sheet1.Cells[i, 3].Value.ToString() != order) continue; config.QSV = sheet1.Cells[i, 4].Value.ToString(); config.NumberOfLanes = Convert.ToInt32(sheet1.Cells[i, 5].Value.ToString()); int num = 0; for (int k = 0; k < 10; k++) { string lanes = sheet1.Cells[i + k, 6].Value.ToString(); string design = sheet1.Cells[i + k, 7].Value.ToString().Split('-')[1]; string[] tmp = lanes.Substring(1, lanes.Length - 2).Split(','); num += tmp.Length; List textOCR = ExecelGetOcrText(design, sheet1.Cells[i + k, 8].Value.ToString()); foreach (string lan in tmp) { int lanInt = Convert.ToInt32(lan); config.OCRRequest[lanInt] = textOCR; config.OCRDesign[lanInt] = design; } if (num >= config.NumberOfLanes) { config.ParseQSV = true; break; } } break; } if (!config.ParseQSV) return config; config.ProductStandard = ""; ExcelWorksheet sheet2 = package.Workbook.Worksheets["QSV对应产品规格和梯度"]; for (int j = 1; j <= sheet2.Dimension.Rows; j++) { if (sheet2.GetValue(j, 1) == null) continue; if (sheet2.Cells[j, 1].Value.ToString() != config.QSV) continue; config.ProductStandard = sheet2.Cells[j, 2].Value.ToString(); config.Width = Convert.ToDouble(sheet2.Cells[j, 3].Value.ToString()); config.Height = Convert.ToDouble(sheet2.Cells[j, 4].Value.ToString()); config.Gradient = Convert.ToDouble(sheet2.Cells[j, 5].Value.ToString()); config.ParseProduct = true; break; } if (!config.ParseProduct) return config; ExcelWorksheet sheet3 = package.Workbook.Worksheets["产品规格对应排布方式"]; for (int n = 1; n < sheet3.Dimension.Rows; n++) { if (sheet3.GetValue(n, 1) == null) continue; if (sheet3.Cells[n, 1].Value.ToString() != config.ProductStandard) continue; string str = sheet3.Cells[n + config.OCRRequest[1].Count - 1, 4].Value.ToString(); string[] x_y = str.Split(','); string[] X = x_y[0].Split(':'); string[] Y = x_y[1].Split(':'); config.DistX = Convert.ToDouble(X[1].Replace("mm", "")); config.DistY = Convert.ToDouble(Y[1].Replace("mm", "")); string alignColor = sheet3.Cells[n + config.OCRRequest[1].Count - 1, 3].Value.ToString(); if (alignColor.Contains("单排")) config.ColorMax = config.OCRRequest.Values.Select(x => x.Count).Max(); else config.ColorMax = alignColor.Replace("排布", "").Split(',').ToList().Select(int.Parse).Max(); config.ColorArray = alignColor; config.ParseArrange = true; break; } } } catch (Exception) { } return config; } private static List ExecelGetOcrText(string design, string layer) { List result = new List(); string[] ll = layer.Replace("[", "").Replace("]", "").Split(','); for (int i = 0; i < ll.Length; i++) { ll[i] = ll[i].Replace(" ", ""); string[] str = ll[i].Split('-'); if (str.Length < 2) continue; result.Add(design + str[1] + str[0]); } return result; } } }