我使用=QUERY(IMPORTRANGE..)
将A,B和C列的数据从工作表1导入到工作表2。我必须在工作表2的D列中记录每个导入的条目。但是,对于添加的任何新注释,D列中的注释(对于先前的注释)将保留在相同的单元格中。例如,公式在A2中,因此新数据将添加到A2,B2和C2中。注释在D2中。导入新的时,前一个移至A3,B3和C3。但是,该注释仍在D2中。
添加新条目时,有什么方法可以使这些笔记自动移至下一行吗?
以下是必须与之导入数据的文件:https://drive.google.com/drive/folders/1wbOfW9PbSfJbTBv_CwXOTiyyN_LBTiFq?usp=sharing
答案 0 :(得分:0)
如果注释是字符串,请尝试像这样输入D2:
= ARRAYFORMULA(if(row(A2:A)= max(arrayformula(if(ISBLANK(A2:A),0,row(A2:A))))),“您的注释”,“”))< / p>
这会自动将您的注释放在数据的最后一行
答案 1 :(得分:0)
如果我的理解正确,那么您需要完成以下任务:
IMPORTRANGE
将数据从一个电子表格导入到另一个电子表格。notes
添加到目标电子表格中的列。要实现这一点,您需要跟踪哪个注释属于导入数据的哪一行。两组数据都应以某种方式附加。考虑到您在A列中有一个时间戳记,并且该时间戳记可能对于每一行都是唯一的,因此可以将该时间戳记用于附加两者(如果不可能,我建议添加另一列,该列将用于标识每一行毫无疑问,通过某种id
)。
在这一点上,我会考虑使用Google Apps Script来满足您的需求。使用此工具,您可以开发=QUERY(IMPORTRANGE(...))
现在提供的功能,并且可以使用其他Apps脚本工具达到所需的结果。要实现此目的,可能特别需要两种工具:
note
附加到哪一行数据的信息。您可以在以下几行上做一些事情:
安装两个编辑触发器,(1)一个将在编辑源电子表格时触发功能,(2)另一个将在编辑目标电子表格时触发功能(无法使用简单的触发器,因为您必须引用电子表格可能未绑定到的文件)。您可以执行manually或programmatically。
创建一个函数,该函数针对添加到目标表的每个note
(在此代码示例中,该列在D列中,请根据您的偏好进行更改),以存储键值对其中key
是A列中的值(应唯一标识一行数据),而value
是note
。稍后,脚本将使用它来了解每个note
所属的位置:
function storeNotes(e) {
var scriptProperties = PropertiesService.getScriptProperties();
var cell = e.range;
var sheet = cell.getSheet();
var rowIndex = cell.getRow();
var column = cell.getColumn();
var noteColumn = 4; // The column where notes are written, change accordingly
// Check whether correct sheet, column and row is edited:
if (column == noteColumn && rowIndex > 1 && sheet.getName() == "Destination") {
var row = sheet.getRange(rowIndex, 1, 1, sheet.getLastColumn()).getValues()[0];
scriptProperties.setProperty(row[0], row[noteColumn - 1]); // Store property to script properties
}
}
columnsToDelete
中的索引-不会被复制/粘贴,您可以根据自己的喜好轻松更改此设置):function copyData(e) {
var range = e.range;
var origin = range.getSheet();
var row = range.getRow();
if (origin.getName() == "Origin" && row > 1) { // Check if edited sheet is called "Origin" and edited row is not a header.
var dest = SpreadsheetApp.openById("your-destination-spreadsheet-id").getSheetByName("Destination");
var firstRow = 2;
var firstCol = 1;
var numRows = origin.getLastRow() - 1;
var numCols = origin.getLastColumn();
var values = origin.getRange(firstRow, firstCol, numRows, numCols).getValues();
// Removing some of the columns to get copied/pasted (in this case B and D):
var columnsToDelete = [1, 3];
values = values.map(function(row) {
for (var i = row.length; i > 0; i--) {
for (var j = 0; j < columnsToDelete.length; j++) {
if (i == columnsToDelete[j]) {
row.splice(i, 1);
}
}
}
return row;
})
// Copying content from source to destination:
var firstRowDest = 2;
var firstColDest = 1;
var numRowsDest = values.length;
var numColsDest = values[0].length;
var noteColumn = 4;
var currentValues = dest.getDataRange().getValues();
if (currentValues.length > 1) dest.deleteRows(2, dest.getLastRow() - 1);
var importedRange = dest.getRange(firstRowDest, firstColDest, numRowsDest, numColsDest);
importedRange.setValues(values);
// Writing notes stored in Properties in the appropriate rows:
var properties = PropertiesService.getScriptProperties().getProperties();
for (var i = 0; i < values.length; i++) {
for (var key in properties) {
if (key == values[i][0]) {
dest.getRange(i + 2, noteColumn).setValue(properties[key])
}
}
}
}
}
注意:
Origin
,将其复制到其中的工作表称为Destination
(据我了解,它们位于不同的电子表格中)。我希望这会有所帮助。
答案 2 :(得分:0)
感谢大家对我的帮助,尤其是Lamblichus和user11982798。我最近注意到,importrange将以与源文件相同的顺序将数据导入到目标。在我基于时间戳对数据进行降序排序之前,新条目始终位于第一行。如果将其更改为升序,则新行将添加到最后一行,因此音符/注释顺序不会受到影响。
是否可以将目标文件中的注释/评论更新回源文件?