Google apps script 试图根据google表单的响应表创建dashbaord,这是

Google apps script 试图根据google表单的响应表创建dashbaord,这是,google-apps-script,google-forms,Google Apps Script,Google Forms,试图创建一个基于谷歌表单响应表的仪表板,这是我根据自己看过的教程所做的。。我有70多列,我正试图显示为饼图,我应该使用不同的方法来提取信息吗?我知道可能有不止一个错误,但这是我目前正在努力解决的问题: 对象类型与列类型不匹配。(第160行,文件“代码”,项目“历史部门仪表板”) 对于创建面板,您可以找到如何创建面板的示例以及必要的元素。您已经拥有了大多数必需的对象 在下面的代码中,我对示例进行了修改,使其与您拥有的类似,并且可能与您想要的类似 在获得完整的信息范围后,您可能只需要几列来构建图表。

试图创建一个基于谷歌表单响应表的仪表板,这是我根据自己看过的教程所做的。。我有70多列,我正试图显示为饼图,我应该使用不同的方法来提取信息吗?我知道可能有不止一个错误,但这是我目前正在努力解决的问题:

对象类型与列类型不匹配。(第160行,文件“代码”,项目“历史部门仪表板”)

对于创建面板,您可以找到如何创建面板的示例以及必要的元素。您已经拥有了大多数必需的对象

在下面的代码中,我对示例进行了修改,使其与您拥有的类似,并且可能与您想要的类似

在获得完整的信息范围后,您可能只需要几列来构建图表。创建图表时,您使用函数
setDataViewDefinition()
,作为参数,然后添加了函数
Charts.newDataViewDefinition().setColumns([0,1])
。在该函数中,您将从用于图表的数据范围中选择列。在本例中,我使用了第一列和第二列
[0,1]
。 如果需要第一列和第三列,可以使用
[0,2]
,依此类推

我还在变量
栏中添加了一个简单的图表(没有过滤器)。对于该图表,我还定义了所需的列,并将其直接添加到UI对象中

如果您要创建大量图表,我建议使用for循环,这样您就不会得到一个庞大的脚本

希望这有帮助

function doGet() {
   var ss = SpreadsheetApp.openById('1MjS2zr9cQVvkn7qi1CmRucVT5IacDFijHR_dRSjthnY');
   var data = ss.getDataRange().getDataTable();

   var chart = Charts.newBarChart()
       .setTitle("Ages").setDataViewDefinition(Charts.newDataViewDefinition().setColumns([0,1]))
       .build();

   var stringFilter = Charts.newStringFilter()
       .setFilterColumnIndex(0)
       .build();

   var numberRangeFilter = Charts.newNumberRangeFilter()
       .setFilterColumnIndex(1)
       .build();

   var bars =  Charts.newBarChart().setTitle('bar chart')
   .setDataTable(data)
   .setDataViewDefinition(Charts.newDataViewDefinition().setColumns([0,2]))
   .build();

   // Create a dashboard panel binding both controls to the chart.
   var dashboard = Charts.newDashboardPanel()
       .setDataTable(data)
       .bind([stringFilter, numberRangeFilter], [chart])
       .build();

   var uiApp = UiApp.createApplication().setTitle("My Dashboard");

   var panel = uiApp.createVerticalPanel().setSpacing(50);

   panel.add(stringFilter);
   panel.add(numberRangeFilter);
   panel.add(chart);
   dashboard.add(panel);
   uiApp.add(dashboard);
   uiApp.add(bars);
   return uiApp;
 }

是否尝试为每列添加图表?每次调用var pieChart时,您都在分配最新的值,因此在最后,该变量的值将仅为Charts.newPieChart().setDataViewDefinition(Charts.newDataViewDefinition().setColumns([81]),我起初是这样的,但现在我想我更愿意创建一个图表,每个列都有一个控件过滤器,这样图表就可以根据控件的参数进行更改。谢谢!我要试一试!
function doGet() {
   var ss = SpreadsheetApp.openById('1MjS2zr9cQVvkn7qi1CmRucVT5IacDFijHR_dRSjthnY');
   var data = ss.getDataRange().getDataTable();

   var chart = Charts.newBarChart()
       .setTitle("Ages").setDataViewDefinition(Charts.newDataViewDefinition().setColumns([0,1]))
       .build();

   var stringFilter = Charts.newStringFilter()
       .setFilterColumnIndex(0)
       .build();

   var numberRangeFilter = Charts.newNumberRangeFilter()
       .setFilterColumnIndex(1)
       .build();

   var bars =  Charts.newBarChart().setTitle('bar chart')
   .setDataTable(data)
   .setDataViewDefinition(Charts.newDataViewDefinition().setColumns([0,2]))
   .build();

   // Create a dashboard panel binding both controls to the chart.
   var dashboard = Charts.newDashboardPanel()
       .setDataTable(data)
       .bind([stringFilter, numberRangeFilter], [chart])
       .build();

   var uiApp = UiApp.createApplication().setTitle("My Dashboard");

   var panel = uiApp.createVerticalPanel().setSpacing(50);

   panel.add(stringFilter);
   panel.add(numberRangeFilter);
   panel.add(chart);
   dashboard.add(panel);
   uiApp.add(dashboard);
   uiApp.add(bars);
   return uiApp;
 }