Handsontable 序列词创建

Posted

技术标签:

【中文标题】Handsontable 序列词创建【英文标题】:Handsontable Sequence word creation 【发布时间】:2016-04-19 13:50:39 【问题描述】:

感谢这个精彩的插件。

我正在使用这个插件来实现网格功能。为此,我尝试在下拉时使用序列词创建。

据我所知,我已经实施了。但是我在选择并拖动多列时遇到了一个问题。

我为此示例创建了jsfiddle

var myData = [
    ["WIRE-001", 10, 11, 12, 13],
    ["WIRE-002", 20, 11, 14, 13],
    ["WIRE-003", 30, 15, 12, 13]
];

$("#exampleGrid").handsontable(
    data: myData,
    startRows: 5,
    startCols: 5,
    //minSpareCols: 1, //always keep at least 1 spare row at the right
    minSpareRows: 10, //always keep at least 1 spare row at the bottom,
    rowHeaders: true,
    colHeaders: true,
    contextMenu: true,
    currentRowClassName: 'currentRow',
    currentColClassName: 'currentCol',
    outsideClickDeselects: false,
    fillHandle: true,
    beforeAutofill: function(start, end, data) 
        console.log(arguments);
        console.log(start);
        console.log(end);
        console.log(data);
        var selectedVal = this.getSelected();
        var selectedData = this.getData(selectedVal[0], selectedVal[1], selectedVal[2], selectedVal[3]);
        var sequenceNum = [];
        var sequenceWord = [];
        var numberFormat = 1;
        if (start.col == 0) 
            for (var j = 0; j < selectedData.length; j++) 
                var numbers = selectedData[j][0].match(/[0-9]+$/g);
                if (numbers && !isNaN(numbers[0])) 
                    numberFormat = numbers[0].length;
                    sequenceNum.push(Number(numbers[0]));
                
                var words = selectedData[j][0].match(/[A-Za-z\-]+/g);
                if (words && isNaN(words[0])) 
                    sequenceWord.push(words[0]);
                
            
            var prefix = sequenceWord.length > 0 ? sequenceWord[0] : "";
            var lastValue = sequenceNum[sequenceNum.length - 1]
            var diff = sequenceNum.length > 1 ? (sequenceNum[sequenceNum.length - 1] - sequenceNum[sequenceNum.length - 2]) : 1;
            for (var i = 0; i < end.row; i++) 
                if (!data[i])  data[i] = []; 
                data[i][0] = prefix + pad((lastValue + diff), numberFormat);
                diff++;
            
        
    ,
    afterChange: function(changes, source) 

    
);

感谢您帮助解决这个问题。

【问题讨论】:

如果您选择区域 A1 到 C4 并拖动到第 10 行,您将看到我要说的问题。 【参考方案1】:

我建议打开控制台并检查错误,因为这样做会非常清楚您的问题是什么。导致您在评论中提到的错误的示例使用了一个空行。在你的代码中你正在做

var words = selectedData[j][0].match(/[A-Za-z\-]+/g);

但是,selectedData[j][0] 将是 null。我会简单地添加一个空行检查并适当地处理它(扔掉它或默认为某个值)

【讨论】:

您好,感谢您的回复。序列词创建正在正确创建。我的问题是当我选择多列和多行并拖动时,列 A 正在正确生成,因为我只生成到该特定列。其他列未正确自动填充。

以上是关于Handsontable 序列词创建的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Handson 表格单元格中添加垫子图标或电子表格图标?

自定义渲染器功能在 Handsontable 插件中不起作用

Handsontable 重复表

如何为 Handsontable 创建动态列?

我创建了一个 Handsontable 并想要呈现 Json 数据?

创建handsontable后添加自定义单元格