public static SheetCtx New(Metadata meta, Dictionary <string, object> headerValues, AsyncExprCtx parent) { var sc = meta.ctxHdr; var values = new object[sc.values.Count]; sc.values.CopyTo(values, 0); var k2n = sc.name2ndx; values[k2n[HdrCellsRef.name]] = headerValues; { var prevRowVals = new OPs.ListOfConst(); for (int i = meta.ctxRow.values.Count; i > 0; i--) { prevRowVals.Add(null); } // imitate empty zero row prevRowVals[iRowVals] = new Dictionary <string, object>(); values[k2n[PrevValsRef.name]] = prevRowVals; } // template metadata info context var aec = new AsyncExprCtx(sc.parent, sc.parent.values, parent); // var ctx = new SheetCtx(meta, values, aec); return(ctx.Condition ? ctx : null); }
public static object WRptGenerateReportExpr(CallExpr ce, Generator.Ctx callerCtx)//(object tmplFileName, Expr outputFilesExpr) { var ctx = new Generator.Ctx(callerCtx); ctx.CreateValue(FuncDefs_Core.stateTryGetConst, string.Empty); var templateFileName = Convert.ToString(Generator.Generate(ce.args[0], ctx)); var outputFilesExpr = ce.args[1]; var sheetExprs = new List <Expr>(); int iSheet = 0; int blockNum = 0; var xr = new Xlsx.Reader(templateFileName); var lstStrTbl = new OPs.ListOfConst(xr.stringTable); ctx.CreateValue(XlsxR.Sheet.sStrTbl, lstStrTbl); foreach (var s in xr.EnumSheetInfos()) { var cells = new XlsxR.Sheet(s.sheetCells.ToArray(), xr.styles); var sheetExpr = cells.GetSheetExpr(s.sheetFile, ctx, outputFilesExpr, ref blockNum); sheetExprs.Add(new CallExpr(FuncDefs_Core._block, sheetExpr, XlsxR.PROGRESS("sheet", new ConstExpr(xr.sheetNames[iSheet])) )); iSheet++; } ; var loopRef = new ReferenceExpr("sheet"); var res = CallExpr.Eval( CallExpr.let(new ConstExpr(XlsxR.Sheet.sTmplFiles), new ConstExpr(xr.xmlFiles)), CallExpr.let(new ConstExpr(XlsxR.Sheet.sStrTbl), new ConstExpr(lstStrTbl)), XlsxR.PROGRESS("sheets", new ConstExpr(new OPs.ListOfConst(xr.sheetNames))), new CallExpr(FuncDefs_Core._ForEach, loopRef, new ArrayExpr(sheetExprs), loopRef), new CallExpr((Fxy)WRptCopyFiles, new ConstExpr(xr.xmlFiles), outputFilesExpr), new CallExpr((Fx)WRptWriterDone, outputFilesExpr) ); return(res); }