SpreadJS表格控件如何实现单元格条件格式化

作者:控件中国网   出处:控件中国网   2015-09-15 09:08:35   阅读:8

当使用表格展示成千上万的数据时,由于数据太多,又采用统一的颜色或模板显示的话,就造成阅读起来相当费劲,抓不到重点数据,这时候就需要对表格进行条件格式化,把一些重要的数据通过改变其字体颜色等进行突出显示,SpreadJS可以帮助开发人员快速实现该功能,具体可以参考下面的代码:

<a href=http://www.componentcn.com/kongjianchanpin/yonghujiemian/biaogekongjian/2014-08-28/77.html target=_blank class=infotextkey>Spread</a>JS.png

var SpreadNS = GcSpread.Sheets;

        $(document).ready(function () {

            var Spread = new GcSpread.Sheets.Spread(document.getElementById("ss"), { sheetCount: 2 });

            initSpread(Spread);

        });

 

        function initSpread(Spread) {

            var sheet = Spread.getSheet(0);

            sheet.isPaintSuspended(true);

            var cfs = sheet.getConditionalFormats();

            // sample title

            sheet.addSpan(1, 1, 1, 7);

            sheet.setValue(1, 1, "Conditional Format Samples");

            sheet.getCell(1, 1).font("24px sans-serif");

            sheet.getCell(1, 1).hAlign(SpreadNS.HorizontalAlign.center);

            sheet.setRowHeight(1, 35);

            // cell value rule

            var r = 2;

            var c = 1;

            var w = 3;

            var h = 4;

            sheet.addSpan(r, c, 1, w);

            sheet.setValue(r, c, "Displays green background: value > 50:");

            sheet.getCell(r, c).wordWrap(true);

            sheet.setRowHeight(r, 40);

            var increase = 0;

            for (var row = 0; row < h - 1; row++) {

                for (var col = 0; col < w; col++) {

                    sheet.setValue(row + 3, col + 1, increase);

                    increase += 10;

                }

            }

            sheet.setBorder(new SpreadNS.Range(r, c, h, w), new SpreadNS.LineBorder("Black", SpreadNS.LineStyle.dashed), {all: true});

            var cvRule = new SpreadNS.CellValueRule();

            cvRule.ranges = [new SpreadNS.Range(r + 1, c, h - 1, w)];

            cvRule.operator = SpreadNS.ComparisonOperator.GreaterThan;

            cvRule.value1 = 50;

            var style = new SpreadNS.Style();

            style.backColor = "#CCFFCC";

            cvRule.style = style;

            cfs.addRule(cvRule);

            r = 2;

            c = 5;

            sheet.addSpan(r, c, 1, w);

            sheet.setValue(r, c, "Displays red background: value >= 60 and value <= 70:");

            sheet.getCell(r, c).wordWrap(true);

            sheet.setRowHeight(r, 40);

            increase = 0;

            for (var row = 0; row < h - 1; row++) {

                for (var col = 0; col < w; col++) {

                    sheet.setValue(row + r + 1, col + c, increase);

                    increase += 10;

                }

            }

            sheet.setBorder(new SpreadNS.Range(r, c, h, w), new SpreadNS.LineBorder("Black", SpreadNS.LineStyle.dashed), {all: true});

            cvRule = new SpreadNS.CellValueRule();

            cvRule.ranges = [ new SpreadNS.Range(r + 1, c, h - 1, w) ];

            cvRule.operator = SpreadNS.ComparisonOperator.Between;

            cvRule.value1 = 60;

            cvRule.value2 = 70;

            style = new SpreadNS.Style();

            style.backColor = "#FFCCCC";

            cvRule.style = style;

            cfs.addRule(cvRule);

            // 2 color scale rule

            r = 7;

            c = 1;

            sheet.addSpan(r, c, 1, w);

            sheet.setValue(r, c, "Displays two color gradient represents cell value:");

            sheet.getCell(r, c).wordWrap(true);

            sheet.setRowHeight(r, 40);

            increase = 0;

            for (var row = 0; row < h - 1; row++) {

                for (var col = 0; col < w; col++) {

                    sheet.setValue(row + r + 1, col + c, increase);

                    increase += 10;

                }

            }

            sheet.setBorder(new SpreadNS.Range(r, c, h, w), new SpreadNS.LineBorder("Black", SpreadNS.LineStyle.dashed), {all: true});

            var tcsRule = new SpreadNS.TwoScaleRule(SpreadNS.ScaleValueType.LowestValue, null, "#FF9999", SpreadNS.ScaleValueType.HighestValue, null, "#9999FF");

            tcsRule.ranges = [ new SpreadNS.Range(r + 1, c, h - 1, w) ];

            cfs.addRule(tcsRule);

            // 3 color scale rule

            r = 7;

            c = 5;

            sheet.addSpan(r, c, 1, w);

            sheet.setValue(r, c, "Displays three color gradient represents cell value:");

            sheet.getCell(r, c).wordWrap(true);

            sheet.setRowHeight(r, 40);

            increase = 0;

            for (var row = 0; row < h - 1; row++) {

                for (var col = 0; col < w; col++) {

                    sheet.setValue(row + r + 1, col + c, increase);

                    increase += 10;

                }

            }

            sheet.setBorder(new SpreadNS.Range(r, c, h, w), new SpreadNS.LineBorder("Black", SpreadNS.LineStyle.dashed), {all: true});

            var threecsRule = new SpreadNS.ThreeScaleRule(SpreadNS.ScaleValueType.LowestValue, null, "#FF9999",

                    SpreadNS.ScaleValueType.Number, 100, "#99FF99",

                    SpreadNS.ScaleValueType.HighestValue, null, "#9999FF");

            threecsRule.ranges = [new SpreadNS.Range(r + 1, c, h - 1, w) ];

            cfs.addRule(threecsRule);

            // date occurring rule

            addDays = function (date, days) {

                var dt = new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);

                if (days) {

                    if (dt.getDate() === date.getDate()) {

                        dt = new Date(date.getFullYear(), date.getMonth(), date.getDate());

                        dt.setTime(dt.getTime() + (days * 24 * 3600 * 1000));

                    }

                }

                return dt;

            };

            r = 12;

            c = 1;

            sheet.addSpan(r, c, 1, w);

            sheet.setValue(r, c, "Display blue background if cell value is in next week:");

            sheet.getCell(r, c).wordWrap(true);

            sheet.setRowHeight(r, 40);

            increase = 0;

            for (var row = 0; row < h - 1; row++) {

                for (var col = 0; col < w; col++) {

                    sheet.setValue(row + r + 1, col + c, addDays(new Date(), increase));

                    sheet.setFormatter(row + r + 1, col + c, "yyyy/mm/dd", SpreadNS.SheetArea.viewport);

                    increase += 1;

                }

            }

            sheet.setBorder(new SpreadNS.Range(r, c, h, w), new SpreadNS.LineBorder("Black", SpreadNS.LineStyle.dashed), {all: true});

            var doRule = new SpreadNS.DateOccurringRule();

            doRule.ranges = [ new SpreadNS.Range(r + 1, c, h - 1, w) ];

            doRule.type = SpreadNS.DateOccurringType.NextWeek;

            style = new SpreadNS.Style();

            style.backColor = "#CCCCFF";

            doRule.style = style;

            cfs.addRule(doRule);

 

            // specific text rule

            r = 12;

            c = 5;

            sheet.addSpan(r, c, 1, w);

            sheet.setValue(r, c, "Display red foreground if cell value contains \"o\":");

            sheet.getCell(r, c).wordWrap(true);

            sheet.setRowHeight(r, 40);

            var data = ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog", "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"];

            increase = 0;

            for (var row = 0; row < h - 1; row++) {

                for (var col = 0; col < w; col++) {

                    sheet.setValue(row + r + 1, col + c, data[increase]);

                    increase += 1;

                }

            }

            sheet.setBorder(new SpreadNS.Range(r, c, h, w), new SpreadNS.LineBorder("Black", SpreadNS.LineStyle.dashed), {all: true});

            var stRule = new SpreadNS.SpecificTextRule();

            stRule.ranges = [ new SpreadNS.Range(r + 1, c, h - 1, w) ];

            stRule.operator = SpreadNS.TextComparisonOperator.Contains;

            stRule.text = "o";

            var style = new SpreadNS.Style();

            style.foreColor = "Red";

            style.font = "bold 12px sans-serif";

            stRule.style = style;

            cfs.addRule(stRule);

 

            // data bar rule

            r = 17;

            c = 1;

            sheet.addSpan(r, c, 1, w);

            sheet.setValue(r, c, "Display a colored data bar represents cell value:");

            sheet.getCell(r, c).wordWrap(true);

            sheet.setRowHeight(r, 40);

            increase = 0;

            for (var row = 0; row < h - 1; row++) {

                for (var col = 0; col < w; col++) {

                    sheet.setValue(row + r + 1, col + c, increase);

                    increase += 10;

                }

            }

            sheet.setBorder(new SpreadNS.Range(r, c, h, w), new SpreadNS.LineBorder("Black", SpreadNS.LineStyle.dashed), { all: true });

            var dataBarRule = new SpreadNS.DataBarRule();

            dataBarRule.ranges = [new SpreadNS.Range(r + 1, c, h - 1, w)];

            dataBarRule.minimumType(SpreadNS.ScaleValueType.LowestValue);

            dataBarRule.maximumType(SpreadNS.ScaleValueType.HighestValue);

            dataBarRule.gradient(true);

            dataBarRule.color("green");

            dataBarRule.showBorder(false);

            dataBarRule.showBarOnly(false);

            cfs.addRule(dataBarRule);

 

 

            // icon set rule

            r = 17;

            c = 5;

            sheet.addSpan(r, c, 1, w);

            sheet.setValue(r, c, "Displays an icon represents cell value:");

            sheet.getCell(r, c).wordWrap(true);

            sheet.setRowHeight(r, 40);

            increase = 0;

            for (var row = 0; row < h - 1; row++) {

                for (var col = 0; col < w; col++) {

                    sheet.setValue(row + r + 1, col + c, increase);

                    increase += 10;

                }

            }

            sheet.setBorder(new SpreadNS.Range(r, c, h, w), new SpreadNS.LineBorder("Black", SpreadNS.LineStyle.dashed), { all: true });

            var iconSetRule = new SpreadNS.IconSetRule();

            iconSetRule.ranges = [new SpreadNS.Range(r + 1, c, h - 1, w)];

            iconSetRule.iconSetType(SpreadNS.IconSetType.FiveArrowsColored);

            iconSetRule.reverseIconOrder(false);

            iconSetRule.showIconOnly(false);

            cfs.addRule(iconSetRule);

 

            sheet.isPaintSuspended(false);

            updateRuleCount();

            $("#removeRule").click(function() {

                var sels = sheet.getSelections();

                if (sels && sels.length > 0) {

                    var sel = sels[0];

                    cfs.removeRuleByRange(sel.row, sel.col, sel.rowCount, sel.colCount);

                    updateRuleCount();

                }

            });

            $("#clearRule").click(function() {

                cfs.clearRule();

                updateRuleCount();

            });

 

            function updateRuleCount() {

                $("#ruleCount").text("Rule Count: " + cfs.count());

            }

        };

        function getActualRange(range, maxRowCount, maxColCount) {

            var row = range.row < 0 ? 0 : range.row;

            var col = range.col < 0 ? 0 : range.col;

            var rowCount = range.rowCount < 0 ? maxRowCount : range.rowCount;

            var colCount = range.colCount < 0 ? maxColCount : range.colCount;

 

            return new SpreadNS.Range(row, col, rowCount, colCount);

        }

        

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat