找回密码
 立即注册

QQ登录

只需一步,快速开始

creaway

中级会员

26

主题

65

帖子

670

积分

中级会员

积分
670
creaway
中级会员   /  发表于:2017-3-9 15:27  /   查看:3898  /  回复:6
本帖最后由 creaway 于 2017-3-9 15:31 编辑

我对表单上的单元格绑定了一个画边框的事件:
$('#drawOutBorder').bind('click', function(){
        var range = getCellRange(activeSheet);
        var border = getLineStyle();
        range.setBorder(border,{outline:true});
    });
function getCellRange(sheet){
    var selectedRanges = sheet.getSelections();
    var row = selectedRanges[0].row;
    var col = selectedRanges[0].col;
    var rowCount = selectedRanges[0].rowCount;
    var colCount =selectedRanges[0].colCount;
    return new GC.Spread.Sheets.CellRange(sheet, row, col, rowCount, colCount, GC.Spread.Sheets.SheetArea.viewport);
}
function getLineStyle(){
    var lineStyle = $('#lineStyle').combobox('getValue');
    var border = new GC.Spread.Sheets.LineBorder
    switch(lineStyle){
        case "medium":
            border.style = GC.Spread.Sheets.LineStyle.medium;
            break;
        case "dashed":
            border.style = GC.Spread.Sheets.LineStyle.dashed;
            break;
        case "dotted":
            border.style = GC.Spread.Sheets.LineStyle.dotted;
            break;
        case "thick":
            border.style = GC.Spread.Sheets.LineStyle.thick;
            break;
        case "thin":
            border.style = GC.Spread.Sheets.LineStyle.medium;
            break;
    }
    return border;
   
}

在点击这个合并单元格的时候使用var cstyle = activeSheet.getActualStyle(coodrdinateX,coodrdinateY,GC.Spread.Sheets.SheetArea.viewport, true);

但在cstyle中borderTop;borderLeft;borderRight;borderBottom总有些没有值,但是表单上边框是已经画上了的,这是什么原因?
我对没有合并过的单元格使用都有取到上下左右的边框

6 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-3-9 18:01:32
沙发
您只给整个Range的外侧设置了边框,getActualStyle 是获取哪个cell的边框,哪个cell 您取消合并后可以发现是没有下边框的。

您还是需要先获取合并的range,然后通过range获取边框。range.borderBottom()
回复 使用道具 举报
creaway
中级会员   /  发表于:2017-4-13 16:26:36
板凳
最近发现用你这个方法只能取到left和top,cellRange.borderRight()和cellRange.borderBottom()取不到怎么回事

var span = activeSheet.getSpans(new GC.Spread.Sheets.Range(i, j, 1, 1));
var cellRange = activeSheet.getRange(i, j, span[0].rowCount, span[0].colCount, GC.Spread.Sheets.SheetArea.viewport);
                                        if(cellRange.borderLeft()){
                                                temp.cellStyleClass += "0";
                                        }
                                        if(cellRange.borderTop()){
                                                temp.cellStyleClass += "1";
                                        }
                                        if(cellRange.borderRight()){
                                                temp.cellStyleClass += "2";
                                        }
                                        if(cellRange.borderBottom()){
                                                temp.cellStyleClass += "3";
                                        }
回复 使用道具 举报
creaway
中级会员   /  发表于:2017-4-13 16:36:30
地板
本帖最后由 creaway 于 2017-4-13 16:42 编辑
dexteryao 发表于 2017-3-9 18:01
您只给整个Range的外侧设置了边框,getActualStyle 是获取哪个cell的边框,哪个cell 您取消合并后可以发现 ...

最近发现用你这个方法只能取到left和top,cellRange.borderRight()和cellRange.borderBottom()取不到怎么回事

var span = activeSheet.getSpans(new GC.Spread.Sheets.Range(i, j, 1, 1));
var cellRange = activeSheet.getRange(i, j, span[0].rowCount, span[0].colCount, GC.Spread.Sheets.SheetArea.viewport);
                                        if(cellRange.borderLeft()){
                                                temp.cellStyleClass += "0";
                                        }
                                        if(cellRange.borderTop()){ spreadJs.png


                                                temp.cellStyleClass += "1";
                                        }
                                        if(cellRange.borderRight()){
                                                temp.cellStyleClass += "2";
                                        }
                                        if(cellRange.borderBottom()){
                                                temp.cellStyleClass += "3";
                                        }
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-4-13 17:08:27
5#
您可以提供个完整点的Demo吗,我这里不太清楚,您最初页面设置的。
回复 使用道具 举报
creaway
中级会员   /  发表于:2017-4-14 12:00:56
6#
dexteryao 发表于 2017-4-13 17:08
您可以提供个完整点的Demo吗,我这里不太清楚,您最初页面设置的。

//合并单元格
$('#mergeCell').bind('click', function(){
                var selectedRanges = activeSheet.getSelections();
                var column = selectedRanges[0].col;
                var colCount =selectedRanges[0].colCount;
                var row = selectedRanges[0].row;
                var rowCount = selectedRanges[0].rowCount;
                activeSheet.addSpan(row, column, rowCount, colCount, GC.Spread.Sheets.SheetArea.viewport);
        });
//画边框
$('#drawOutBorder').bind('click', function(){
                var range = getCellRange(activeSheet);
                var border = getLineStyle();
                range.setBorder(border,{outline:true});
        });

这上面是对表单合并单元格并画边框线
-------------------------------------------------------------------



//判断隐藏掉的单元格
function isHiddenInSpan(row, col){
    var span = activeSheet.getSpan(row, col);
    if(span){
        if(span.row == row && span.col == col){
            return false;
        }
        else{
            return true;
        }
    }
    return false
}

//获取边框值,我是循环整个页面表单的单元格
var rowcount = activeSheet.getRowCount(GC.Spread.Sheets.SheetArea.viewport);
var colcount = activeSheet.getColumnCount(GC.Spread.Sheets.SheetArea.viewport);
for(var i = 0; i < rowcount; i++ ){
        for(var j = 0; j < colcount; j++ ){
                if(!isHiddenInSpan(i,j)){
                var span = activeSheet.getSpans(new GC.Spread.Sheets.Range(i, j, 1, 1));
                var cellRange = activeSheet.getRange(i, j, span[0].rowCount, span[0].colCount, GC.Spread.Sheets.SheetArea.viewport);
                var temp={};
                temp.cellStyleClass = "cellPanelGridTD";
                if(cellRange.borderLeft()){
                        temp.cellStyleClass += "0";
                }
                if(cellRange.borderTop()){
                        temp.cellStyleClass += "1";
                }
                if(cellRange.borderRight()){
                        temp.cellStyleClass += "2";
                }
                if(cellRange.borderBottom()){
                        temp.cellStyleClass += "3";
                }
                }
        }
}
这边对合并过的单元格只能取到left和top
最后得到的 temp.cellStyleClass=“cellPanelGridTD01”,我想要的是temp.cellStyleClass=“cellPanelGridTD0123”
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-4-17 10:59:32
7#
对于合并单元格,边框信息都还是保存在每个隐藏的单元格中的。
用getRange获取信息实际上只是获取这个区域最左上角单元格的信息。
所以,如果要获取右下边框,需要从右下角那个cell获取。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部