Exemple #1
0
            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);
            }
Exemple #2
0
        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);
        }