Exemple #1
0
        protected void DoWriteDataTable(object dataSource, DataTableOptions options)
        {
            options ??= new DataTableOptions();

            var book = options.Book?.Document ?? Document;

            options ??= new DataTableOptions();

            var tableDataSource = GetDataSource(dataSource,
                                                new DataSourceParameters()
            {
                IgnoreErrors = options.IgnoreErrors, Columns = options.SelectColumns, SkipColumns = options.SkipColumns
            });

            string htmlTable;

            using (var spreadsheet = SpreadsheetUtils.CreateWorkbook())
            {
                Worksheet worksheet;

                using (new UsingProcessor(
                           () => spreadsheet.BeginUpdate(), () => spreadsheet.EndUpdate()))
                {
                    worksheet = spreadsheet.Worksheets[0];

                    var table = SpreadsheetUtils.AppendDataSource(worksheet, tableDataSource, true);

                    if (!string.IsNullOrWhiteSpace(options.Formatting))
                    {
                        var scanner = new Scanner();
                        var parser  = new Parser(scanner);

                        var tree = parser.Parse(options.Formatting);
                        if (tree.Errors.Count > 0)
                        {
                            var strErrors = new StringBuilder();

                            foreach (var error in tree.Errors)
                            {
                                if (strErrors.Length > 0)
                                {
                                    strErrors.AppendLine();
                                }
                                strErrors.Append(error.Message);
                            }

                            throw new Exception(strErrors.ToString());
                        }

                        List <BaseCommand> commands = null;
                        try
                        {
                            commands = tree.Eval() as List <BaseCommand>;
                        }
                        catch (Exception)
                        {
                            //Do nothing, skip invalid commands
                        }

                        if (commands != null)
                        {
                            var gridData = new GridData();
                            gridData.ApplyGridFormatConditions(commands);
                            SpreadsheetUtils.ApplyGridFormatting(table, gridData, false);
                        }
                    }

                    if (options.CalculatedColumns != null && options.CalculatedColumns.Length > 0)
                    {
                        for (int i = 0; i < options.CalculatedColumns.Length; i++)
                        {
                            var calculatedColumn = options.CalculatedColumns[i];
                            if (string.IsNullOrWhiteSpace(calculatedColumn))
                            {
                                continue;
                            }

                            var p = calculatedColumn.IndexOf('=');
                            if (p < 0)
                            {
                                ReportError("Cannot add calculated column: cannot get column name. Calculated columns have format '[CalcColumn1]=[Column1]*[Column2]'.");
                                continue;
                            }

                            var columnName    = calculatedColumn[..(p - 1)].Trim();
Exemple #2
0
 public SCBook WriteDataTable(object dataSource, DataTableOptions options = null)
 {
     ExecuteSynchronized(options, () => DoWriteDataTable(dataSource, options));
     return(this);
 }