我有一张Google表格(KWTT
) - 其中,使用默认过滤器视图过滤数据。而且,在同一文件的另一张纸上,我试图调用部分过滤后的信息。但是,它会提取绝对行信息,而不是过滤后的信息。
=KWTT!A3
这是我在第二张工作表上使用的公式,用于从第一张工作表(KWTT
)中检索数据。但是,当我使用默认过滤器视图时,顶行交换为A121
。
如何始终将第一张工作表中过滤数据的第一行检索到第二张工作表?
答案 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