我有一个Google表格(KWTT
) - 其中,数据使用默认的过滤器视图进行过滤。而且,在同一份文件的另一张表格上,我正在尝试调用过滤信息的一部分。但是,它拉动绝对的行信息,而不是过滤的信息。Google表格,查询已过滤的数据行
=KWTT!A3
这是我使用的第二片材,以检索与所述第一片材(KWTT
)数据的公式。但是,当我使用默认过滤器视图时,顶行将交换到A121
。
如何始终检索第一片的第二片过滤数据的顶行?
我有一个Google表格(KWTT
) - 其中,数据使用默认的过滤器视图进行过滤。而且,在同一份文件的另一张表格上,我正在尝试调用过滤信息的一部分。但是,它拉动绝对的行信息,而不是过滤的信息。Google表格,查询已过滤的数据行
=KWTT!A3
这是我使用的第二片材,以检索与所述第一片材(KWTT
)数据的公式。但是,当我使用默认过滤器视图时,顶行将交换到A121
。
如何始终检索第一片的第二片过滤数据的顶行?
有人可能会想出一个JS解决方案。但是,下面是一个带有帮助列的Roundabout公式列表,仅用于查找顶行。也许可以用相同的方式找到其他过滤的行。但我不打算在此解释所有这些,因为OP在第一行中是明确的,并且在其原始公式第二表中仅使用A3
,表示单个条目。
助手柱J1在KWTT:
=ARRAYFORMULA(ROW(J1:J1000))
在片2
=Indirect ("KWTT!A:"&SUBTOTAL(105,KWTT!J1:J1000))
我们使用SUBTOTAL
其中跳过过滤的行来获得最小的可见光范围内的,这将被馈送到INDIRECT
。
=INDEX(KWTT!A1:I1000,SUBTOTAL(105,KWTT!J1:J1000))
然而,这个设置仍对如此多的理由弱:
整行可以通过提起。我宁愿选择FILTER
或QUERY
直接过滤给定的数组。
=QUERY(KWTT!A1:I1000,"Select * where A contains 'anime'",1)
这似乎很麻烦,但这会做到这一点。您可能需要更改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)
}
您需要一个谷歌应用程序脚本 –
@anonymous我很感激反馈意见,但这并不能帮助我解决问题。我在寻找教育,而不是显而易见的。 –
显然我没有提供它作为解决方案,而是作为评论。 –