2012-06-28 63 views
-1

我有一個從列A到列D有數據的spreadshseet(Sheet1),而在另一個表(Sheet1)中,數據從列A到列表W再次出現,其中山口˚F數據有一定的匹配與列D.使用谷歌應用程序腳本的查找或索引

什麼,我尋找:

我想從Sheet2中提取數據(從山口˚F起,即G,H,I等。 )在Col E中等在Sheet1中。 Sheet 2中 山口

FGHIJKL 1 ABCDEF 2 A1 B1 C1 D1 E1 F1 3 A2 B2 C2 D2 E2 F2 等

Sheet 1中 山口DEFGH 1 ABCD 3 A2 b2 c2 d2

將數據反映在col E,F,GH中從sheet2到sheet E中的列D,F唱歌vlookup,或索引。

我試了一下,卻徒勞無功 http://productforums.google.com/forum/#!topic/apps-script/HzeNdIqnIUc

我希望只使用只有Google Apps來得到想要的結果。

請求幫助。

問候

回答

1

對不起你遇到與你VLOOKUP一個問題,但它是一個谷歌電子表格用戶的問題不是一個計算器(編程)的問題。它可能會幫助你知道這些事情:

  1. 你正處在正確的軌道VLOOKUP。電子表格函數VLOOKUP絕對適用於根據sheet1中的鍵/列來獲取sheet2中的數據以進行查找。它適用於你說你需要做的事情。
  2. 您可以搜索谷歌的支持網站:http://support.google.com/docs/bin/search.py?query=vlookup
  3. 您可以要求在谷歌文檔幫助論壇https://productforums.google.com/forum/#!forum/docs

好運。

0

它的一篇老文章,但其他人可能仍然偶然發現它。

這是我寫的東西,以解決我的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;   
} 
//~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~`~,~` 
相關問題