Javascript google应用程序脚本-在下一个空行中写入数据
使用谷歌应用程序脚本,我从其他电子表格收集数据。设置为每天收集数据,并将其写入“数据库”中 到目前为止,我将此作为基本解决方案,但这始终是写入数据并替换现有数据 在我的脚本中,我想要将数据从导入范围电子表格复制到特定列,我想要的是将数据连续复制到下一个空行,但如何在不删除现有复制数据的情况下执行此操作?。请帮忙Javascript google应用程序脚本-在下一个空行中写入数据,javascript,java,google-apps-script,google-sheets,Javascript,Java,Google Apps Script,Google Sheets,使用谷歌应用程序脚本,我从其他电子表格收集数据。设置为每天收集数据,并将其写入“数据库”中 到目前为止,我将此作为基本解决方案,但这始终是写入数据并替换现有数据 在我的脚本中,我想要将数据从导入范围电子表格复制到特定列,我想要的是将数据连续复制到下一个空行,但如何在不删除现有复制数据的情况下执行此操作?。请帮忙 var scriptProperties = PropertiesService.getScriptProperties(); var ssid = '1usRuvazJlxAGvF0G
var scriptProperties = PropertiesService.getScriptProperties();
var ssid = '1usRuvazJlxAGvF0G2-e00MEQ_AjMCOnWopBFX4qfUcc';
var sheetName = 'DATABASE';
function CopyDatabase() {
var sheet = SpreadsheetApp.openById(ssid).getSheetByName(sheetName);
var startRow = 3;
var numRows = sheet.getLastRow() - 1;
var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
var data = dataRange.getValues();
var Copy = "Copy";
var newRow = sheet.getLastRow() + 1;
for (var i = 0; i < data.length; ++i) {
var row = data[i];
if (row[5] != Copy) {
var Code = row[0];
var orderDate = row[1];
var custName = row[2];
sheet.getRange(startRow + i, 5).setValue(Code);
sheet.getRange(startRow + i, 6).setValue(orderDate);
sheet.getRange(startRow + i, 7).setValue(custName);
}
}
}
将数据复制到电子表格中的其他选项卡可能是最简单的。尝试将代码中的
for
循环替换为以下内容:
const targetSheetName = 'Archive of Daily Data';
const targetSheet = sheet.getParent().getSheetByName(targetSheetName)
|| sheet.getParent().insertSheet(targetSheetName);
data
.filter(row => row[3] === Copy)
.forEach(row => targetSheet.appendRow([row[0], row[1], row[2]]));
如果我理解正确,您希望将列
A-D
(其中列D
不是copy
)中的行复制到列E-H
,复制到这些目标列的第一个空行
如果是这样,您可以:
- 通过获取列
via中的第一个空行E-H
- 使用从源数据中筛选出不包含
的行Copy
- 用于将筛选的行复制到目标列(从第一个空行开始)
我看不出您在哪里指定了第二个电子表格。整个流程都在一个电子表格上,就在工作表的左侧和右侧!我贴了一个答案,解释如何做到这一点。我不确定您是要复制包含
copy
的行,还是要复制不包含它的行。另外,我不确定是否应该复制D
列。无论如何,我希望总的想法是清楚的。嗨!,根据代码,包含COPY的行仅作为过滤器,以防止数据重复,如果(行[5]!=COPY),则运行脚本。动态数据是A列、B列和C列,我想连续记录的数据库是E列、F列和G列,而不替换以前的数据(追加行)@MetaMan谢谢你…嗨!我已经尝试过这种方法,它是有效的,但我需要的是复制到一个工作表。这段代码给了我不同项目的灵感。谢谢@兰布利希斯。你好你完全理解我需要什么。完美无瑕的我已经尝试过这个方法,它的工作方式我想要的,谢谢老兄!
const targetSheetName = 'Archive of Daily Data';
const targetSheet = sheet.getParent().getSheetByName(targetSheetName)
|| sheet.getParent().insertSheet(targetSheetName);
data
.filter(row => row[3] === Copy)
.forEach(row => targetSheet.appendRow([row[0], row[1], row[2]]));
function CopyDatabase() {
var sheet = SpreadsheetApp.openById(ssid).getSheetByName(sheetName);
var startRow = 3;
var numRows = sheet.getLastRow() - startRow + 1;
var startCol = 1;
var numCols = 4;
var startColTarget = 5;
var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);
var data = dataRange.getValues();
var Copy = "Copy";
var firstEmptyRow = sheet.getRange("E3:H3").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow() + 1;
var dataToCopy = data.filter(row => row[3] !== Copy);
sheet.getRange(firstEmptyRow, startColTarget, dataToCopy.length, dataToCopy[0].length).setValues(dataToCopy);
}