0

我已经搜索过这个,但似乎找不到答案:

我在电子表格中使用查询功能来收集工作助理的评论。有 17 位评论者,我从本周和未来十周开始查询。但是,我只想要最终结果中的评论而不是空字段。我快到了,但是使用我现在使用的公式,我必须手动更新查询最后一部分中的列数,因为列数会根据评论数而有所不同。这是我的公式:

=transpose(query(transpose(query(QUERY(
IMPORTRANGE("1oQVZDEKLqx6ruz2yzIzUgppkWvBEOB_Eo-a4NW1WTSQ";"Comments!A1:U");
"select Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13, Col14, 
Col15, Col16, Col17, Col18, Col19 where todate(Col1) > date '"&text(today()-7;
"yyyy-mm-dd")&"' limit 10");"select * where Col2<>'' or Col3<>'' or Col4<>'' or 
Col5<>'' or Col6<>'' or Col7<>'' or Col8<>'' or Col9<>'' or Col10<>'' or Col11<>'' or 
Col12<>'' or Col13<>'' or Col14<>'' or Col15<>'' or Col16<>'' or Col17<>'' or Col18<>''"));
"select * where Col2<>'' or Col3<>'' or Col4<>''"))

无论两个“最内层”查询返回多少列,有什么方法可以让这个公式起作用?

这是带有查询评论的电子表格。它从这张表中收集评论(在现实生活中,这是用 importrange-formula 从 19 张表中收集的)。

我希望我的问题是可以理解的,最重要的是,我的问题可以解决!

4

1 回答 1

0

此函数从具有行和列标题的范围中删除空列和行。你可以这样称呼它:

=FILTERROWSANDCOLS(IMPORTRANGE("1oQVZDEKLqx6ruz2yzIzUgppkWvBEOB_Eo-a4NW1WTSQ";"Comments!B1:U"))

请注意,我为此排除了 A 列。

function FILTERROWSANDCOLS(input) {
  function rowIsBlank(row) {
    return row.slice(1, row.length).join("") !== "";
  }

  return input.filter(rowIsBlank).transpose().filter(rowIsBlank).transpose();
}


Object.defineProperty(Object.prototype, "transpose", {value: function(){
  var output = [];
  for (var row = 0; row < this.length; row++) {
    for (var col = 0; col < this[row].length; col++) {
      if (row === 0){
        output.push([this[row][col]]); 
      } else {
        output[col].push(this[row][col]); 
      }
    }
  }
  return output;
}});
于 2016-08-16T21:49:44.733 回答