我目前正在開展一個專案,該專案交叉驗證 2 張大約有 500 個回圈的作業表。
名冊
| 名 | 姓 | 國防部 |
|---|---|---|
| 朱迪思 | 巴拉甘 | 1959 年 4 月 10 日 |
| 凱利 | 貝尼特斯 | 9/14/1993 |
| 瑪莎 | 布斯托斯 | 1/12/1960 |
| 羅賓 | 卡羅爾 | 5/9/1954 |
| 珍妮特 | 錢伯斯 | 8/27/1949 |
| 尼基 | 科索 | 10/25/1957 |
| 安吉拉 | 德亨 | 5/23/1988 |
| 達米安 | 德萊尼 | 6/26/1961 |
| 阿諾拉 | 丹尼森 | 4/14/1998 |
| 克里斯蒂娜 | 迪馬圖拉克 | 7/28/1959 |
| 憐憫 | 埃拉索 | 1959 年 3 月 14 日 |
| 米歇爾 | 法納拉 | 11/20/1981 |
| 香農 | 費爾德曼 | 9/10/1986 |
| 亞歷杭德拉 | 弗魯托斯-席爾瓦 | 2/14/1978 |
| 麗貝卡 | Aceves | 7/14/2007 |
| 杰瑞 | 阿奎萊拉 | 6/8/2006 |
| 茉莉花 | 阿吉永 | 1/29/2007 |
| 阿德里亞娜 | 阿蘭尼茲 | 10/4/2007 |
| 布蘭卡 | 天使 | 11/3/2007 |
| 弗朗西 | 阿雷利亞諾 | 2007 年 9 月 11 日 |
| 莫莉 | 巴拉哈斯 | 2007 年 1 月 1 日 |
| 艾米麗 | 巴蘭科 | 2007 年 9 月 12 日 |
| 瓦萊里婭 | 巴塔 | 3/29/2007 |
| 薩拉伊 | 卡貝薩 | 8/8/2007 |
| 卡拉 | 卡德納 | 3/31/2006 |
| 艾米麗 | 卡諾 | 2007 年 1 月 25 日 |
| 珍妮特 | 卡努爾 | 2007 年 4 月 27 日 |
| 凱特琳 | 卡斯塔內達 | 2007 年 3 月 26 日 |
| 杰奎琳 | 卡斯蒂略 | 1/22/2007 |
| 梅蘭妮 | 柯林德斯 | 6/8/2007 |
| 尼亞 | 戴維斯 | 8/8/2007 |
| 卡麗 | 德爾加迪略 | 2/10/2007 |
| 加布里埃拉 | 迪亞茲 | 6/25/2007 |
| 海倫 | 迪亞茲 | 8/17/2007 |
| 海莉 | 杜蘭 | 5/20/2007 |
| Hazel | Flores | 9/7/2007 |
| Kiherra | Gamboa | 10/4/2007 |
| Belen | Gonzalez | 4/23/2007 |
| Samantha | Gonzalez | 10/16/2007 |
| Ashlee | Palacios | 8/31/2006 |
| Naomi | Papaqui | 5/17/2007 |
| Karely | Paxtor | 10/21/2006 |
| Michelle | Paxtor | 10/20/2007 |
| Audra | Perez | 2/24/2007 |
| Josueline | Perez | 10/30/2006 |
| Yaretzi | Pineda | 2/17/2007 |
| Zuleyka | Portela | 9/10/2007 |
| Jacqueline | Prudencio | 3/1/2007 |
| Destiny | Quiroz | 5/10/2007 |
| Kelcey | Raiz | 5/11/2007 |
| Brianna | Ramos | 8/15/2007 |
| Neydy | Renderos | 8/26/2007 |
| Daiman | Johnson | 3/3/1968 |
| Kimberley | Rivas | 11/2/2007 |
| Michelle | Dominguez | 5/15/2005 |
| Marleny | Rodriguez | 7/29/2007 |
| Maria | Roman | 5/9/2006 |
| Cristal | Solis | 9/29/2006 |
| Carmela | Torralba | 6/28/2007 |
| Dora | Vasquez | 5/14/2007 |
| Cindy | Vega | 11/20/2007 |
| Jennifer | Velasco | 6/30/2006 |
| Chloe | Wilson | 10/8/2007 |
| Melody | Zacarias | 5/17/2007 |
| Hazel | Zamora | 1/27/2007 |
| Kayden | Alexander | 2/6/2006 |
| Yvette | Alvarado | 3/30/2006 |
| Damian | Delaney | 6/26/1961 |
| Kimberly | Amezcua | 7/14/2006 |
| Kimberly | Antonio | 5/30/2006 |
| Alicia | Aquino | 6/15/2006 |
| Samantha | Aquino | 6/27/2006 |
| Destiny | Arauz | 6/13/2006 |
| Julissa | Arroyo | 5/26/2006 |
| Cassandra | Ayala | 8/18/2006 |
| Samantha | Ayala | 7/2/2006 |
| Eva | Azul | 2/6/2006 |
| Stacey | Bacelis | 4/4/2006 |
| America | Baires | 7/17/2006 |
| Ashley | Barajas | 6/10/2005 |
| Janet | Barrera | 10/14/2005 |
| Alisa | Benitez | 5/26/2006 |
| Sara | Bolanos-Mejia | 1/12/2006 |
| Ashley | Mendez | 6/22/2006 |
| Ana | Carvente | 7/12/2006 |
| Mia | Castellanos | 6/19/2006 |
| Rosalma | Cebreros | 3/3/2006 |
| Yosselin | Celis | 5/25/2005 |
| Jacqueline | Lucero | 9/2/1974 |
| Evelyn | Chamu | 1/30/2006 |
| Nataly | Chavez | 2/27/2006 |
| Juliana | Coeto | 10/4/2005 |
| Shesith | Covarrubias | 12/8/2005 |
| Ashley | Cruz | 7/20/2006 |
| Erin | Dakers | 8/2/2007 |
| Claudia | Lopez | 6/16/2007 |
| Cristina | Diaz | 10/13/2005 |
| Zoe | Dighero | 4/11/2006 |
| Kaylynn | Domingo | 10/4/2006 |
| Celeste | Dominguez | 6/1/2006 |
| Lizzy | Escobar | 12/14/2005 |
| Lilian | Escorza | 12/23/2005 |
REGISTRATION
| First Name | Last Name | DoB |
|---|---|---|
| Jacqueline | Lucero | 9/2/1974 |
| Ashley | Mendez | 6/22/2006 |
| Hyobe | Namkoong | 6/19/2007 |
| Hetzabel | Sanchez | 4/13/2005 |
| cristal | solis | 9/29/2006 |
| Briseida | Lopez | 5/22/2005 |
| Daiman | Johnson | 3/3/1968 |
| Kayleen | Vasquez | 12/9/2003 |
| Ashley | Aguilar | 12/9/2003 |
| Damian | Delaney | 6/26/1961 |
| Michelle | Dominguez | 5/15/2005 |
| Martha | Bustos | 1/12/1960 |
| Jaqueline | Granadino | 9/6/2004 |
| jacqueline | granadino | 9/6/2004 |
| Jacqueline | granadino | 9/6/2004 |
| Maria | Gutierrez | 11/30/2006 |
| Claudia | Lopez | 6/16/2007 |
| Kelly | Benitez | 9/14/1993 |
| Kelly | Benitez | 9/14/1993 |
RESULT
| First Name | Last Name | DoB | Start Code |
|---|---|---|---|
| Jacqueline | Lucero | 9/2/1974 | 1980001 |
| Ashley | Mendez | 6/22/2006 | 1980002 |
| Cristal | Solis | 9/29/2006 | 1980003 |
| Daiman | Johnson | 3/3/1968 | 1980004 |
| Damian | Delaney | 6/26/1961 | 1980005 |
| Michelle | Dominguez | 5/15/2005 | 1980006 |
| Martha | Bustos | 1/12/1960 | 1980007 |
| Claudia | Lopez | 6/16/2007 | 1980008 |
| Kelly | Benitez | 9/14/1993 | 1980009 |
Sample Data Sheet my problem is that my script sometimes getting run-time timeout. I am seeing map function but I'm not sure if it's applicable for my current problem.
here are my sheets that is included in my script. sheets are roster, form responses 1, reference, result. roster and registration tab have common columns (First name, Last Name, Date of Birth)
var SS = SpreadsheetApp.getActiveSpreadsheet()
var rosterTab = SS.getSheetByName('Roster')
var registrationTab = SS.getSheetByName('Responses 1')
var referenceTab = SS.getSheetByName('Reference')
var resultTab = SS.getSheetByName('Result') //this is where I posts all registered names that is on the roster tab.
var xLastRow = registrationTab.getLastRow();
var yLastRow = rosterTab.getLastRow();
var Data = [];
var codeStart = referenceTab.getRange('A1').getValue();
var rosterdata = rosterTab.getRange(1,1,300,3).getValues();
var registerdata = registrationTab.getRange(1,1,xLastRow,3).getValues();
for(var i = 0; i<yLastRow; i (){
for(var j = 0; j<xLastRow; j (){
if (rosterdata[i][0] === registerdata[j][0] && rosterdata[i][1] === registerdata[j][1] && rosterdata[i][2] === registerdata[j][2]){
var rosterFname = registerdata[j][0];
var rosterLname = registerdata[j][1];
var rosterDoB = registerdata[j][2];
var rosterCode = codeStart;
Data.push([rosterFname,rosterLname,rosterDoB,rosterCode]);
break;
}
}
}
resultTab.getRange( resultTab.getLastRow() 1, 1, Data.length,Data[0].length ).setValues(Data);
Is there another way on how to approach this matching without getting timed-out?
uj5u.com熱心網友回復:
function myfunky11() {
const ss = SpreadsheetApp.getActive();
const rosterTab = ss.getSheetByName('Roster');
const registrationTab = ss.getSheetByName('Responses 1');
const referenceTab = ss.getSheetByName('Reference');
let rsh = ss.getSheetByName('Result');
var data = [];
const codeStart = referenceTab.getRange('A1').getValue();
const ros = rosterTab.getRange(2, 1, rosterTab.getLastRow() - 1, 3).getDisplayValues().map(r => r[0] r[1] r[2]);
const reg = registrationTab.getRange(2, 1, registrationTab.getLastRow() - 1, 3).getValues();
reg.forEach(r => {
let s = r[0].toString() r[1].toString() Utilities.formatDate(new Date(r[2]), Session.getScriptTimeZone(), "M/d/yyyy");
if (ros.indexOf(s)>-1) {
r.push(codeStart);
data.push(r)
}
});
rsh.clear();
rsh.getRange(1, 1, data.length, data[0].length).setValues(data);
}
這現在有效
uj5u.com熱心網友回復:
您可以通過跟蹤已處理的最后一行來批量處理所有“名冊”資料 PropertiesService
const LAST_PROCESSED_ROW_PROPERTY_KEY = 'lastProcessedRow';
const PROCESS_ROW_PER_BATCH = 100;
var scriptProperties = PropertiesService.getScriptProperties();
var lastProcessedRow = scriptProperties.getProperty( LAST_PROCESSED_ROW_PROPERTY_KEY );
if ( lastProcessedRow === null ) {
lastProcessedRow = 0;
}
// Your variables here
var yLastRow = rosterTab.getLastRow();
var rowsToBeProcessed = PROCESS_ROW_PER_BATCH;
if ( lastProcessedRow == yLastRow ) {
Logger.log( 'No new data to be processed' );
return;
}
if ( yLastRow - lastProcessedRow < PROCESS_ROW_PER_BATCH ) {
rowsToBeProcessed = yLastRow - lastProcessedRow;
}
var rosterdata = rosterTab.getRange( lastProcessedRow 1, 1, rowsToBeProcessed, 3 ).getValues();
for( var i = 0; i < rosterdata.length; i ) {
// Your data processing logic here
}
// Set data logic here
scriptProperties.setProperty( LAST_PROCESSED_ROW_PROPERTY_KEY, lastProcessedRow rowsToBeProcessed );
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您的電子表格中有 3 張紙。
- 您想從“Form Response 1”和“Roster”表中檢索值。當“Form Response 1”表中“B”到“D”列的值與“Roster”表中“A”到“C”列的值相同時,您希望將它們放入“Result”表中附加值。
- 您希望降低此流程的流程成本。
在這種情況下,以下修改后的腳本如何?
修改后的腳本:
function myFunction() {
var SS = SpreadsheetApp.getActiveSpreadsheet();
var rosterTab = SS.getSheetByName('Roster');
var registrationTab = SS.getSheetByName('Form Response 1');
var referenceTab = SS.getSheetByName('Reference');
var resultTab = SS.getSheetByName('Result');
var xLastRow = registrationTab.getLastRow();
var yLastRow = rosterTab.getLastRow();
var Data = [];
var codeStart = referenceTab.getRange('A1').getValue();
var rosterdata = rosterTab.getRange(1, 1, yLastRow, 3).getValues();
var registerdata = registrationTab.getRange(2, 2, xLastRow - 1, 3).getValues();
// I modified below script.
// Create an object.
var obj = rosterdata.reduce((o, [a,b,c]) => (o[a b c] = true, o), {});
// Create an array for putting to sheet.
var values = registerdata.reduce((ar, [a, b, c]) => {
if (obj[a b c]) ar.push([a, b, c, codeStart]);
return ar;
}, []);
// Put the array to the result sheet.
if (values.length == 0) return;
resultTab.getRange(resultTab.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
}
- 在此修改中,創建一個用于搜索值的物件并創建一個用于放入作業表的陣列,并將創建的陣列附加到結果作業表中。通過這個流程,我認為工藝成本可能會降低一點。
參考:
- 降低()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/377818.html
標籤:google-apps-script google-sheets
上一篇:如何獲取GoogleDrivesAPI的files.listAPI端點的pageToken?[復制]
下一篇:例外:引數(String,String,String,(class),(class))與GmailApp.sendEmail的方法簽名不匹配
