Ejemplo n.º 1
0
        List <DiffResult <string> > DiffSheetRow(ISheet sheet1, int row1, ISheet sheet2, int row2, SheetDiffStatus status, out int maxLineCount)
        {
            var list1 = new List <string>();
            var list2 = new List <string>();

            maxLineCount = 0;
            if (sheet1.GetRow(row1) != null)
            {
                var row         = sheet1.GetRow(row1);
                var columnCount = books["src"].SheetValideColumn[sheet1.SheetName];
                for (int i = 0; i < columnCount; ++i)
                {
                    var value = Util.GetCellValue(row.GetCell(i));
                    maxLineCount = Math.Max(maxLineCount, value.Count((c) => { return(c == '\n'); }) + 1);

                    list1.Add(value);
                }
            }

            if (sheet2.GetRow(row2) != null)
            {
                var row         = sheet2.GetRow(row2);
                var columnCount = books["dst"].SheetValideColumn[sheet2.SheetName];
                for (int i = 0; i < columnCount; ++i)
                {
                    var value = Util.GetCellValue(row.GetCell(i));
                    maxLineCount = Math.Max(maxLineCount, value.Count((c) => { return(c == '\n'); }) + 1);
                    list2.Add(value);
                }
            }
            var diff = DiffUtil.Diff(list1, list2);
            //var optimized = diff.ToList();// DiffUtil.OptimizeCaseDeletedFirst(diff);
            var optimized = DiffUtil.OptimizeCaseDeletedFirst(diff);

            optimized = DiffUtil.OptimizeCaseInsertedFirst(optimized);
            var tlist = optimized.ToList();

            optimized = DiffUtil.OptimizeShift(tlist, false);
            optimized = DiffUtil.OptimizeShift(optimized, true);

            return(optimized.ToList());
        }