找回密码
 立即注册

QQ登录

只需一步,快速开始

Yaykl

注册会员

2

主题

6

帖子

18

积分

注册会员

积分
18
  • 73

    金币

  • 2

    主题

  • 6

    帖子

最新发帖

[处理中] V12版本

Yaykl
注册会员   /  发表于:2024-11-15 17:14  /   查看:73  /  回复:5
2金币
image.png155079955.png

现在初始化表单以后,把鼠标移到表头上就会变色,而且还能选择一列,怎样让鼠标光标移到表头时不变色且不能通过点击表头选择一列

5 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:3 天前
沙发
您好,
参考这篇文章自定义表头hover等样式。
https://gcdn.grapecity.com.cn/showtopic-90058-1-1.html
另外,“点击表头选择一列”是维持Excel的设计,为什么要禁止这一操作呢?
回复 使用道具 举报
Yaykl
注册会员   /  发表于:3 天前
板凳
Lynn.Dou 发表于 2024-11-18 09:45
您好,
参考这篇文章自定义表头hover等样式。
https://gcdn.grapecity.com.cn/showtopic-90058-1-1.html
...

我这个表头序号栏次那一列,在初始化完表单以后就自动变黄色,就是像把鼠标焦点挪上去的那种黄色,但是我没有设置初始化完以后默认选中第一列这个操作,这是因为什么
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:3 天前
地板
从描述无法判断原因,请直接提供一个可复现的demo,我们验证下。
回复 使用道具 举报
Yaykl
注册会员   /  发表于:前天 09:20
5#
Lynn.Dou 发表于 2024-11-18 16:55
从描述无法判断原因,请直接提供一个可复现的demo,我们验证下。

html代码:
<link rel="stylesheet" type="text/css" href="../wsql/exec?sk=gc.spread.sheets.12.2.1.css" />
<style>
    body {
        position: relative;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
    }
</style>

<div id="container" style="position: relative;height:96%;display:flex;flex-direction: column;">
    <div id="spread" style="flex:1;"></div>
</div>
js代码:
window.lc();

                const GcSpread = GC.Spread;
                const SpreadNS = GcSpread.Sheets;
                const Spread = SpreadNS.Workbook;

                //// region 基础用法
               

                var excelio = new GC.Spread.Excel.IO(); // 导入导出组件

                GC.Spread.Common.CultureManager.culture("zh-cn");//应用汉化
               
                var spread = new GC.Spread.Sheets.Workbook( // spread核心组件
                    document.getElementById('spread'),
                    {
                        sheetCount: 1,
                        scrollbarShowMax: false,
                        scrollbarMaxAlign: true,
                        tabNavigationVisible: false,
                        tabStripVisible: false,
                        newTabVisible: false,
                    }

                );
                //spreadInit();
                //初始化表单皮肤
                initSpread(spread);
                let sheet = spread.getActiveSheet();
                //设置整行选择模式
                selectionPattern(spread);
                //隐藏默认序号列
                sheet.setColumnVisible(0, false, SpreadNS.SheetArea.rowHeader);
                //设置表头
                var colHeader = SpreadNS.SheetArea.colHeader;
                sheet.setRowCount(2, colHeader);
                sheet.setColumnCount(6);
                setHeader(sheet, colHeader);
                refreshScrollBar(spread);
                spread.options.grayAreaBackColor = 'white';
                // function spreadInit() {
                    
                    
                    
                // }
                window.sp = spread;
               
                //初始化表单皮肤
                function initSpread(spread) {
                    if (!spread) {
                        console.warn('spread表格对象不能为空');
                        return;
                    }
                    var sheet = spread.getActiveSheet();
                    spread.options.referenceStyle = SpreadNS.ReferenceStyle.R1C1;
                    sheet.suspendPaint();//停止重绘
                    //设置初始行数为0行
                    sheet.setRowCount(0)
                    //设置公共配置
                    var colcount = sheet.getColumnCount();
                    sheet.selectionPolicy(GC.Spread.Sheets.SelectionPolicy.range);
                    spread.options.selectionBackColor = 'rgba(86,180,255,0.3)'
                    spread.options.selectionBorderColor = '#CCE8FF'

                    sheet.defaults.rowHeight = 30;
                    var style = new SpreadNS.Style();
                    style.vAlign = GC.Spread.Sheets.VerticalAlign.center;
                    style.font = "11pt SimSun";
                    sheet.setDefaultStyle(style);
                    // 边框
                    const lineBorder = new SpreadNS.LineBorder(
                        "#B0C4DE",
                        SpreadNS.LineStyle.thin
                    );

                    for (let index = 0; index < colcount; index++) {
                        //"#B0C4DE"亮钢蓝边线
                        sheet.getRange(-1, index).borderBottom(lineBorder);
                        sheet.getRange(-1, index).borderTop(lineBorder);
                        sheet.getRange(-1, index).borderLeft(lineBorder);
                        sheet.getRange(-1, index).borderRight(lineBorder);
                        sheet.getRange(-1, index, SpreadNS.SheetArea.colHeader).borderBottom(lineBorder);
                        sheet.getRange(-1, index, SpreadNS.SheetArea.colHeader).borderTop(lineBorder);
                        sheet.getRange(-1, index, SpreadNS.SheetArea.colHeader).borderLeft(lineBorder);
                        sheet.getRange(-1, index, SpreadNS.SheetArea.colHeader).borderRight(lineBorder);
                    }
                    //改变表头的宽度触发的方法
                    sheet.bind(GC.Spread.Sheets.Events.ColumnWidthChanged, function (e, info) {
                        refreshXScrollBar(spread, sheet)
                    });
                    //设置表单保护
                    sheet.options.isProtected = true;
                    sheet.resumePaint();//重绘
                }
                //设置表头
                function setHeader(sheet, colHeader) {
                    
                    //设置表头第一行内容
                    sheet.setValue(0, 0, '序号', colHeader);
                    sheet.setValue(0, 1, '选择', colHeader);
                    sheet.setValue(0, 2, '账号', colHeader);
                    sheet.setValue(0, 3, '姓名', colHeader);
                    sheet.setValue(0, 4, '手机号', colHeader);
                    sheet.setValue(0, 5, '密码', colHeader);
                    //设置表头第二行内容
                    var a = 0;
                    for (var i = 0; i < sheet.getColumnCount(); i++) {
                        if (i == 0) {
                            sheet.setValue(1, i, '栏次', colHeader);
                        } else {
                            a++;
                            sheet.setValue(1, i, a, colHeader);
                        }
                    }
                    //绑定表头字段
                    sheet.bindColumn(0, { name: 'rn', displayName: '栏次', size: 50 });
                    sheet.bindColumn(1, { name: 'ck', displayName: '1', size: 50 });
                    sheet.bindColumn(2, { name: 'code', displayName: '2', size: 200 });
                    sheet.bindColumn(3, { name: 'name', displayName: '3', size: 120 });
                    sheet.bindColumn(4, { name: 'mobile', displayName: '4', size: 200 });
                    sheet.bindColumn(5, { name: 'pwd', displayName: '5', size: 120 });
                    
                    //允许用户改变列宽
                    sheet.options.protectionOptions.allowResizeColumns = true;
                    //定义复选列的CellType
                    var cellType = new GC.Spread.Sheets.CellTypes.CheckBox();
                    cellType.textAlign(GC.Spread.Sheets.CellTypes.CheckBoxTextAlign.right);
                    cellType.isThreeState(false);
                    sheet.getRange(-1, 1, -1, 1).cellType(cellType);
                    //解锁复选列
                    sheet.getRange(-1, 1, -1, 1).locked(false);
                    
                }
                // 设置单击选中行
                function selectionPattern(spread) {
                    if (!spread) {
                        console.warn('spread对象不能为空');
                        return;
                    }
                    //获取当前sheet页
                    const sheet = spread.getActiveSheet();
                    // 设置单击选中行
                    sheet.selectionUnit(GC.Spread.Sheets.SelectionUnit.row);
                    sheet.selectionPolicy(GC.Spread.Sheets.SelectionPolicy.range);
                    spread.options.selectionBackColor = 'rgba(86,180,255,0.3)';
                    spread.options.selectionBorderColor = '#CCE8FF';
                }
                //控制X和Y轴滚动条是否显示或隐藏
                function refreshScrollBar(spreadObj) {
                    if (!spreadObj) {
                        console.warn('表格对象不能为空');
                        return;
                    }
                    //x轴滚动条计算方法
                    refreshXScrollBar(spreadObj);
                    //y轴滚动条计算方法
                    refreshYScrollBar(spreadObj);
                }
                //控制X轴滚动条是否显示或隐藏
                function refreshXScrollBar(spread, sheet) {
                    if (!spread) {
                        console.warn('spread表格对象不能为空');
                        return;
                    }
                    sheet = sheet == null ? spread.getActiveSheet() : sheet;
                    let colCount = sheet.getColumnCount() // 总列数

                    let rcol = sheet.getViewportRightColumn(1) // 视图列数
                    console.log('colCount', colCount);
                    console.log('rcol', rcol);
                    if (colCount === rcol + 1) {
                        spread.options.showHorizontalScrollbar = false
                    } else if (colCount > rcol + 1) {
                        spread.options.showHorizontalScrollbar = true
                    }
                }
                //控制Y轴滚动条是否显示或隐藏
                function refreshYScrollBar(spread) {
                    if (!spread) {
                        console.warn('spread表格对象不能为空');
                        return;
                    }
                    const sheet = spread.getActiveSheet();
                    if ((sheet.getViewportBottomRow(1) + 1) >= sheet.getRowCount() && sheet.getViewportTopRow(1) <= 0) {
                        spread.options.showVerticalScrollbar = false;
                    } else {
                        spread.options.showVerticalScrollbar = true;
                    }
                }
麻烦给看一下吧,谢谢
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:前天 17:09
6#
您的代码中,将表单的行数设置为了0,将表头设置为两行。也就是说,截图中其实只有表头没有普通单元格。
这并非常规使用方式,所以需要您先明确这是否符合设计。且代码中看存在冗余代码,建议梳理清楚需求后重新设计。

再回到您两个需求本身:
1、不希望表头被选中
  1. sheet.clearSelection()
复制代码

2、不允许整列表头被选中(只读)
开启表单保护,且设置allowSelectLockedCells、allowSelectUnlockedCells 为 false。
  1. //设置表单保护
  2.                 sheet.options.protectionOptions = {
  3.                     allowSelectLockedCells: false,
  4.                     allowSelectUnlockedCells: false,
  5.                 };
  6.                 sheet.options.isProtected = true;
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部