Google visualization 更改google.visualization.DataTable()列值时出现类型不匹配错误,即使在显式更改其数据类型后也是如此

Google visualization 更改google.visualization.DataTable()列值时出现类型不匹配错误,即使在显式更改其数据类型后也是如此,google-visualization,Google Visualization,我有一个由google.visualization.data.group()返回的数据表 我想将几个列设置为具有工具提示角色的字符串类型,并将其中的值转换为html字符串 for (var col=2; col < aggData.getNumberOfColumns(); col = col + 2){ aggData.setColumnProperties(col,{'type':'string', 'role':'tooltip', 'p':{'html':true}});

我有一个由
google.visualization.data.group()返回的数据表

我想将几个列设置为具有工具提示角色的字符串类型,并将其中的值转换为html字符串

for (var col=2; col < aggData.getNumberOfColumns(); col = col + 2){
    aggData.setColumnProperties(col,{'type':'string', 'role':'tooltip', 'p':{'html':true}});
    //looking to see if the column type was actually changed
    console.log('Column '+col+' type: ' + aggData.getColumnProperty(col, 'type'))
    for (var row = 0; row < aggData.getNumberOfRows(); row = row + 1){
        aggData.setValue(row, col, getHTML(aggData.getValue(row, col)))
    }
}

function getHTML(count) {;
    return 'Projects Completed: <b>' + count + '</b>';
}
我还尝试使用
setColumnProperty()
方法设置列类型,但结果相同。我错过了什么

================================================================================================

如果需要,下面是较大脚本的一个片段

示例输入数据如下所示

"Oct 1, 2019, 12:00:00 AM",Team C,68
"Sep 23, 2019, 12:00:00 AM",Team C,68
"Nov 29, 2019, 12:00:00 AM",Team C,87
"Dec 31, 2019, 12:00:00 AM",Team C,62
 ....................................
"Nov 21, 2018, 12:00:00 AM",Team A,79
"Dec 29, 2018, 12:00:00 AM",Team A,58
"Nov 15, 2018, 12:00:00 AM",Team B,96
"Dec 29, 2018, 12:00:00 AM",Team B,77
正在将数据读入数据表

var data = new google.visualization.DataTable();
data.addColumn('datetime', 'Year');
data.addColumn('string', 'Team');
data.addColumn('number', 'Total Score');


var groupData = google.visualization.data.group(
    data,
    [
        {
            column: 0,
            modifier: getYear,
            type: 'number'
        },
        1
    ],
    [
        {
            column: 2,
            aggregation: google.visualization.data.sum,
            type: 'number'
        },
        {
            column: 2,
            aggregation: google.visualization.data.count,
            type: 'number',
            role: 'tooltip'
        }
    ]
);

// create data view from groupData
var view = new google.visualization.DataView(groupData);

// sum column array
var aggColumns = [];

// use year (column 0) as first view column
var viewColumns = [0];

// build calculated view & agg columns for each team
groupData.getDistinctValues(1).forEach(function (team, index) {
    // add a column to the view for each team
    viewColumns.push({
        calc: function (dt, row) {
            if (dt.getValue(row, 1) === team) {
                return dt.getValue(row, 2);
            }
            return null;
        },
        label: team,
        type: 'number'
    });

    viewColumns.push({
        calc: function (dt, row) {
            if (dt.getValue(row, 1) === team) {
                return dt.getValue(row, 3);
            }
            return null;
        },
        label: 'Number of Projects',
        type: 'number'
    });

    // add sum column for each team
    aggColumns.push({
        aggregation: google.visualization.data.sum,
        column: index*2 + 1,
        label: team,
        type: 'number'
    });

    aggColumns.push({
        aggregation: google.visualization.data.sum,
        column: index*2 + 2,
        type: 'number',
        role: 'tooltip',
    });
});

// set view columns
view.setColumns(viewColumns);
var aggData = google.visualization.data.group(
    view,
    [0],
    aggColumns
);
/*
The aggData looks like

"2,018",137,2,173,2,0,0 
"2,019",864,12,"1,028",12,610,12
 */

for (var col=2; col < aggData.getNumberOfColumns(); col = col + 2){
    aggData.setColumnProperties(col,{'type':'string', 'role':'tooltip', 'p':{'html':true}});
    console.log('Column '+col+' type: ' + aggData.getColumnProperty(col, 'type'))
    for (var row = 0; row < aggData.getNumberOfRows(); row = row + 1){
        aggData.setValue(row, col, getHTML(aggData.getValue(row, col)))
    }
}
var data=new google.visualization.DataTable();
data.addColumn('datetime','Year');
data.addColumn('string','Team');
data.addColumn('数字','总分');
var groupData=google.visualization.data.group(
数据,
[
{
列:0,
修饰符:getYear,
类型:“编号”
},
1.
],
[
{
专栏:2,
聚合:google.visualization.data.sum,
键入:“数字”
},
{
专栏:2,
聚合:google.visualization.data.count,
键入:“编号”,
角色:“工具提示”
}
]
);
//从groupData创建数据视图
var view=newgoogle.visualization.DataView(groupData);
//和列数组
var aggColumns=[];
//使用年份(第0列)作为第一个视图列
var viewColumns=[0];
//为每个团队构建计算视图和agg列
groupData.GetDistinctValue(1).forEach(函数(团队,索引){
//为每个团队在视图中添加一列
viewColumns.push({
计算:函数(dt,行){
如果(dt.getValue(第1行)==团队){
返回dt.getValue(第2行);
}
返回null;
},
标签:团队,
键入:“数字”
});
viewColumns.push({
计算:函数(dt,行){
如果(dt.getValue(第1行)==团队){
返回dt.getValue(第3行);
}
返回null;
},
标签:“项目数量”,
键入:“数字”
});
//为每个团队添加“总和”列
推({
聚合:google.visualization.data.sum,
列:索引*2+1,
标签:团队,
键入:“数字”
});
推({
聚合:google.visualization.data.sum,
列:索引*2+2,
键入:“编号”,
角色:“工具提示”,
});
});
//设置视图列
view.setColumns(viewColumns);
var aggData=google.visualization.data.group(
看法
[0],
聚合柱
);
/*
数据看起来像
"2,018",137,2,173,2,0,0 
"2,019",864,12,"1,028",12,610,12
*/
for(var col=2;col
数据表方法
setColumnProperties
没有达到预期效果

它只设置列-->
'p':{'html':true}

因此,在代码运行后,列属性中会出现以下内容

'p': {'type':'string', 'role':'tooltip', 'p':{'html':true}}
事实上,不可能更改列的类型,
一旦它被创建

相反,您需要使用
addColumn
insertColumn
方法

另一种选择是使用数据视图。
然后可以使用计算列作为工具提示,
并排除要更改的原始列,

在数据视图上使用
setColumns
方法。

非常感谢您的澄清…..这很有趣(对新手来说有点误导),我假设
类型
标签
角色
等都是列的“属性”
setcolumnlab
方法,但是没有
setColumnType
setColumnRole
。。。
var data = new google.visualization.DataTable();
data.addColumn('datetime', 'Year');
data.addColumn('string', 'Team');
data.addColumn('number', 'Total Score');


var groupData = google.visualization.data.group(
    data,
    [
        {
            column: 0,
            modifier: getYear,
            type: 'number'
        },
        1
    ],
    [
        {
            column: 2,
            aggregation: google.visualization.data.sum,
            type: 'number'
        },
        {
            column: 2,
            aggregation: google.visualization.data.count,
            type: 'number',
            role: 'tooltip'
        }
    ]
);

// create data view from groupData
var view = new google.visualization.DataView(groupData);

// sum column array
var aggColumns = [];

// use year (column 0) as first view column
var viewColumns = [0];

// build calculated view & agg columns for each team
groupData.getDistinctValues(1).forEach(function (team, index) {
    // add a column to the view for each team
    viewColumns.push({
        calc: function (dt, row) {
            if (dt.getValue(row, 1) === team) {
                return dt.getValue(row, 2);
            }
            return null;
        },
        label: team,
        type: 'number'
    });

    viewColumns.push({
        calc: function (dt, row) {
            if (dt.getValue(row, 1) === team) {
                return dt.getValue(row, 3);
            }
            return null;
        },
        label: 'Number of Projects',
        type: 'number'
    });

    // add sum column for each team
    aggColumns.push({
        aggregation: google.visualization.data.sum,
        column: index*2 + 1,
        label: team,
        type: 'number'
    });

    aggColumns.push({
        aggregation: google.visualization.data.sum,
        column: index*2 + 2,
        type: 'number',
        role: 'tooltip',
    });
});

// set view columns
view.setColumns(viewColumns);
var aggData = google.visualization.data.group(
    view,
    [0],
    aggColumns
);
/*
The aggData looks like

"2,018",137,2,173,2,0,0 
"2,019",864,12,"1,028",12,610,12
 */

for (var col=2; col < aggData.getNumberOfColumns(); col = col + 2){
    aggData.setColumnProperties(col,{'type':'string', 'role':'tooltip', 'p':{'html':true}});
    console.log('Column '+col+' type: ' + aggData.getColumnProperty(col, 'type'))
    for (var row = 0; row < aggData.getNumberOfRows(); row = row + 1){
        aggData.setValue(row, col, getHTML(aggData.getValue(row, col)))
    }
}
'p': {'type':'string', 'role':'tooltip', 'p':{'html':true}}