Google表格,查询过滤的数据行

时间:2017-09-06 11:46:21

标签: excel google-sheets spreadsheet

我有一张Google表格(KWTT) - 其中,使用默认过滤器视图过滤数据。而且,在同一文件的另一张纸上,我试图调用部分过滤后的信息。但是,它会提取绝对行信息,而不是过滤后的信息。

=KWTT!A3

这是我在第二张工作表上使用的公式,用于从第一张工作表(KWTT)中检索数据。但是,当我使用默认过滤器视图时,顶行交换为A121

How do I always retrieve  the top row of the filtered data in the first sheet to the second sheet?

如何始终将第一张工作表中过滤数据的第一行检索到第二张工作表?

2 个答案:

答案 0 :(得分:0)

这似乎很麻烦,但这样做会有所帮助。您可能需要更改ssID和工作表名称。

function copyFilteredData1Row() {
  var hiddenRows = [];//A 1d array of hidden rows.
  var ssId="1u94OL_HMszOkvvyXdci-SEq7NO0KUJiD1t0xUqHvCMw"//Spreadsheet ID
  var sheetId="0" //Sheet ID
  // limit what's returned from the API
  var fields = 
"sheets(data(rowMetadata(hiddenByFilter)),properties/sheetId)";
  var sheets = Sheets.Spreadsheets.get(ssId, {fields: fields}).sheets;  
    for (var i = 0; i < sheets.length; i++) {
       if (sheets[i].properties.sheetId == sheetId) {
          var data = sheets[i].data;
          var rows = data[0].rowMetadata;
      for (var j = 0; j < rows.length; j++) {
          if (rows[j].hiddenByFilter) hiddenRows.push(j)}
    }}

  var ss=SpreadsheetApp.getActiveSpreadsheet()
  var s=ss.getSheetByName("Sheet1")//filtered sheet
  var s1=ss.getSheetByName("Sheet2")//Copy to sheet
  var lr1=s1.getLastRow()
  var lc1=s1.getLastColumn()
  var lr=s.getLastRow()
  var lc=s.getLastColumn()
  var data1=s.getRange(1,1,lr,lc).getValues()//get all data from filtered sheet.

  var nonHiddenRows=[]//Array of non hidden data.

    for (var i = 1; i <data1.length ; i++) {
    var count=0
    var row = i
    for(var k=0;k<hiddenRows.length;k++){
      var hrow=hiddenRows[k]
    if(row!=hrow){
      count=count+1}
    } 
      if(count==hiddenRows.length){
        nonHiddenRows.push(data1[i])
      if(nonHiddenRows.length==1){break}
      }
    }
  if(s1.getRange(1, 1, 1, 1).getValue()!=""){s1.getRange(1, 1, lr1, 
lc1).clearContent()}//Clear old filtered data.
  s1.getRange(1, 1, nonHiddenRows.length, 
nonHiddenRows[0].length).setValues(nonHiddenRows)
  } 

答案 1 :(得分:-1)

有人可能会想出一个js解决方案。但是,这是一个Roundabout公式,其中有一个辅助列,只能找到 顶行 。也许可以以相同的方式找到其他过滤的行。但是我不打算在这里解释所有这些,因为OP在前面的行中是明确的,并且在他的原始公式第二张表中仅使用max(enumerate(A),key=lambda x:x[1])[0] ,表示单个条目。

KWTT中的辅助列J1:

A3

在表2中

 =ARRAYFORMULA(ROW(J1:J1000))

我们正在使用 =Indirect ("KWTT!A:"&SUBTOTAL(105,KWTT!J1:J1000)) 跳过过滤后的行,以获得最小的可见范围,并将其输入SUBTOTAL

整行可以通过:

INDIRECT

然而,由于这么多原因,这种设置仍然很弱。我宁愿选择 =INDEX(KWTT!A1:I1000,SUBTOTAL(105,KWTT!J1:J1000)) FILTER直接过滤给定的数组。

QUERY