javascript - 如何发送带有公式字段的handsontable

标签 javascript c# jquery handsontable

我已经创建了带有公式字段的handsontable。当我保存表格时,我在 C# 数据表中得到公式而不是公式结果。 听到的是我将表发送到 C# webmethod 的代码:

var workTypeData = $.parseJSON(data.d[1]);
var container = document.getElementById('example');
hot = new Handsontable(container, {
    data: workTypeData,
    rowHeaders: true,
    contextMenu: false,
    colHeaders: ['RoomDescriptionID', 'RoomDescriptionName', 'Area', 'Perimeter', 'Height'],
    columns: [
        { data: 'RoomDescriptionID' },
        { data: 'RoomDescriptionName' },
        { data: 'Area' },
        { data: 'Perimeter' },
        { data: 'Height' }
    ],
    formulas: true,
    manualColumnResize: true
});

var mydata = JSON.stringify(hot.getData());
$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "FormulaBuilder.aspx/OnSave",
    data: "{ 'data' : '" + mydata + "' }",
    success: function (data) {
        if (data.d[0].length > 0) {
            alert("error in code");
        } else {
            
        }
    },
    error: function (jqXhr, exception) {
        alert("error in ajax");
    }
});

以下是我的 c# webmethod:

var dt = JsonConvert.DeserializeObject<DataTable>(data);

我得到了 json 格式的数据,如下所示:

[{"RoomDescriptionID":1,"RoomDescriptionName":"Vestibule + Living + Dining","Area":"=SUM(D1:E1)","Perimeter":"=$E1/0.5","Height":0},{"RoomDescriptionID":2,"RoomDescriptionName":"Kitchen","Area":"=SUM(D2:E2)","Perimeter":"=$E2/0.5","Height":0},{"RoomDescriptionID":3,"RoomDescriptionName":"Area below Kitchen Platform","Area":"=SUM(D3:E3)","Perimeter":"=$E3/0.5","Height":0},{"RoomDescriptionID":4,"RoomDescriptionName":"Bed Room 1","Area":"=SUM(D4:E4)","Perimeter":"=$E4/0.5","Height":0},{"RoomDescriptionID":5,"RoomDescriptionName":"BR1 Toilet + Dress","Area":"=SUM(D5:E5)","Perimeter":"=$E5/0.5","Height":0},{"RoomDescriptionID":6,"RoomDescriptionName":"Bed Room 2","Area":"=SUM(D6:E6)","Perimeter":"=$E6/0.5","Height":0},{"RoomDescriptionID":7,"RoomDescriptionName":"BR2 Toilet + Dress","Area":"=SUM(D7:E7)","Perimeter":"=$E7/0.5","Height":0},{"RoomDescriptionID":8,"RoomDescriptionName":"Bed Room 3","Area":"=SUM(D8:E8)","Perimeter":"=$E8/0.5","Height":0},{"RoomDescriptionID":9,"RoomDescriptionName":"BR3 Toilet + Dress","Area":"=SUM(D9:E9)","Perimeter":"=$E9/0.5","Height":0}]

在区域中它返回公式而不是结果

谢谢。

最佳答案

我遇到了同样的问题,但在 this question 的帮助下解决了它.

首先,您可以使用 hot.plugin.helper.cellValue('CELL REF') 来获取实际值,但是当使用 getData() 时,您正在查看整个集合。为了解决这个问题,我基本上迭代了数组,用值替换任何公式单元格(我只需要直到“K”的列):

var aCols = ['A','B','C','D','E','F','G','H','I','J','K'];                   
var mydata = hot.getData();

for (i = 0; i < mydata.length; i++){
    for(j = 0; j < mydata[i].length; j++){
        if(mydata[i][j].toString().indexOf('=') > -1){
            mydata[i][j] = hot.plugin.helper.cellValue (aCols[j] + (i+1));
        }
    }
}

关于javascript - 如何发送带有公式字段的handsontable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30317791/

相关文章:

javascript - .load() 适用于窗口,不适用于 ID

c# - 在 XPath 中对结果进行分组

javascript - 仅在单击时打开 Jquery-ui 工具提示

javascript - 支架位置不对?

javascript - NiceScroll 不适用于 Html

c# - 在C#中将小端转换为大端

c# - 带有 AdoNetAppender 的 Log4Net - 没有任何反应

javascript - 如何将值从 View 传递到 MVC ASP .NET 中的另一个 Controller

javascript - jQuery animate 链接在运行时更改动画速度

javascript - try-catch block 是使用 `in` 运算符的可靠方法吗?