# Cell Formula?

Is it possible to define a cell's formula, say, cell [i][j].formula = [i][k].value * [i][f].value?

Even better, si there a way to declare a column as a calculated one, saying that some column's rows will have a specified calculation for that cell? i.e., Column("Total").setFormula('"Col1"*"Col2"');

It seems that with a data grid such as this, cell calculations should be a built-in feature. However, I haven't been able to find any references to this. Any help would be appreciated!

PS. -- I Realize that it is possible to do calculations manually through JScript, but was wondering more along the lines if AW offered any sort of built-in calculation functionality.

Thanks,

Ed

October 9,

No, there are no built-in Excel-like formulas in AW. You can use javascript functions for some of the columns -

```
function sum01(col, row){
var cell1 = this.getCellValue(0, row);
var cell2 = this.getCellValue(1, row);
return cell1 + cell2;
}
obj.setCellData(sum01, 2);
```

You can even generate these functions dynamically (using closures or nested functions) -

```
function sum(col1, col2){
return function(col, row){
var cell1 = this.getCellValue(col1, row);
var cell2 = this.getCellValue(col2, row);
return cell1 + cell2;
}
}
obj.setCellData(sum(0, 1), 2);
```

However you still need to track dependencies and refresh the cells when data changes.

Alex (ActiveWidgets)

October 9,

or, maybe this way :-)

```
function formula(operation){
return function(col1, col2){
return function(col, row){
var cell1 = this.getCellValue(col1, row);
var cell2 = this.getCellValue(col2, row);
return operation(cell1, cell2);
}
}
}
var sum = formula(function(a,b){return a+b});
var diff = formula(function(a,b){return a-b});
var product = formula(function(a,b){return a*b});
obj.setCellData(sum(0, 1), 2);
```

Alex (ActiveWidgets)

October 9,

and finally support for the nested functions and constants :-)

```
function col(i){
return function(c, r){
return this.getCellValue(i, r);
}
}
function formula(operation){
return function(arg1, arg2){
return function(c, r){
var value1 = (typeof(arg1)=='function' ? arg1.call(this, c, r) : arg1);
var value2 = (typeof(arg2)=='function' ? arg2.call(this, c, r) : arg2);
return operation(value1, value2);
}
}
}
var sum = formula(function(a,b){return a+b});
var diff = formula(function(a,b){return a-b});
var product = formula(function(a,b){return a*b});
obj.setCellData(sum(col(0), col(1)), 2);
obj.setCellData(diff(product(col(3), 1000), col(4)), 5);
```

Alex (ActiveWidgets)

October 9,

Alex (ActiveWidgets)

October 10,

How are you going to refresh the data within the cells? I understand you are calling the refresh but I am confused.

Dave

October 31,