当列数是动态的时,如何在查询中使用 WHERE 子句?

How to use WHERE clause in a query when number of columns is dynamic?

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

我使用电子表格中的查询功能来收集工作伙伴的评论。有 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<>''"))

无论两个 "innermost" 查询 returns 有多少列,有什么方法可以让这个公式起作用吗?

这是带有 queried comments. It collects comments from this sheet 的电子表格(在现实生活中,这是使用 importrange-formula 从 19 张表中收集的)。

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

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

=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;
}});