好了......不知道这些可以做。
我在谷歌电子表格单元格A1 = ..时间的范围是A1:C4。
我有一个简单的表如下:
time sit stand
1 bob mike
2 fred pat
3 chris mike
这是我的查询:
=query($A$1:$C$4,"select A,B,C where C='mike'",0)
...非常直截了当。 不过,我想列引用是动态的。 所以我需要能够使用标题来查询。 我该怎么做? 我已经尝试了以下内容:
=query($A$1:$C$4,"select 'sit ', 'stand' where 'stand' = 'mike' ",0)
=query($A$1:$C$4,"select sit, stand where stand = 'mike' ",0)
每本页面的建议: 谷歌电子表格查询错误-列不存在
我也试过如下:
=query($A$1:$C$4,"select Col2, Col3 where Col3 = 'mike' ",0)
=query($A$1:$C$4,"select Col2, Col3 where (Col3) = 'mike' ",0)
=query($A$1:$C$4,"select (Col2), (Col3) where (Col3) = 'mike' ",0)
=query($A$1:$C$4,"select 'Col2', 'Col3' where 'Col3' = 'mike' ",0)
他们没有工作...是否有人知道该怎么做或不知道是否有可能?
https://developers.google.com/chart/interactive/docs/querylanguage
这里的例子好像你能做到这一点,但是,对于唯一的应用程序的脚本? 而不是在电子表格功能?
不幸的是查询功能的电子表格SELECT子句中通过在头引用列的没有原生方式。
您可以使用COLX符号,如果查询的第一个参数以外的任何其他一个明确的参考范围。 实现这一目标的方法之一是包裹在括号中调用ARRAYFORMULA的范围内,并且:
=ArrayFormula(QUERY(($A$1:$C$4),"select Col2, Col3 where Col3 = 'mike'",0))
它是相当丑陋,但你可以使用MATCH函数在头引用螺栓:
=ArrayFormula(QUERY(($A$1:$C$4),"select Col"&MATCH("sit";$A$1:$C$1;0)&", Col"&MATCH("stand";$A$1:$C$1;0)&" where Col"&MATCH("stand";$A$1:$C$1;0)&" = 'mike'",1))
我也遇到了这个问题如果不解决,所以我写了一个脚本,将允许在查询中列引用。 使用方法:1.创建一个单独的片材,并设置“[表名称]”的数据表2.创建名称范围(从工具菜单)的名称是这些列ID存储例如A1行:K1 3 。改变[COLUMNIDs ROW参考]在代码中的命名范围。 现在,在查询简单的前缀字符$ id列例如前: =QUERY([SHEET_NAME]!A4:F, _Select(" * WHERE $[COLUMNID] < $[COLUMNID2]")
function _Select(squery){
var sheetName = "[SHEET NAME]";
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
var colIndex = sheet.getDataRange().getColumn();
var colIndex2 = sheet.getDataRange().getLastColumn();
var rangeString = sheetName+"!"+sheet.getRange(3, colIndex, 1, colIndex2).getA1Notation();
return "SELECT "+yq(rangeString, squery);
}
function yq(range, sQuery) {
var sheetName = SpreadsheetApp.getActiveSheet().getSheetName();
if( (typeof range == "object") && (range !== null) ){
sheetName = range.getSheet().getName();
range = range.getA1Notation();
}else{
var tRange = range.split("!");
if(tRange.length > 1){
sheetName = tRange[0]
range = tRange[1];
}
}
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
var range = sheet.getRange(range);
var qInput = sQuery.split(" ");
var outQuery = [];
for(var i = 0; i < qInput.length; i++){
if(qInput[i].charAt(0) == "$"){
var colIndex = getHeaderValues(sheet, qInput[i].slice(1), range, "[COLUMNIDs ROW REFERENCE]");
outQuery.push(colIndex.toString());
}else{
outQuery.push(qInput[i]);
}
}
return outQuery.join(" ");
}
function getHeaderValues(sheet, columnName, range, columnHeaderRow){
var columnHeaderRowIndex = range.getRowIndex() - 1;
if(!isNaN(parseFloat(columnHeaderRow)) && isFinite(columnHeaderRow)){
columnHeaderRowIndex = range.getRowIndex() + columnHeaderRow;
}else if(typeof columnHeaderRow == "string"){
columnHeaderRowIndex = SpreadsheetApp.getActive().getRangeByName(columnHeaderRow).getRowIndex();
}
var numColumns = range.getLastColumn() - range.getColumn() + 1;
var headersRange = sheet.getRange(columnHeaderRowIndex, range.getColumn(), 1, numColumns);
var headers = headersRange.getValues()[0];
var hIndex = null;
for(var i = 0; i < headers.length; i++){
if(headers[i] == columnName){
hIndex = headersRange.getColumn() + i;
hIndex = sheet.getRange(headersRange.getRow(), hIndex).getA1Notation();
return hIndex.charAt(0);
}
}
return null;
}
您好我有另一种解决方案。 我打破了孔的东西可以读线。
=query($A$1:$C$4,"select "
&CHAR(MATCH("time";1:1;0)+64)
&","
&CHAR(MATCH("sit";1:1;0)+64)
&","
&CHAR(MATCH("stand";1:1;0)+64)
&"where C='mike'",0)
仍然不是很好,而你limmited至24列。 因为之后你需要拆分。 不喜欢它在所有:(