2012-11-10 13 views
6

Google Apps komut dosyasını ve e-tablosunu kullanarak basit bir şey yapmaya çalışıyorum, ancak sorunu anlayamıyorum. Boş bir sütun ve metin içeren bir sütun içeren bir sayfam var. Sütunlar yan yana değil. Her hücrede bir sütunda metin aramaya çalışıyorum ve metin bulunursa, boş sütundaki hücrenin değerini 'Evet' olarak ayarlayın.Bir dize içindeki metin için e-tablo sütununu ara ve başka bir sütunda bir sonuç döndürme

Örnek (üzgünüz kodu - Ben yuvarlak gitmiş ve saatlerce onunla yuvarlak, ve ne var bu kadar convoluted ettik, bu sadece bir örnek sunmak amacıyla en iyisi):

Column A with text Empty Column F 
abcd efg hij 
klmn opq rstu 
vwxzy     Yes 

en basit nedir 'xyz' için A sütununu aramak ve F sütununda bir 'Evet' döndürmek için kod?

İnternette bir düzine farklı kod örneğini inceledim ve denedim ve bunlardan hiçbirini işe alamıyorum. Bu konuda herhangi bir yardım için teşekkür ederiz!

DÜZENLEME benim kullanım için (umarım Final) (Ben Bilginize bana başlık adına göre kolon sayısını, bu yer almayan bu kodu almak bazı arka uç araçları var):

var sskey = SpreadsheetApp.openById('**********************') 

function otherfunction(){ 
    addCustomValue('POCs', 'Groups', 'Champion', 'Champion', 'Yes'); 
} 

function addCustomValue(sheetNamestr, searchColnamestr, writeColnamestr, searchKeystr, writeValstr) { 
    var sheet = sskey.getSheetByName(sheetNamestr); 
    var searchColnum = MyUtilities.getColIndexByName(sheet, 1, searchColnamestr); 
    var writeColnum = MyUtilities.getColIndexByName(sheet, 1, writeColnamestr); 
    var data = sheet.getDataRange().getValues(); 
    for (n=0; n<data.length; ++n) { 
    if (data[n][searchColnum-1].toString().match(searchKeystr)==searchKeystr){ data[n][writeColnum-1] = writeValstr}; 
    } 
    sheet.getRange(1,1,data.length,data[0].length).setValues(data); 
} 

Teşekkür Serge! Artık bunu e-tablolarımın üzerinde herhangi bir sütun ve koşula dayanarak çalıştırabilirim!

+0

(ISERROR (("xyz", A BULMAK if ((F1'de) formülü = ARRAYFORMULA kullanmayı düşünün (sizin levha sonra formül veya özel bir işlev içeriyorsa dikkate almak için değiştirilmesi gereken): A)), "", "YES")) – DavidF

+0

thx @DavidF, ancak GAS – user1783229

cevap

9

Bu, ihtiyacınız olanı yapan olası bir basit komut dosyasıdır.

function test(){ 
var sh = SpreadsheetApp.getActiveSheet(); 
var data = sh.getDataRange().getValues(); // read all data in the sheet 
for(n=0;n<data.length;++n){ // iterate row by row and examine data in column A 
if(data[n][0].toString().match('xyz')=='xyz'){ data[n][5] = 'YES'};// if column A contains 'xyz' then set value in index [5] (is column F) 
} 
Logger.log(data) 
sh.getRange(1,1,data.length,data[0].length).setValues(data); // write back to the sheet 
} 
+0

harika - thx! Özelleştirmek için biraz tekrar çalıştım ama aynı temel yapıyı kullandı. yukarıdaki düzenlemeleri görün. – user1783229

+0

sadece tuhaf bir şey, tüm işlev bitmiş olsa bile elektronik tablonun "Çalışma ..." göstermesidir. Sonunda işlev sona erdiğini kanıtlamak için ortaya çıkan bir sayfa sıraladım. Ve komut dosyası sayfası da sonlanan işlevi gösterdi. Elektronik tablonun neden son sıralamadan sonra bile "çalışıyor ..." demeye devam ettiğini bilmiyorum. "Çalışıyor ..." sadece sayfa yaklaşık 130 satır olduğunda, ancak bir düzine satırın testini çalıştırdığımda kalmıyor. Tuhaf. Bundan kurtulmanın tek yolu, sayfayı yenilemek. – user1783229

+0

bunun için endişelenmeyin ... Google sunucularının 'en iyi durumda' olmadığı bir zamanda olur ;-) ya da ISP'niz yorgun hissederse ... –

3
function myFunction() { 
    //Variable to keep track of the sheet 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    //Start at row 1, end at the last row of the spreadsheet 
    for(var i=1;i<sheet.getLastRow();i++){ 
    var value = sheet.getRange(i, 1).getValue(); 
    //Compare the value of the cell to 'xyz', if it is then set column 4 for that row to "Yes" 
    if(value == 'xyz'){ 
     sheet.setActiveRange(sheet.getRange(i, 4)).setValue('Yes'); 
    } 
    } 
} 
+1

ile sayfa formüllerinde kaçınmaya çalışarak, başlangıçtaki tüm aralığı elde etmenin önerilen yaklaşımı yerine döngü içindeki api üzerinde tekrarlanan çağrılar yapar. Elde edilen dizi boyunca ve sonunda değerleri geri yazma. Ayrıca soru, hücre içinde – DavidF

+0

hücresinin içeriğine eşit olmayan metin bulmayı sorar - sanırım serge'nin cevabı daha uygundur - girişi takdir edin! – user1783229

+0

@Serge insas - Yours neredeyse işe yarıyor, ancak A sütunundaki her hücre xyz içermedikçe, değerleri "NOT_FOUND" olarak tüm sütunların değerlerine göre ayarlayamazsınız. – user1795832

İlgili konular