Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向Google脚本Vlookup函数添加多列_Javascript_Google Sheets_Spreadsheet_Gs Vlookup - Fatal编程技术网

Javascript 向Google脚本Vlookup函数添加多列

Javascript 向Google脚本Vlookup函数添加多列,javascript,google-sheets,spreadsheet,gs-vlookup,Javascript,Google Sheets,Spreadsheet,Gs Vlookup,到目前为止,我已经为数组源数据的单列VlookUp做了以下工作 我这样做的目的是,当我从多个工作表中获取大量数据时,我希望它是静态信息,被查找并放置在导入区域 我可以在电子表格中使用查询来完成我想要的,但它会让我的电子表格陷入困境 在旧床单上,您还可以执行以下操作: =arrayformula(VLookUp(A2:A,数据!A:K,{3,4,7,10}*符号(行(A2:A)),false)) 从A列检索行的匹配条件的C、D、G、J列 在新的纸上,这已经不可能了。悲伤的脸 function fi

到目前为止,我已经为数组源数据的单列VlookUp做了以下工作

我这样做的目的是,当我从多个工作表中获取大量数据时,我希望它是静态信息,被查找并放置在导入区域

我可以在电子表格中使用查询来完成我想要的,但它会让我的电子表格陷入困境

在旧床单上,您还可以执行以下操作: =arrayformula(VLookUp(A2:A,数据!A:K,{3,4,7,10}*符号(行(A2:A)),false)) 从A列检索行的匹配条件的C、D、G、J列

在新的纸上,这已经不可能了。悲伤的脸

function finderLookUPReturnArray(工作表、范围、lookupItem、IndexOffset、IndexOffsetReturn)//finderLookUP(参考工作表、参考工作表范围、当前查找项、当前查找项的参考工作表列、合格的当前查找项返回的参考工作表列)
{
var newArray=newArray();
var data=SpreadsheetApp.getActive().getSheetByName(Sheet).getRange(Range).getValues();//按名称和范围将工作表同步到var中

对于(var i=0;i@AD:AM)我认为在数组内部用于多列调用时需要使用
*符号(行(A2:A))
。但我只是用一个全新的表进行了尝试,看起来你是对的!我刚刚尝试过,但新的表仍然不支持数组之外的Vlookup多列调用

见: &

我也只是想说,自从我进入谷歌应用世界以来,我从你那里学到了很多东西。我会从你那里寻找文章,因为我知道我可以适应,因为它写得很清楚

但我没有放弃,这就是我想到的

理由:

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);
}
/-------------------------------------------------------------

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);
}
函数getFirstEmptyRowUsingArray(sheetname) { var data=SpreadsheetApp.getActive().getSheetByName(sheetname).getDataRange().getValues();
对于(var n=data.length;您用悲伤的脸引用的公式应该适用于当前工作表(事实上,您可以省略
*符号(行(A2:A))
位)。