将多列添加到谷歌脚本Vlookup功能
Adding Multiple Column to Google Script Vlookup function
到目前为止,我有以下内容为数组源数据的单列 VlookUp 工作。
我这样做的目的是当我从多个工作表中获取大量数据时,我希望它是静态信息,正在查找并放置在导入区域。
我可以在电子表格中使用查询来完成我想要的事情,但它会破坏我的电子表格 ALOT!
同样在旧工作表上,您可以执行以下操作:=arrayformula(VLookUp(A2:A,Data!A:K,{3,4,7,10}*sign(Row(A2:A)),false))从 A 列中检索行的匹配条件的 C、D、G、J 列
在新工作表中,这不再可能。 悲伤的脸
!!!function finderLookUPReturnArray_(Sheet,Range,lookupItem,IndexOffset,IndexOffsetReturn) // finderLookUP(Ref Sheet, Ref Sheet Range, Current lookup Item, Ref Sheet Column for Current lookup Item , Ref Sheet Column for qualified Current lookup Item RETURN)
{
var newArray = new Array();
var data = SpreadsheetApp.getActive().getSheetByName(Sheet).getRange(Range).getValues(); //Syncs sheet by name and range into var
for(var i = 0; i<lookupItem.length; i++)
{
for(nn=0;nn<data.length;nn++)
{
var Sending = "";
if (data[nn][IndexOffset]==lookupItem[i])
{
var Sending = data[nn][IndexOffsetReturn];
newArray.push(Sending);
break;
}
}
if(isEmpty_(Sending)==true)
{
var Sending = "#N/A";
newArray.push(Sending);
}
}
return newArray;
}
//------------------
function isEmpty_(string)
{
if(!string) return true;
if(string == '') return true;
if(string === false) return true;
if(string === null) return true;
if(string == undefined) return true;
string = string+' '; // check for a bunch of whitespace
if('' == (string.replace(/^'s's*/, '').replace(/'s's*$/, ''))) return true;
return false;
}
谢谢!
@AD:AM 我认为在数组公式中使用多列调用时需要*sign(Row(A2:A))
。 但我刚刚用一张全新的床单尝试了一下,看起来你是对的!我刚刚尝试过,但新工作表仍然不支持数组之外的 Vlookup 多列调用。
看:https://github.com/preactive/GAS-Helper-Function/blob/master/Lookup_.js &https://docs.google.com/a/costco.com/spreadsheets/d/1nDOFWeXfeFEGvCjhH0YHunjDuh4atCVMpiEiRV7wAFM/edit#gid=0
也只是想说,自从我开始进入谷歌应用世界以来,我已经从你那里学到了很多东西。我会从你那里寻找文章,因为我知道我可以改编,因为它写得很清楚!
但我没有放弃,这就是我想出的。
理由:
1:基于脚本的版本是由于要引用大量数据以减少一致的计算和减慢工作表。
2:数据库,如导入范围,与Vlookup属性。
用法:
var LocNum = spreadsheetApp.openById(SheetID).getSheetByName('Sheet1').getRange('J2:J').getValues();
FinderLookUpReturnArrayRange_(LocNum,0,'Data','A:G',[1,3,4,7],'test',1,1);
设置在目标工作表的位置 1,1
或
FinderLookUpReturnArrayRange_(LocNum,0,'Data','A:G',[1,3,4,7],'test',"Next",1);
在目标工作表的下一个未占用行(数据库样式)处设置
//-------------------------------------------------
function FinderLookUpReturnArrayRange_(Search_Key,SearchKey_Ref_IndexOffSet,Ref_Sheet,Ref_Range,IndexOffSetForReturn,Set_Sheet,Set_PosRow,Set_PosCol)
{
var twoDimensionalArray = [];
var data = SpreadsheetApp.getActive().getSheetByName(Ref_Sheet).getRange(Ref_Range).getValues(); //Syncs sheet by name and range into var
for (var i = 0; i<Search_Key.length; i++) // i = number of rows to index and search
{
var Sending = [];
var newArray = [];
for (nn=0;nn<data.length;nn++) // nn = number of row data is found at
{
if (data[nn][SearchKey_Ref_IndexOffSet]==Search_Key[i]) //if statement is triggered when the search_key is found.
{
for (cc=0;cc<IndexOffSetForReturn.length;cc++) //cc = numbers of columns to ref
{
var iosr = IndexOffSetForReturn[cc];
var Sending = data[nn][iosr];
if(isEmpty_(Sending)==true) //if statement for if one of the returned cells is blank
{
var Sending = "#N/A";
}
if (IndexOffSetForReturn.length>1) //if statement for multi-Column returns
{
newArray.push(Sending);
if(IndexOffSetForReturn.length-1 == cc) // if statement for pulling all columns into larger array
{
twoDimensionalArray.push(newArray);
break;
}
}
else if (IndexOffSetForReturn.length<=1) //if statement for single-Column returns
{
twoDimensionalArray.push(Sending);
break;
}
}
}
if(data.length-1==nn && isEmpty_(Sending)==true) //following if statement is for if the current item in lookup array is not found. Nessessary for data structure.
{
for(na=0;na<IndexOffSetForReturn.length;na++) //looping for the number of columns to place "#N/A" in to preserve data structure
{
var Sending = "#N/A";
newArray.push(Sending);
}
twoDimensionalArray.push(newArray);
}
}
}
if(typeof Set_PosRow != "number")
{
var Set_PosRow = getFirstEmptyRowUsingArray_(Set_Sheet); //for usage in a database like entry without having to manually look for the next level.
}
for (var l = 0; l < Search_Key.length; l++) //Builds 2d Looping-Array to allow choosing of columns at a future point
{
if (IndexOffSetForReturn.length<=1) //checks to see if it's a single column return
{
SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(Set_PosRow + l,Set_PosCol).setValue(twoDimensionalArray[l]);
}
}
if (IndexOffSetForReturn.length>1) //checks to see if it's a multi column return
{
SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(Set_PosRow,Set_PosCol,twoDimensionalArray.length,twoDimensionalArray[0].length).setValues(twoDimensionalArray);
}
}
//-------------------------------------------------
function isEmpty_(string)
{
if(!string) return true;
if(string == '') return true;
if(string === false) return true;
if(string === null) return true;
if(string == undefined) return true;
string = string+' '; // check for a bunch of whitespace
if('' == (string.replace(/^'s's*/, '').replace(/'s's*$/, ''))) return true;
return false;
}
//-------------------------------------------------
function getFirstEmptyRowUsingArray_(sheetname)
{
var data = SpreadsheetApp.getActive().getSheetByName(sheetname).getDataRange().getValues();
for(var n = data.length ; n<0 ; n--)
{
if(isEmpty_(data[n][0])=false)
{
n++;
break;
}
}
n++
return (n);
}
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 借助asp.net验证或java脚本对多个文本进行验证
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- Java脚本时间添加
- 不显示带有本地json文件数据的谷歌地图脚本
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 从远程脚本获取用户IP
- 如何根据时间运行不同的脚本
- 如何将字符串值从php页面发送到java脚本页面
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 当脚本由system.js加载时,如何要求('electron')
- HTML标记在脚本标记中工作
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 显示时间的脚本
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- Google Adsense多次加载脚本
- 将多列添加到谷歌脚本Vlookup功能