From b3aa95bab5796caaf28a06922abf111ae55e37df Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期六, 20 二月 2021 10:58:39 +0800 Subject: [PATCH] xlsx文件异常处理 --- src/Bro.M071.Process/M071Process.cs | 520 +++++++++++++++++++++++++++++---------------------------- 1 files changed, 265 insertions(+), 255 deletions(-) diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index f7b3f92..9f967b6 100644 --- a/src/Bro.M071.Process/M071Process.cs +++ b/src/Bro.M071.Process/M071Process.cs @@ -835,304 +835,314 @@ Directory.CreateDirectory(Config.LogPath); } var fileName = Path.Combine(Config.LogPath, $"LDSData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx"); - //bool isExisted = File.Exists(fileName); - using (ExcelPackage package = new ExcelPackage(new FileInfo(fileName))) + + try { - ExcelWorksheet rawDataSheet = null; - ExcelWorksheet slantSheet = null; - ExcelWorksheet alignmentSheet = null; - ExcelWorksheet rowAlignmentSheet = null; - - if (!package.Workbook.Worksheets.Any(s => s.Name == "RawData")) + using (ExcelPackage package = new ExcelPackage(new FileInfo(fileName))) { - package.Workbook.Worksheets.Add("RawData"); - rawDataSheet = package.Workbook.Worksheets["RawData"]; - for (int i = 0; i < Config.KeyNameCollection.Count; i++) + ExcelWorksheet rawDataSheet = null; + ExcelWorksheet slantSheet = null; + ExcelWorksheet alignmentSheet = null; + ExcelWorksheet rowAlignmentSheet = null; + + if (!package.Workbook.Worksheets.Any(s => s.Name == "RawData")) { - var cell = rawDataSheet.Cells[i + 3, 1]; - cell.Value = Config.KeyNameCollection[i]; - SetTitleCell(cell, false); + package.Workbook.Worksheets.Add("RawData"); + rawDataSheet = package.Workbook.Worksheets["RawData"]; + for (int i = 0; i < Config.KeyNameCollection.Count; i++) + { + var cell = rawDataSheet.Cells[i + 3, 1]; + cell.Value = Config.KeyNameCollection[i]; + SetTitleCell(cell, false); + } } - } - rawDataSheet = package.Workbook.Worksheets["RawData"]; + rawDataSheet = package.Workbook.Worksheets["RawData"]; - if (!package.Workbook.Worksheets.Any(s => s.Name == "Slant")) - { - package.Workbook.Worksheets.Add("Slant"); + if (!package.Workbook.Worksheets.Any(s => s.Name == "Slant")) + { + package.Workbook.Worksheets.Add("Slant"); + slantSheet = package.Workbook.Worksheets["Slant"]; + + var keyCell = slantSheet.Cells[2, 1]; + keyCell.Value = "Key"; + SetTitleCell(keyCell); + + for (int i = 0; i < Config.KeyNameCollection.Count; i++) + { + var cell = slantSheet.Cells[i + 3, 1]; + cell.Value = Config.KeyNameCollection[i]; + SetTitleCell(cell, false); + } + } slantSheet = package.Workbook.Worksheets["Slant"]; - var keyCell = slantSheet.Cells[2, 1]; - keyCell.Value = "Key"; - SetTitleCell(keyCell); - - for (int i = 0; i < Config.KeyNameCollection.Count; i++) + if (!package.Workbook.Worksheets.Any(s => s.Name == "Alignment")) { - var cell = slantSheet.Cells[i + 3, 1]; - cell.Value = Config.KeyNameCollection[i]; - SetTitleCell(cell, false); - } - } - slantSheet = package.Workbook.Worksheets["Slant"]; + package.Workbook.Worksheets.Add("Alignment"); + alignmentSheet = package.Workbook.Worksheets["Alignment"]; - if (!package.Workbook.Worksheets.Any(s => s.Name == "Alignment")) - { - package.Workbook.Worksheets.Add("Alignment"); + var keysCell = alignmentSheet.Cells[2, 1]; + keysCell.Value = "Keys"; + SetTitleCell(keysCell); + + var positionCell = alignmentSheet.Cells[2, 2]; + positionCell.Value = "Positions"; + SetTitleCell(positionCell); + + var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); + for (int i = 0; i < alignmentMeasures.Count(); i++) + { + var cellKeys = alignmentSheet.Cells[i + 3, 1]; + cellKeys.Value = alignmentMeasures[i].Keys; + SetTitleCell(cellKeys, false); + + var cellPosition = alignmentSheet.Cells[i + 3, 2]; + cellPosition.Value = alignmentMeasures[i].Positions; + SetTitleCell(cellPosition, false); + } + } alignmentSheet = package.Workbook.Worksheets["Alignment"]; - var keysCell = alignmentSheet.Cells[2, 1]; - keysCell.Value = "Keys"; - SetTitleCell(keysCell); - - var positionCell = alignmentSheet.Cells[2, 2]; - positionCell.Value = "Positions"; - SetTitleCell(positionCell); - - var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); - for (int i = 0; i < alignmentMeasures.Count(); i++) + if (!package.Workbook.Worksheets.Any(s => s.Name == "RowAlignment")) { - var cellKeys = alignmentSheet.Cells[i + 3, 1]; - cellKeys.Value = alignmentMeasures[i].Keys; - SetTitleCell(cellKeys, false); + package.Workbook.Worksheets.Add("RowAlignment"); + rowAlignmentSheet = package.Workbook.Worksheets["RowAlignment"]; - var cellPosition = alignmentSheet.Cells[i + 3, 2]; - cellPosition.Value = alignmentMeasures[i].Positions; - SetTitleCell(cellPosition, false); + var keysCell = rowAlignmentSheet.Cells[2, 1]; + keysCell.Value = "Keys"; + SetTitleCell(keysCell); + + var positionCell = rowAlignmentSheet.Cells[2, 2]; + positionCell.Value = "Positions"; + SetTitleCell(positionCell); + + var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); + for (int i = 0; i < rowAlignmentMeasures.Count(); i++) + { + var cellKeys = rowAlignmentSheet.Cells[i + 3, 1]; + cellKeys.Value = rowAlignmentMeasures[i].Keys; + SetTitleCell(cellKeys, false); + + var cellPosition = rowAlignmentSheet.Cells[i + 3, 2]; + cellPosition.Value = rowAlignmentMeasures[i].Positions; + SetTitleCell(cellPosition, false); + } } - } - alignmentSheet = package.Workbook.Worksheets["Alignment"]; - - if (!package.Workbook.Worksheets.Any(s => s.Name == "RowAlignment")) - { - package.Workbook.Worksheets.Add("RowAlignment"); rowAlignmentSheet = package.Workbook.Worksheets["RowAlignment"]; - var keysCell = rowAlignmentSheet.Cells[2, 1]; - keysCell.Value = "Keys"; - SetTitleCell(keysCell); - - var positionCell = rowAlignmentSheet.Cells[2, 2]; - positionCell.Value = "Positions"; - SetTitleCell(positionCell); - - var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); - for (int i = 0; i < rowAlignmentMeasures.Count(); i++) + #region RawData { - var cellKeys = rowAlignmentSheet.Cells[i + 3, 1]; - cellKeys.Value = rowAlignmentMeasures[i].Keys; - SetTitleCell(cellKeys, false); - - var cellPosition = rowAlignmentSheet.Cells[i + 3, 2]; - cellPosition.Value = rowAlignmentMeasures[i].Positions; - SetTitleCell(cellPosition, false); - } - } - rowAlignmentSheet = package.Workbook.Worksheets["RowAlignment"]; - - #region RawData - { - int rowDataStartCol = rawDataSheet.Dimension.Columns; - var barcodeCell = rawDataSheet.Cells[1, rowDataStartCol + 1, 1, rowDataStartCol + 4]; - barcodeCell.Merge = true; - barcodeCell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; - barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; - SetTitleCell(barcodeCell); - - var z1Cell = rawDataSheet.Cells[2, rowDataStartCol + 1]; - z1Cell.Value = "Z1"; - SetTitleCell(z1Cell); - - var z2Cell = rawDataSheet.Cells[2, rowDataStartCol + 2]; - z2Cell.Value = "Z2"; - SetTitleCell(z2Cell); - - var z3Cell = rawDataSheet.Cells[2, rowDataStartCol + 3]; - z3Cell.Value = "Z3"; - SetTitleCell(z3Cell); - - var z4Cell = rawDataSheet.Cells[2, rowDataStartCol + 4]; - z4Cell.Value = "Z4"; - SetTitleCell(z4Cell); - - exportData.KeyUnitDataList.ForEach(k => - { - int keyIndex = Config.KeyNameCollection.IndexOf(k.Key); - if (keyIndex < 0) - { - LogAsync(DateTime.Now, "Excel瀵煎嚭閿欒", $"{k.Key}鐨凴awData鏈兘鑾峰彇琛屼俊鎭紝鏈鍑�"); - return; - } - - int zIndex = int.Parse(k.MeasurementItem.Substring(1)); - - var cell = rawDataSheet.Cells[keyIndex + 1 + 2, rowDataStartCol + zIndex]; - cell.Value = string.IsNullOrWhiteSpace(k.ItemValue) ? "NA" : k.ItemValue; - }); - } - #endregion - - #region Slant - var slantMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Slant")).ToList(); - if (slantMeasures.Count > 0) - { - int slantStartCol = slantSheet.Dimension.Columns; - - var barcodeCell = slantSheet.Cells[1, slantStartCol + 1]; - barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; - SetTitleCell(barcodeCell); - - var valueCell = slantSheet.Cells[2, slantStartCol + 1]; - valueCell.Value = "Value"; - SetTitleCell(valueCell); - - slantMeasures.ForEach(m => - { - int rowIndex = Config.KeyNameCollection.IndexOf(m.Keys); - if (rowIndex < 0) - { - LogAsync(DateTime.Now, "Excel瀵煎嚭閿欒", $"{m.Keys}鐨凷lant鏈兘鑾峰彇琛屼俊鎭紝鏈鍑�"); - return; - } - - var cellValue = slantSheet.Cells[rowIndex + 1 + 2, slantStartCol + 1]; - //var cellResult = slantSheet.Cells[rowIndex + 1 + 2, slantStartCol + 2]; - - cellValue.Value = m.MeasurementValue; - //cellResult.Value = m.MeasurementResult; - - if (m.MeasurementResult != "OK") - { - SetNGCell(cellValue); - //SetNGCell(cellResult); - } - }); - } - #endregion - - #region Alignment - { - var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); - if (alignmentMeasures.Count > 0) - { - List<string> keysList = new List<string>(); - int allRowNums = alignmentSheet.Dimension.Rows; - int aligneStartCol = alignmentSheet.Dimension.Columns; - - for (int i = 3; i <= alignmentSheet.Dimension.End.Row; i++) - { - string keys = alignmentSheet.Cells[i, 1].Value.ToString(); - string position = alignmentSheet.Cells[i, 2].Value.ToString(); - - keysList.Add($"{keys}_{position}"); - } - - //var barcodeCell = alignmentSheet.Cells[1, aligneStartCol + 1, 1, aligneStartCol + 2]; - //barcodeCell.Merge = true; - //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; - //SetTitleCell(barcodeCell); - - var barcodeCell = alignmentSheet.Cells[1, aligneStartCol + 1]; + int rowDataStartCol = rawDataSheet.Dimension.Columns; + var barcodeCell = rawDataSheet.Cells[1, rowDataStartCol + 1, 1, rowDataStartCol + 4]; + barcodeCell.Merge = true; + barcodeCell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; SetTitleCell(barcodeCell); - var valueCell = alignmentSheet.Cells[2, aligneStartCol + 1]; - valueCell.Value = "Value"; - SetTitleCell(valueCell); + var z1Cell = rawDataSheet.Cells[2, rowDataStartCol + 1]; + z1Cell.Value = "Z1"; + SetTitleCell(z1Cell); - //var resultCell = alignmentSheet.Cells[2, aligneStartCol + 2]; - //resultCell.Value = "Result"; - //SetTitleCell(resultCell); + var z2Cell = rawDataSheet.Cells[2, rowDataStartCol + 2]; + z2Cell.Value = "Z2"; + SetTitleCell(z2Cell); - alignmentMeasures.ForEach(a => + var z3Cell = rawDataSheet.Cells[2, rowDataStartCol + 3]; + z3Cell.Value = "Z3"; + SetTitleCell(z3Cell); + + var z4Cell = rawDataSheet.Cells[2, rowDataStartCol + 4]; + z4Cell.Value = "Z4"; + SetTitleCell(z4Cell); + + exportData.KeyUnitDataList.ForEach(k => { - int rowIndex = keysList.IndexOf($"{a.Keys}_{a.Positions}"); - if (rowIndex < 0) + int keyIndex = Config.KeyNameCollection.IndexOf(k.Key); + if (keyIndex < 0) { - LogAsync(DateTime.Now, "Excel瀵煎嚭閿欒", $"{a.Keys}_{a.Positions}鐨凙lignment鏈兘鑾峰彇琛屼俊鎭紝鏈鍑�"); + LogAsync(DateTime.Now, "Excel瀵煎嚭閿欒", $"{k.Key}鐨凴awData鏈兘鑾峰彇琛屼俊鎭紝鏈鍑�"); return; } - var cellValue = alignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 1]; - //var cellResult = alignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 2]; + int zIndex = int.Parse(k.MeasurementItem.Substring(1)); - cellValue.Value = a.MeasurementValue; - //cellResult.Value = a.MeasurementResult; + var cell = rawDataSheet.Cells[keyIndex + 1 + 2, rowDataStartCol + zIndex]; + cell.Value = string.IsNullOrWhiteSpace(k.ItemValue) ? "NA" : k.ItemValue; + }); + } + #endregion - if (a.MeasurementResult != "OK") + #region Slant + var slantMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Slant")).ToList(); + if (slantMeasures.Count > 0) + { + int slantStartCol = slantSheet.Dimension.Columns; + + var barcodeCell = slantSheet.Cells[1, slantStartCol + 1]; + barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; + SetTitleCell(barcodeCell); + + var valueCell = slantSheet.Cells[2, slantStartCol + 1]; + valueCell.Value = "Value"; + SetTitleCell(valueCell); + + slantMeasures.ForEach(m => + { + int rowIndex = Config.KeyNameCollection.IndexOf(m.Keys); + if (rowIndex < 0) + { + LogAsync(DateTime.Now, "Excel瀵煎嚭閿欒", $"{m.Keys}鐨凷lant鏈兘鑾峰彇琛屼俊鎭紝鏈鍑�"); + return; + } + + var cellValue = slantSheet.Cells[rowIndex + 1 + 2, slantStartCol + 1]; + //var cellResult = slantSheet.Cells[rowIndex + 1 + 2, slantStartCol + 2]; + + cellValue.Value = m.MeasurementValue; + //cellResult.Value = m.MeasurementResult; + + if (m.MeasurementResult != "OK") { SetNGCell(cellValue); //SetNGCell(cellResult); } }); } - } - #endregion + #endregion - #region RowAlignment - { - var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); - if (rowAlignmentMeasures.Count > 0) + #region Alignment { - List<string> keysList = new List<string>(); - int allRowNums = rowAlignmentSheet.Dimension.Rows; - int aligneStartCol = rowAlignmentSheet.Dimension.Columns; - - for (int i = 3; i <= allRowNums; i++) + var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); + if (alignmentMeasures.Count > 0) { - string keys = alignmentSheet.Cells[i, 1].Value.ToString(); - string position = alignmentSheet.Cells[i, 2].Value.ToString(); + List<string> keysList = new List<string>(); + int allRowNums = alignmentSheet.Dimension.Rows; + int aligneStartCol = alignmentSheet.Dimension.Columns; - keysList.Add($"{keys}_{position}"); + for (int i = 3; i <= alignmentSheet.Dimension.End.Row; i++) + { + string keys = alignmentSheet.Cells[i, 1].Value.ToString(); + string position = alignmentSheet.Cells[i, 2].Value.ToString(); + + keysList.Add($"{keys}_{position}"); + } + + //var barcodeCell = alignmentSheet.Cells[1, aligneStartCol + 1, 1, aligneStartCol + 2]; + //barcodeCell.Merge = true; + //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; + //SetTitleCell(barcodeCell); + + var barcodeCell = alignmentSheet.Cells[1, aligneStartCol + 1]; + barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; + SetTitleCell(barcodeCell); + + var valueCell = alignmentSheet.Cells[2, aligneStartCol + 1]; + valueCell.Value = "Value"; + SetTitleCell(valueCell); + + //var resultCell = alignmentSheet.Cells[2, aligneStartCol + 2]; + //resultCell.Value = "Result"; + //SetTitleCell(resultCell); + + alignmentMeasures.ForEach(a => + { + int rowIndex = keysList.IndexOf($"{a.Keys}_{a.Positions}"); + if (rowIndex < 0) + { + LogAsync(DateTime.Now, "Excel瀵煎嚭閿欒", $"{a.Keys}_{a.Positions}鐨凙lignment鏈兘鑾峰彇琛屼俊鎭紝鏈鍑�"); + return; + } + + var cellValue = alignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 1]; + //var cellResult = alignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 2]; + + cellValue.Value = a.MeasurementValue; + //cellResult.Value = a.MeasurementResult; + + if (a.MeasurementResult != "OK") + { + SetNGCell(cellValue); + //SetNGCell(cellResult); + } + }); } - - //var barcodeCell = rowAlignmentSheet.Cells[1, aligneStartCol + 1, 1, aligneStartCol + 2]; - //barcodeCell.Merge = true; - //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; - //SetTitleCell(barcodeCell); - - var barcodeCell = rowAlignmentSheet.Cells[1, aligneStartCol + 1]; - barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; - SetTitleCell(barcodeCell); - - var valueCell = rowAlignmentSheet.Cells[2, aligneStartCol + 1]; - valueCell.Value = "Value"; - SetTitleCell(valueCell); - - //var resultCell = rowAlignmentSheet.Cells[2, aligneStartCol + 2]; - //resultCell.Value = "Result"; - //SetTitleCell(resultCell); - - rowAlignmentMeasures.ForEach(a => - { - int rowIndex = keysList.IndexOf($"{a.Keys}_{a.Positions}"); - if (rowIndex < 0) - { - LogAsync(DateTime.Now, "Excel瀵煎嚭閿欒", $"{a.Keys}_{a.Positions}鐨凴owAlignment鏈兘鑾峰彇琛屼俊鎭紝鏈鍑�"); - return; - } - - var cellValue = rowAlignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 1]; - //var cellResult = rowAlignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 2]; - - cellValue.Value = a.MeasurementValue; - //cellResult.Value = a.MeasurementResult; - - if (a.MeasurementResult != "OK") - { - SetNGCell(cellValue); - //SetNGCell(cellResult); - } - }); } - } - #endregion + #endregion - package.Save(); + #region RowAlignment + { + var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); + if (rowAlignmentMeasures.Count > 0) + { + List<string> keysList = new List<string>(); + int allRowNums = rowAlignmentSheet.Dimension.Rows; + int aligneStartCol = rowAlignmentSheet.Dimension.Columns; - rawDataSheet.Dispose(); - slantSheet.Dispose(); - alignmentSheet.Dispose(); - rowAlignmentSheet.Dispose(); - }; + for (int i = 3; i <= allRowNums; i++) + { + string keys = alignmentSheet.Cells[i, 1].Value.ToString(); + string position = alignmentSheet.Cells[i, 2].Value.ToString(); + + keysList.Add($"{keys}_{position}"); + } + + //var barcodeCell = rowAlignmentSheet.Cells[1, aligneStartCol + 1, 1, aligneStartCol + 2]; + //barcodeCell.Merge = true; + //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; + //SetTitleCell(barcodeCell); + + var barcodeCell = rowAlignmentSheet.Cells[1, aligneStartCol + 1]; + barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; + SetTitleCell(barcodeCell); + + var valueCell = rowAlignmentSheet.Cells[2, aligneStartCol + 1]; + valueCell.Value = "Value"; + SetTitleCell(valueCell); + + //var resultCell = rowAlignmentSheet.Cells[2, aligneStartCol + 2]; + //resultCell.Value = "Result"; + //SetTitleCell(resultCell); + + rowAlignmentMeasures.ForEach(a => + { + int rowIndex = keysList.IndexOf($"{a.Keys}_{a.Positions}"); + if (rowIndex < 0) + { + LogAsync(DateTime.Now, "Excel瀵煎嚭閿欒", $"{a.Keys}_{a.Positions}鐨凴owAlignment鏈兘鑾峰彇琛屼俊鎭紝鏈鍑�"); + return; + } + + var cellValue = rowAlignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 1]; + //var cellResult = rowAlignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 2]; + + cellValue.Value = a.MeasurementValue; + //cellResult.Value = a.MeasurementResult; + + if (a.MeasurementResult != "OK") + { + SetNGCell(cellValue); + //SetNGCell(cellResult); + } + }); + } + } + #endregion + + package.Save(); + + rawDataSheet.Dispose(); + slantSheet.Dispose(); + alignmentSheet.Dispose(); + rowAlignmentSheet.Dispose(); + }; + } + catch (Exception ex) + { + LogAsync(DateTime.Now, "Excel鏃ュ織寮傚父", ex.GetExceptionMessage()); + string bkFileName = Path.Combine(Config.LogPath, $"{Path.GetFileNameWithoutExtension(fileName)}_bk_{DateTime.Now.ToString("HHmmss")}.xlsx"); + File.Copy(fileName, bkFileName); + File.Delete(fileName); + } } }); } -- Gitblit v1.8.0