您好!
问题1:拖动填充支持多种类型AutoFillType,如下图所示:
拖动填充如果不需要样式,可以设置拖动填充类型为AutoFillType.fillWithoutFormatting,参考如下代码:
- spread.options.defaultDragFillType = GC.Spread.Sheets.Fill.AutoFillType.fillWithoutFormatting
复制代码
但是无法不携带公式,可以在拖动填充完成后对拖动源为公式的单元格对应的填充区域取消公式,且设置该单元格的值。需要结合DragFillBlockCompleted事件实现,参考如下代码:
- spread.options.defaultDragFillType = GC.Spread.Sheets.Fill.AutoFillType.fillWithoutFormatting;
- var sheet = spread.getActiveSheet();
- sheet.bind(GC.Spread.Sheets.Events.DragFillBlockCompleted, function(e, args) {
- var {row, col, rowCount, colCount} = args.fillRange;
- var startRow = row - 1;
- sheet.suspendPaint();
- for (var j = col; j < col + colCount; j++) {
- if (sheet.getFormula(startRow, j)) {
- sheet.getRange(row, j, rowCount, 1).formula(null);
- sheet.getRange(row, j, rowCount, 1).value(sheet.getValue(startRow, j));
- }
- }
- sheet.resumePaint();
- });
复制代码
此外,SpreadJS的单元格除了保护属性外,还有隐藏属性,该属性可帮助在表单保护时隐藏公式。那么,可以在DragFillBlock事件的处理函数中对拖动填充源中包含公式的单元格设置hidden为true,同时对填充目标区域设置锁定状态locked为false,然后开启表单保护。这样,就可以将公式单元格中的计算结果拖动填充至其对应的填充区域,填充完成后通过DragFillBlockCompleted事件取消表单保护。参考如下代码:
- sheet.bind(GC.Spread.Sheets.Events.DragFillBlock, function(e, args) {
- var {row, col, rowCount, colCount} = args.fillRange;
- var startRow = row - 1;
- var protectedFlag = false;
- for (var j = col; j < col + colCount; j++) {
- if (sheet.getFormula(startRow, j)) {
- sheet.getCell(startRow, j).hidden(true);
- sheet.getRange(row, j, rowCount, 1).locked(false);
- protectedFlag = true;
- }
- }
- if (protectedFlag) {
- sheet.options.isProtected = true;
- }
- });
- sheet.bind(GC.Spread.Sheets.Events.DragFillBlockCompleted, function(e, args) {
- if (sheet.options.isProtected) {
- sheet.options.isProtected = false;
- }
- });
复制代码
上述两种方式效果如下动图所示:
问题2:拖动填充的目标单元格有值与否均可覆盖填充,如果未能填充,可能相关单元格被保护不允许编辑了。如下动图所示,对sheet绑定DragFillBlock和DragFillBlockCompleted事件,拖动填充能够正常触发事件:
问题3:设置spread.options.showDragFillSmartTag为false即可关闭拖动后的选项菜单。
|