Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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

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
Google apps script Vlookup或使用google应用程序脚本编制索引_Google Apps Script_Google Sheets_Gs Vlookup - Fatal编程技术网

Google apps script Vlookup或使用google应用程序脚本编制索引

Google apps script Vlookup或使用google应用程序脚本编制索引,google-apps-script,google-sheets,gs-vlookup,Google Apps Script,Google Sheets,Gs Vlookup,我有一张电子表格(表1),其中数据从a列到D列,在另一张表格(表1)中,数据从a列到W列,其中F列数据与D列有一些匹配 我在寻找什么: 我想从表1的e列中的表2(从F列开始,即H、I等)中提取数据,以此类推。 第2张 上校 F G H I J K L 1 A B C D E F 2 a1 b1 c1 d1 e1 f1 3 a2 b2 c2 d2 e2 f2 等等 表1 列E F G H 1 A B C D 3 a2 b2 c2 d2 使用vlookup或索引,将表2中表1中的E、F、G H列中反

我有一张电子表格(表1),其中数据从a列到D列,在另一张表格(表1)中,数据从a列到W列,其中F列数据与D列有一些匹配

我在寻找什么:

我想从表1的e列中的表2(从F列开始,即H、I等)中提取数据,以此类推。 第2张 上校

F G H I J K L 1 A B C D E F 2 a1 b1 c1 d1 e1 f1 3 a2 b2 c2 d2 e2 f2 等等

表1 列E F G H 1 A B C D 3 a2 b2 c2 d2

使用vlookup或索引,将表2中表1中的E、F、G H列中反映的数据与E、F列中的D列相对照

我尝试过但徒劳无功的事

我只想使用谷歌应用程序来获得想要的结果

请求对此提供帮助


关于

很抱歉,您的VLOOKUP有问题,但这是Google电子表格用户的问题,不是stackoverflow(编程)问题。它可能会帮助您了解以下内容:

  • 你和VLOOKUP在正确的轨道上。电子表格函数VLOOKUP可以根据sheet1中的键/列获取sheet2中的数据进行查找。对于你所说的你需要做的事情来说,它非常有效
  • 您可以搜索谷歌支持网站:
  • 你可以在谷歌文档帮助论坛上询问

  • 祝你好运。

    这是一篇老文章,但其他人可能仍然会偶然发现它

    这里是我写的一些东西,以脚本形式满足我的Vlookup需求

    //~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`
    //--//Dependent on isEmpty_()
    // Script Look-up
    /*
    Benefit of this script is:
    -That google sheets will not continually do lookups on data that is not changing with using this function as it is set with hard values until script is kicked off again.
    -Unlike Vlookup you can have it look at for reference data at any Column in the row.  Does not have to be in the first column for it to work like Vlookup.
    -You can return the Lookup to Memory for further processing by other functions
    
    Useage:
    
    var LocNum    = SpreadsheetApp.openById(SheetID).getSheetByName('Sheet1').getRange('J2:J').getValues();
    
    Lookup_(Sheetinfo,"Sheet1!A:B",0,[1],"Sheet1!I1","n","y");
    //or
    Lookup_(Sheetinfo,"Sheet1!A:B",0,[1],"return","n","n");
    //or
    Lookup_(Sheetinfo,"Sheet1!A:B",0,[0,1],"return","n","n");
    //or
    Lookup_(Sheetinfo,"Sheet1!A:B",1,[0],"return","y","n");
    //or
    Lookup_(Sheetinfo,"Sheet1!A:G",4,[0],"Database!A1","y","y");
    */
    
    
    
    function Lookup_(Search_Key,RefSheetRange,SearchKey_Ref_IndexOffSet,IndexOffSetForReturn,SetSheetRange,ReturnMultiResults,Add_Note)   
    {
      var RefSheetRange = RefSheetRange.split("!");
      var Ref_Sheet = RefSheetRange[0];
      var Ref_Range = RefSheetRange[1];
    
      if(!/return/i.test(SetSheetRange))
      {
      var SetSheetRange = SetSheetRange.split("!");
      var Set_Sheet = SetSheetRange[0];
      var Set_Range = SetSheetRange[1];
      var RowVal = SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(Set_Range).getRow();
      var ColVal = SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(Set_Range).getColumn();
      }
    
      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, Il=Search_Key.length; i<Il; i++)                                                         // i = number of rows to index and search  
      {
        var Sending = [];                                                                                      //Making a Blank Array
        var newArray = [];                                                                                     //Making a Blank Array
        var Found ="";
        for (var nn=0, NNL=data.length; nn<NNL; nn++)                                                                 //nn = will be the number of row that the data is found at
        {
          if(Found==1 && ReturnMultiResults.toUpperCase() == 'N')                                                                                         //if statement for found if found = 1 it will to stop all other logic in nn loop from running
          {
            break;                                                                                             //Breaking nn loop once found
          }
          if (data[nn][SearchKey_Ref_IndexOffSet]==Search_Key[i])                                              //if statement is triggered when the search_key is found.
          {
            var newArray = [];
            for (var cc=0, CCL=IndexOffSetForReturn.length; cc<CCL; cc++)                                         //cc = numbers of columns to referance
            {
              var iosr = IndexOffSetForReturn[cc];                                                             //Loading the value of current cc
              var Sending = data[nn][iosr];                                                                    //Loading data of Level nn offset by value of cc
              if(isEmpty_(Sending))                                                                      //if statement for if one of the returned Column level cells are blank
              {
              var Sending =  "#N/A";                                                                           //Sets #N/A on all column levels that are blank
              }
              if (CCL>1)                                                                                       //if statement for multi-Column returns
              {
                newArray.push(Sending);
                if(CCL-1 == cc)                                                                                //if statement for pulling all columns into larger array
                {
                  twoDimensionalArray.push(newArray);
                  var Found = 1;                                                                              //Modifying found to 1 if found to stop all other logic in nn loop
                  break;                                                                                      //Breaking cc loop once found
                }
              }
              else if (CCL<=1)                                                                                 //if statement for single-Column returns
              {
                twoDimensionalArray.push(Sending);
                var Found = 1;                                                                                 //Modifying found to 1 if found to stop all other logic in nn loop
                break;                                                                                         //Breaking cc loop once found
              }
            }
          }
          if(NNL-1==nn && isEmpty_(Sending))                                                             //following if statement is for if the current item in lookup array is not found.  Nessessary for data structure.
          {
            for(var na=0,NAL=IndexOffSetForReturn.length;na<NAL;na++)                                          //looping for the number of columns to place "#N/A" in to preserve data structure
            {
              if (NAL<=1)                                                                                      //checks to see if it's a single column return
              {
                var Sending = "#N/A";
                twoDimensionalArray.push(Sending);
              }
              else if (NAL>1)                                                                                  //checks to see if it's a Multi column return
              {
                var Sending = "#N/A";
                newArray.push(Sending);
              }
            }
            if (NAL>1)                                                                                         //checks to see if it's a Multi column return
            {
              twoDimensionalArray.push(newArray);  
            }
          }
        }
      }
      if (CCL<=1)                                                                                            //checks to see if it's a single column return for running setValue
      {
        var singleArrayForm = [];
        for (var l = 0,lL=twoDimensionalArray.length; l<lL; l++)                                                          //Builds 2d Looping-Array to allow choosing of columns at a future point
        {
          singleArrayForm.push([twoDimensionalArray[l]]);
        }
        if(!/return/i.test(SetSheetRange))
        {
          SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(RowVal,ColVal,singleArrayForm.length,singleArrayForm[0].length).setValues(singleArrayForm);
          SpreadsheetApp.flush();
          if(/y/i.test(Add_Note))
          {
            SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(RowVal,ColVal,1,1).setNote("VLookup Script Ran On: " + Utilities.formatDate(new Date(), "PST", "MM-dd-yyyy hh:mm a") + "\nRange: " + Ref_Sheet + "!" + Ref_Range);      
          }
        }
        else
        {
          return singleArrayForm
        }
      }
      if (CCL>1)                                                                                             //checks to see if it's a multi column return for running setValues
      {
        if(!/return/i.test(SetSheetRange))
        {
          SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(RowVal,ColVal,twoDimensionalArray.length,twoDimensionalArray[0].length).setValues(twoDimensionalArray);
          SpreadsheetApp.flush();
          if(/y/i.test(Add_Note))
          {
            SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(RowVal,ColVal,1,1).setNote("VLookup Script Ran On: " + Utilities.formatDate(new Date(), "PST", "MM-dd-yyyy hh:mm a") + "\nRange: " + Ref_Sheet + "!" + Ref_Range);      
          }
        }
        else
        {
          return twoDimensionalArray
        }
      }
    
    }
    //~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`
    //~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`
    // Empty String Check
    function isEmpty_(string) 
    {
      if(Object.prototype.toString.call(string) == '[object Boolean]') return false;
    
      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;        
    }
    //~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`
    
    /~、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、~`
    //--//依赖于isEmpty_u()的
    //脚本查找
    /*
    此脚本的好处是:
    -google sheets将不会持续查找使用此函数不会更改的数据,因为它是用硬值设置的,直到脚本再次启动。
    -与Vlookup不同,您可以让它查看行中任何列的引用数据。不必在第一列中,它就可以像Vlookup一样工作。
    -您可以将查找返回内存,以便其他函数进行进一步处理
    用途:
    var LocNum=SpreadsheetApp.openById(SheetID).getSheetByName('Sheet1').getRange('J2:J').getValues();
    查找(Sheetinfo,“Sheet1!A:B”,0[1],“Sheet1!I1”,“n”,“y”);
    //或
    查找(Sheetinfo,“Sheet1!A:B”,0[1],“return”,“n”,“n”);
    //或
    查找(Sheetinfo,“Sheet1!A:B”,0[0,1],“return”,“n”,“n”);
    //或
    查找(Sheetinfo,“Sheet1!A:B”,1[0],“return”,“y”,“n”);
    //或
    查找(Sheetinfo,“Sheet1!A:G”,4[0],“Database!A1”,“y”,“y”);
    */
    函数查找(搜索键、RefSheetRange、搜索键、Ref索引偏移、IndexOffSetForReturn、SetSheetRange、ReturnMultiResults、添加注释)
    {
    var RefSheetRange=RefSheetRange.split(“!”);
    var Ref_Sheet=RefSheetRange[0];
    var Ref_Range=RefSheetRange[1];
    如果(!/return/i.test(设置轮距))
    {
    var SetSheetRange=SetSheetRange.split(“!”);
    var Set_Sheet=SetSheetRange[0];
    var Set_Range=SetSheetRange[1];
    var RowVal=SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(Set_Range).getRow();
    var ColVal=SpreadsheetApp.getActive().getSheetByName(Set_Sheet).getRange(Set_Range).getColumn();
    }
    var twoDimensionalArray=[];
    var data=SpreadsheetApp.getActive().getSheetByName(Ref_Sheet).getRange(Ref_Range).getValues();//按名称和范围将工作表同步到var中
    对于(var i=0,Il=Search_Key.length;i