Пример #1
0
 public void EvaluateLoops(ISheet sheet)
 {
     for (var r = sheet.FirstRowNum; r <= sheet.LastRowNum; r++)
     {
         var row = sheet.GetRow(r);
         if (row == null)
         {
             continue;
         }
         var rowIndex = 0;
         foreach (var cell in row.Cells)
         {
             // skip affected rows
             if (rowIndex > row.RowNum)
             {
                 continue;
             }
             var cellValue = GetStringCellValue(cell);
             if (LiquidHelper.ContainsLiquidTag(cellValue) && Regex.IsMatch(cellValue, @"{%\s*for"))
             {
                 var loop = LiquidLoop.Parse(LiquidHelper.UnwrapLiquidTag(cellValue));
                 if (loop == null)
                 {
                     continue;
                 }
                 loop.NumOfRepeats = Binder.Count(loop.CollectionName);
                 rowIndex          = row.RowNum + 1;
                 while (loop.Next())
                 {
                     WorkbookProvider.DuplicateRow(sheet, rowIndex);
                     EvaluateRow(sheet.GetRow(rowIndex), loop);
                     rowIndex++;
                 }
                 // check only first cell
                 break;
             }
         }
     }
 }