尋找一個腳本,該腳本將從源作業表范圍 B4:C 復制資料并粘貼到單獨的目標作業簿列 H4:I僅在一個或兩個單元格中包含內容的行(即丟棄下面頂部表格的第 7 行),按源排序C 列的日期值從最晚到最早,如下表所示:
- 資料源不斷被添加和重新排列,所以這是一個不斷增長的范圍;不是我下面腳本中定義的靜態范圍維度

下面是最好的,我可以讓它作業,雖然它不會省略空行,按日期排序,并且只評估靜態源范圍。而且處理需要很長時間(約 2 分鐘,但這沒什么大不了的),所以我希望社區建議的適當腳本也可以改善這方面:
function Import() {
var cc = SpreadsheetApp.getActiveSheet();
var ss = SpreadsheetApp.openById('sheetID').getSheetByName('tabname');
var data = ss.getRange("B4:C8723").getValues();
cc.getRange("H4:I").clearContent();
cc.getRange("H4:I8723").setValues(data)
}
所需的腳本實際上是以下公式:
=query(importrange(sheet,tab!range),"select B,C where B is not null order by C desc")
希望要求是明確的;謝謝您的幫助。
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想將公式轉換
=query(importrange(sheet,tab!range),"select B,C where B is not null order by C desc")為 Google Apps 腳本。
在這種情況下,如何進行以下修改?
從:
cc.getRange("H4:I").clearContent();
cc.getRange("H4:I8723").setValues(data)
到:
var values = data.filter(([b]) => b != "").sort(([,c1], [,c2]) => c1 > c2 ? -1 : 1);
cc.getRange("H4:I").clearContent();
cc.getRange("H4:I" (values.length 3)).setValues(values);
- 在此修改中,對過濾后的值進行排序并將它們放置到目標作業表中。
參考:
- 篩選()
- 種類()
uj5u.com熱心網友回復:
function Import() {
var dss = SpreadsheetApp.getActive();
const dsh = dss.getActiveSheet();
var sss = SpreadsheetApp.openById('sheetID');
const ssh = sss.getSheetByName('tabname');
var vs = ssh.getRange(4,2,ssh.getLastRow() -3,2).getValues().filter(r => r[0] && r[1]);
dsh.getRange(4,8,dsh.getLastRow() - 3, 2).clearContent();
dsh.getRange(4,8,vs.length,vs[0].length).setValues(vs)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/416501.html
標籤:
