对于源中的每一行,如果一列的单元格不为空,则将特定列数据从行复制到其他工作表的特定列中。(应用脚本)



上下文

我正在使用谷歌应用程序脚本来自动化谷歌表单中的一些内容。目前,我可以毫无问题地复制每一行的列数据。然而,我只需要复制特定列(G(中不为空的行,并且不知道在哪里/如何实现条件。

目标

  1. 对于源工作表中的每一行,检查G列中的单元格是否为空
  2. 如果单元格不为空,请将该行的部分内容复制到其他工作表中

这是当前脚本:

function theme_copy_WIP () {
let workbook = SpreadsheetApp.getActiveSpreadsheet(); // get the active sheets workbook
let auditSheet = SpreadsheetApp.getActiveSheet(); // active sheet of workbook to copy from (source)
let auditRangeList = auditSheet.getRangeList(["A2:A", "B2:B", "C2:C", "E2:E", "G2:G", "H2:H"]); //Range of columns to copy data from 
let themeSheet = workbook.getSheetByName("Themes"); //themes sheet to paste into (destination)
let destRangeList = themeSheet.getRangeList(["A2:A", "B2:B", "C2:C", "D2:D", "E2:E", "F2:F"]); //Range of destination columns to paste into
for( let i=0; i<auditRangeList.getRanges().length; i++ ) {
let auditRange = auditRangeList.getRanges()[i];
let destRange = destRangeList.getRanges()[i];
auditRange.copyTo(destRange, {contentsOnly: true});
}  
}

复制值

function myfunk() {
const ss = SpreadsheetApp.getActive();
const ssh = ss.getActiveSheet();
const svs = ssh.getRange(2, 1, ssh.getLastRow() - 1, ssh.getLastColumn()).getValues();
const tsh = ss.getSheetByName("Sheet0");
const tlr = tsh.getLastRow();
if (tlr > 1) {
tsh.getRange(2, 1, tsh.getLastRow() - 1, 6).clearContent();
}
let tvs = svs.map(r => {
if (r[6]) {
return [r[0], r[1], r[2], r[4], r[6], r[7]];
}
}).filter(r => r );
if (tvs && tvs.length > 0) {
tsh.getRange(2, 1, tvs.length, tvs[0].length).setValues(tvs);
}
}

不要使用rangeList,而是获取完整的范围,对其进行修改并设置回修改后的范围。

const out = auditSheet
.getRange("A2:H"+auditSheet.getLastRow())
.getValues()
.reduce((acc,[a,b,c,d,e,f,g,h]) => (g && acc.push([a,b,c,e,g,h]),acc),[])
themeSheet
.getRange(2,1,out.length, out[0].length)
.setValues(out)

最新更新