我正在努力尋找以下兩個函式呼叫“時間錯誤”的原因。我試圖讓谷歌在特定的 gmail 檔案夾中查找 csv 檔案并將資料插入到谷歌作業表中。這很好用。然后,一旦資料在作業表中,我就呼叫“UpdateComplete”,其唯一目的是按列 K 對作業表進行排序(其中有一個 vlookup 函式可以查看已移動到那里的已完成行的作業表),以便行已經具有 vlookup 功能的排序到頂部,然后它將公式復制到新的行中并且還沒有它。但是,如果谷歌片,說,2000行,CSV檔案包含2100年,由于某些原因被添加新的100行后呼叫 UpdateComplete。因此添加了新的 100 行,但它們不會像所有其他行一樣獲得 vlookup。僅當 Google 表格最初沒有足夠的行用于 csv 資料時,才會發生此問題。
但是,如果我從“RetrieveAwardData”中注釋掉對“UpdateComplete”的呼叫,并首先手動運行該呼叫,然后手動運行“UpdateComplete”,則它可以完美運行。我曾嘗試在呼叫“UpdateComplete”之前添加一個 Utilities.Sleep 呼叫(但在 csv setvalues 行之后),以防它是一個計時問題,但是當我這樣做時,系統在添加 100 之前等待該時間量新行,即使 sleep 行在添加 csv 資料的行之后。我還嘗試創建一個新函式,該函式首先呼叫“RetrieveAwardData”(將 UpdateComplete 呼叫注釋掉),然后呼叫 UpdateComplete 2nd,但發生了同樣的問題。如果我單獨、手動運行它們,但不能以編程方式一個接一個運行,為什么它可以正常作業?
function RetrieveAwardData(){
var threads = GmailApp.search('is:unread subject:VA Benefit Aid');
var message = GmailApp.getMessagesForThreads(threads); //retrieve all messages in the specified threads.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AwardData');
if(message[0] != null){
Logger.log(message[0]);
for (var i = 0 ; i < message.length; i ) {
for (var j = 0; j < message[i].length; j ) {
var attachment = message[i][j].getAttachments()[0];
var csvData = Utilities.parseCsv(attachment.getDataAsString('ISO-8859-1'), ",");
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
UpdateComplete();
GmailApp.markMessageRead(message[i][j]);
}
}
}
else{Logger.log("No file available.");}
}
function UpdateComplete(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('AwardData');
sheet.sort(11);
var LastAwardRow = sheet.getLastRow();
var Avals = ss.getRange("K1:K").getValues();
var LastCompleteRow = Avals.filter(String).length;
if(LastAwardRow != LastCompleteRow){
sheet.getRange("K" (LastCompleteRow 1) ":K" LastAwardRow).setFormulaR1C1(sheet.getRange("K" LastCompleteRow).getFormulaR1C1());
}
}
uj5u.com熱心網友回復:
出于檔案目的發布此資訊。
正如Cooper所提到的,使用SpreadsheetApp.flush()。
此方法可確保腳本的后續部分使用更新的資料,因為先前部分所做的更改會應用于電子表格。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369302.html
