2010-11-19 19 views
1

SlickGrid ile elektronik tabloların belirli bir davranışını taklit etmek istiyorum. kullanıcı:Excel, SlickGrid ile davranış gibi Excel

  1. tık bir hücreyi
  2. =sum( girer ya da her türlü formülü
  3. orijinal hücre adresinin kullanıcı hücre aralığını seçer
  4. kaydedilir etkinleştirmek için (Ben orijinal olduğunu varsayalım hücre düzenleyiciyi kapatır) Odak, yeni hücre aralığına eklendiğinde özgün hücreye döndürülür. yani = toplam (r1c1, r2c2).

Beni neyin attığını odak değiştirmek gerekiyor.

var cell_with_formula = null; 
grid = new Grid($("#myGrid"), data, columns, options); 

// save original cell address, but there is no onBlur event 
grid.onBlur = function(args){ 
    cell_with_formula = args; // save address 
}; 

grid.onCellRangeSelected = function(){ 
    if(cell_with_formula){ 
    // check if cell_with_formula has `=` at begining 
    // if so, append selected range  
    cell_with_formula = null; 
    } 
}; 

Şimdiden teşekkürler!

+0

Üzerindeyim :) umarım bu hafta ilk 2.0alpha taahhüt eder. – Tin

+1

Formül değerlendirmesini destekleyen bir deneysel demosu kodladım. http://blog.pseudoglossa.gr/2012/08/formula-evaluation-in-slickgrid/ – fusion

cevap

6

Bu, SlickGrid 1.4.x sürümünde mümkün değildir, ancak şu anda hala etkin geliştirme aşamasında olan 2.0 sürümünde desteklenecektir. Alfa, GitHub - https://github.com/mleibman/SlickGrid/tree/v2.0a'da ayrı bir dalda barındırılıyor ve bunu bir örnekle destekleyen ön kodda yeni kontrol ettim. Lütfen https://github.com/mleibman/SlickGrid/commit/17b1bb8f3c43022ee6aec89dcab185cd368b8785'a bakın.

Burada temel bir formül editörü uygulama görebilirsiniz:

 
function FormulaEditor(args) { 
    var _self = this; 
    var _editor = new TextCellEditor(args); 
    var _selector; 

    $.extend(this, _editor); 

    function init() { 
     // register a plugin to select a range and append it to the textbox 
     // since events are fired in reverse order (most recently added are executed first), 
     // this will override other plugins like moverows or selection model and will 
     // not require the grid to not be in the edit mode 
     _selector = new Slick.CellRangeSelector(); 
     _selector.onCellRangeSelected.subscribe(_self.handleCellRangeSelected); 
     args.grid.registerPlugin(_selector); 
    } 

    this.destroy = function() { 
     _selector.onCellRangeSelected.unsubscribe(_self.handleCellRangeSelected); 
     grid.unregisterPlugin(_selector); 
     _editor.destroy(); 
    }; 

    this.handleCellRangeSelected = function(e, args) { 
     _editor.setValue(_editor.getValue() + args.range); 
    }; 


    init(); 
}