spreadjs 按钮单元格、复选框单元格、普通组合框单元格、超链接单元格

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="utf-8" />

    <!-- disable IE compatible view -->

    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

    <meta name="spreadjs culture" content="zh-cn" />

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" , user-scalable=no" />

    <title>SpreadJS Demo : 单元格类型</title>

    <!-- CDN Reference    -->

    <link rel="icon" type="image/png" href="https://demo.grapecity.com.cn/SpreadJS/TutorialSample/icon.ico" />

    <link rel=" stylesheet" type="text/css" href="https://cdn.grapecity.com.cn/spreadjs/css/basscss.min.css" />

    <link rel="stylesheet" type="text/css" href="https://cdn.grapecity.com.cn/spreadjs/css/gc.spread.sheets.excel2013white.12.0.6.css" />

    <script type="text/javascript" src="https://cdn.grapecity.com.cn/spreadjs/scripts/gc.spread.sheets.all.12.0.6.min.js"></script>

    <script type="text/javascript" src="https://cdn.grapecity.com.cn/spreadjs/scripts/resources/zh/gc.spread.sheets.resources.zh.12.0.6.min.js"></script>

    <script type="text/javascript" src="https://cdn.grapecity.com.cn/spreadjs/scripts/jquery-1.11.1.min.js"></script>

    <script type="text/javascript" src="https://demo.grapecity.com.cn/SpreadJS/TutorialSample/js/spread/license.js"></script>

    <!-- 页面内自定义 CSS-->

    <style>

        body {

        background: rgb(250, 250, 250);

        color: #333;

      }

      #ss {

          border: 1px #ccc solid;

      }

      .container {

        width: 95%;

        background: rgb(250, 250, 250);

        margin: 0 auto;

        height: 600px;

      }

      .full-height {

        height: 100%;

      }

        .left{

            height: 100%;

            overflow: auto;

        }

    </style>

</head>

<body>

    <div class="container">

        <div class="clearfix border-bottom">

            <div class="col col-8">

                <h3>SpreadJS Demo : 单元格类型</h3>

            </div>

            <div class="col col-4 right-align align-middle">

                <h5>

                    <ul class="list-reset">

                        <li class="inline-block mr1"><a class="btn" href="https://www.grapecity.com.cn/developer/spreadjs "

                                target="_blank ">产品官网</a></li>

                        <li class="inline-block mr1"><a class="" href="https://gcdn.grapecity.com.cn/showforum-185-1.html "

                                target="_blank ">论坛求助</a></li>

                        <li class="inline-block mr1"><a class="" href="https://demo.grapecity.com.cn/SpreadJS/TutorialSample/#/samples "

                                target="_blank ">更多示例</a></li>

                    </ul>

                </h5>

            </div>

        </div>

        <div class="full-height clearfix mt2">

            <div class="col col-4 left">

                <h4 class="mb0">单元格类型</h4>

                <p  style="width: 90%"class="m0 ">

                    说明:右图展示了多种单元格类型:

                    按钮单元格、复选框单元格、普通组合框单元格、超链接单元格

                </p>

                <h4 class="mb0">自定义单元格</h4>

                </div>

            <div class="col col-8 full-height ">

                <div id="ss" style="height:680px"></div>

            </div>

        </div>

    </div>

</body>

<script type="text/javascript ">

    var spreadNS = GC.Spread.Sheets;

    $(document).ready(function () {

        var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));

        var sheet = spread.getActiveSheet();

        var spreadNS = GC.Spread.Sheets;

        sheet.suspendPaint();

        sheet.name('基本应用');

        // 按钮

        sheet.setValue(1,1,'按钮类型');

        sheet.setColumnWidth(4, 110);

        sheet.setColumnWidth(3, 110);

        sheet.setColumnWidth(2, 110);

        sheet.setColumnWidth(1, 180);

        sheet.setColumnWidth(0, 10);

        sheet.setRowHeight(1, 50);

        sheet.setRowHeight(2, 50);

        // 创建单元格类型对象

        var b0 = new spreadNS.CellTypes.Button();

        b0.text("按钮1");

        b0.marginLeft(0);

        b0.marginTop(0);

        b0.marginRight(15);

        b0.marginBottom(15);

        b0.buttonBackColor('gray');

        var b1 = new spreadNS.CellTypes.Button();

        b1.text("按钮2");

        b1.marginLeft(15);

        b1.marginTop(15);

        b1.marginRight(15);

        b1.marginBottom(15);

        b1.buttonBackColor('red');

        var b2 = new spreadNS.CellTypes.Button();

        b2.text("按钮3");

        b2.marginLeft(15);

        b2.marginTop(15);

        b2.marginRight(0);

        b2.marginBottom(0);

        b2.buttonBackColor('green');

        // SetCellType方法将单元格类型对象设置到单元格上

        sheet.setCellType(1,2,b0,spreadNS.SheetArea.viewport);

        sheet.setCellType(1,3,b1,spreadNS.SheetArea.viewport);

        sheet.setCellType(1,4,b2,spreadNS.SheetArea.viewport);

      // checkbox

        var c = new GC.Spread.Sheets.CellTypes.CheckBox();

        c.isThreeState(true);

        c.textTrue('已选中');

        c.textFalse("未选中");

        c.textIndeterminate('不确定');

        c.textAlign(GC.Spread.Sheets.CellTypes.CheckBoxTextAlign.left);

        var c1 = new spreadNS.CellTypes.CheckBox();

        c1.isThreeState(false);

        c1.textTrue('已选中');

        c1.textFalse("未选中");

        c1.textAlign(GC.Spread.Sheets.CellTypes.CheckBoxTextAlign.bottom);

        var c2 = new spreadNS.CellTypes.CheckBox();

        c2.caption('CheckBox');

        sheet.setCellType(2,2,c,spreadNS.SheetArea.viewport);

        sheet.setCellType(2,3,c1,spreadNS.SheetArea.viewport);

        sheet.setCellType(2,4,c2,spreadNS.SheetArea.viewport);

        sheet.setValue(2,1,"checkbox类型");

        c2.textAlign(GC.Spread.Sheets.CellTypes.CheckBoxTextAlign.left);

      // comboBox

        var combo = new spreadNS.CellTypes.ComboBox();

        combo.items([{ text: "选项1", value: "11" }, { text: "选项2", value: "22" }, { text: "选项3", value: "33" }]);

        // text 、index、value 将选中项目的文本值(下表、数据值)写入数据模型中

        combo.editorValueType(spreadNS.CellTypes.EditorValueType.text);

        combo.editable(true).editorValueType(spreadNS.CellTypes.EditorValueType.value);

        combo.itemHeight(24);

        var combo1 = new spreadNS.CellTypes.ComboBox();

        combo1.items([{ text: "选项1", value: "11" }, { text: "选项2", value: "22" }, { text: "选项3", value: "33" }]);

        combo1.editorValueType(spreadNS.CellTypes.EditorValueType.text);

        combo1.editable(false).editorValueType(spreadNS.CellTypes.EditorValueType.text);

        combo1.itemHeight(44);

        sheet.getCell(3, 2, spreadNS.SheetArea.viewport).cellType(combo).value("选项1");

        sheet.setValue(3, 1, "ComboBox类型可编辑");

        sheet.getCell(4, 2, spreadNS.SheetArea.viewport).cellType(combo1).value("选项1");

        sheet.setValue(4, 1, "ComboBox类型不可编辑");

        sheet.setFormula(3, 3, "=C4");

        sheet.setFormula(4, 3, "=C5");

        //超链接

        var h = new spreadNS.CellTypes.HyperLink();

        h.text("SpreadJS Overview");

        sheet.setCellType(5, 2, h, spreadNS.SheetArea.viewport);

        sheet.getCell(5, 2, spreadNS.SheetArea.viewport).value("http://www.grapecity.com/en/spreadjs/");

        sheet.setValue(5, 1, "超链接类型");

        h.linkColor('red');

        h.visitedLinkColor('blue');

        var h1 = new spreadNS.CellTypes.HyperLink();

        setCellTypeCallback(spread, sheet, h1);

        sheet.setCellType(6, 2, h1, spreadNS.SheetArea.viewport);

        sheet.getCell(6, 2, spreadNS.SheetArea.viewport).value("http://www.grapecity.com/en/spreadjs/");

        sheet.setValue(6, 1, "超链接回调");

        function setCellTypeCallback(spread, sheet, h) {

            h.text("点击添加样式");

            h.linkToolTip("点击添加样式");

            h.activeOnClick(true);

            h.onClickAction(function () {

                spread.commandManager().execute({cmd: "setSheetTabStyle"});

            });

            return h;

        }

        spread.commandManager().register("setSheetTabStyle", {

            canUndo: true,

            execute: function (context, options, isUndo) {

                sheet.name("超链接");

                sheet.options.sheetTabColor = "red";

            }

        }, null, false, false, false, false);

        sheet.resumePaint();


        /*---------------------------自定义单元格---------------*/

        var sheet1 = new GC.Spread.Sheets.Worksheet('自定义单元格');

        spread.addSheet(1,sheet1);

        sheet1.suspendPaint();

        sheet1.setColumnWidth(0, 100);

        sheet1.setColumnWidth(1, 170);

        function FullNameCellType() {

        }

        FullNameCellType.prototype = new spreadNS.CellTypes.Base();

        FullNameCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {

            if (value) {

                spreadNS.CellTypes.Base.prototype.paint.apply(this,

                [ctx, value.firstName + "." + value.lastName, x, y, w, h, style, options]);

            }

        };

        FullNameCellType.prototype.updateEditor = function(editorContext, cellStyle, cellRect) {

            if (editorContext) {

                editorContext.style.width=cellRect.width;

                editorContext.style.height=100;

                return {height: 100};

            }

        };

        FullNameCellType.prototype.createEditorElement = function () {

            var div = document.createElement("div");

            div.setAttribute("gcUIElement", "gcEditingInput");

            div.style.backgroundColor= "white";

            div.style.overflow= "hidden";

            var span1 = document.createElement('span');

            span1.style.display = "block";

            var span2 = document.createElement("span");

            span2.style.display = "block";

            var input1 = document.createElement("input");

            var input2 = document.createElement("input");

            var type = document.createAttribute('type');

            type.nodeValue="text";

            var clonedType = type.cloneNode(true);

            input1.setAttributeNode(type);

            input2.setAttributeNode(clonedType);

            div.appendChild(span1);

            div.appendChild(input1);

            div.appendChild(span2);

            div.appendChild(input2);

            return div;

        };

        FullNameCellType.prototype.getEditorValue = function ( editorContext  ) {

            if (editorContext && editorContext.children.length === 4) {

                var input1 = editorContext.children[1];

                var firstName = input1.value;

                var input2 = editorContext.children[3];

                var lastName = input2.value;

                return { firstName: firstName, lastName: lastName };

            }

        };

        FullNameCellType.prototype.setEditorValue = function (editorContext, value) {

            if (editorContext && editorContext.children.length === 4) {

                var span1 = editorContext.children[0];

                span1.innerHTML="First Name:";

                var span2 = editorContext.children[2];

                span2.innerHTML="Last Name:";

                if (value) {

                    var input1 = editorContext.children[1];

                    input1.value=value.firstName;

                    var input2 = editorContext.children[3];

                    input2.value=value.lastName;

                }

            }

        };

        FullNameCellType.prototype.isReservedKey = function (e) {

            return (e.keyCode === GC.Spread.Commands.Key.tab && !e.ctrlKey && !e.shiftKey && !e.altKey);

        };

        FullNameCellType.prototype.isEditingValueChanged = function(oldValue, newValue) {

            if (newValue.firstName != oldValue.firstName || newValue.lastName != oldValue.lastName) {

                return true;

            }

            return false;

        };

        var columnInfo = [

                { name: "person", displayName: "姓名", cellType: new FullNameCellType(), size: 170 },

                { name: "result", displayName: "收藏", cellType: new GC.Spread.Sheets.CellTypes.CheckBox(), size: 50 },

                { name: "money", displayName: "余额", size: 50 ,formatter:'_(¥* #,##0.00_)',size: 90}

            ];

        var source = [

                { money:-100,result: true, person: {firstName:"LeBron",lastName:"James"}},

                { money:-100,result: false, person: { firstName: "Chris", lastName: "Bosh" } },

                { money:160,result: true, person: { firstName: "Dwyane", lastName: "Wade" } },

                { money:1060,result: false, person: { firstName: "Mike", lastName: "Miller" } },

                { money:-1400,result: true, person: { firstName: "Mike", lastName: "Miller" } },

                { money:-4100,result: true, person: { firstName: "Udonis", lastName: "Haslem" } },

                { money:1400,result: true, person: { firstName: "Mario", lastName: "Chalmers" } },

                { money:1200,result: true, person: { firstName: "Joel", lastName: "Anthony" } },

                { money:40,result: false, person: { firstName: "Shane", lastName: "Battier" } },

                { money:14,result: false, person: { firstName: "Ray", lastName: "Allen" } },

                { money:100,result: true, person: { firstName: "James", lastName: "Jones" } },

                { money:1400,result: false, person: { firstName: "Rashard", lastName: "Lewis" } },

                { money:180,result: true, person: { firstName: "Norris", lastName: "Cole" } },

                { money:190,result: true, person: { firstName: "Chris", lastName: "Andersen" } },

                { money:700,result: false, person: { firstName: "Jarvis", lastName: "Varnado" } },

                { money:-10,result: true, person: { firstName: "Juwan", lastName: "Howard" } }

            ];

        function SortHyperlinkCellType() {

            spreadNS.CellTypes.HyperLink.apply(this);

            this.text("余额排序");

        }

        SortHyperlinkCellType.prototype = new spreadNS.CellTypes.HyperLink();

        // 获取包含碰撞信息的对象

        SortHyperlinkCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {

            if (context) {

                return {

                    x: x,

                    y: y,

                    row: context.row,

                    col: context.col,

                    cellRect: cellRect,

                    cellStyle: cellStyle,

                    sheetArea: context.sheetArea,

                    isReservedLocation: true,

                    sheet: context.sheet

                };

            }

            return null;

        };

        // 处理鼠标事件

        SortHyperlinkCellType.prototype.processMouseUp = function (hitInfo) {

            var sheet = hitInfo.sheet, sheetArea = hitInfo.sheetArea,

            row = hitInfo.row, col = hitInfo.col;

            var tag = !(sheet.getTag(row, col, sheetArea) || false);

            sheet.setTag(row, col, tag, sheetArea);

            //Set to true to sort by rows, and false to sort by columns.

            sheet.sortRange(0, 0, sheet.getRowCount(), sheet.getColumnCount(), true, [{

                index: col,

                ascending: tag

            }]);

        };

        sheet1.setCellType(0, 2, new SortHyperlinkCellType(), spreadNS.SheetArea.colHeader);

            sheet1.setDataSource(source);

            sheet1.bindColumns(columnInfo);

            sheet1.resumePaint();

});

</script>

</html>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容