我有一张4张电子表格:“List”,“Map N1”,“Map N2”和“Map N3”。它应该作为金属单位存款的控制。
“列表”包含以下列:
-MU(金属单位)
- 重量
- 位置(等级)
-Position(Letter)
-Position(Number)
- 到达日期和时间
- 出发日期和时间
-Destination
-Status
-Observations
当MU到达时,输入数据并且“Status”列接收“Awaiting positioning”作为值。当MU位于存款内时,“状态”变为“定位”。我需要做的是:
- 当“状态”更改为“已定位”时,将相应MU列的值复制到其中一个地图,具体取决于“位置(级别)”。如果“位置(级别)”为“N1”,则转到“映射N1”,“N2”转换为“映射N2”,所以它会进入。
- MU值应根据“位置(字母)”和“位置(数字)”值在工作表中定位。这样,下面的MU应该像这张图片一样转到表格:
我搜索并设法找到此代码:
if __name__ == "__main__":
etc
这个想法是使用这个代码来弄清楚如何自动复制值,然后使其适应定位事物。但这甚至没有将值复制到另一张表。
答案 0 :(得分:2)
您可以使用 setValue()代替 moveTo / copyTo 。
targetSheet.getRange(row,column).setValue(s.getRange(r.getRow(), 1, 1, 1).getValue());
如果您需要,可以使用以下代码。
它基本上使用单元格中的引用来获取正确的工作表,列和行。由于您的列不是原始列,我添加了一个循环来循环遍历地图工作表上的第一行并找到正确的列。
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.range;
if(s.getName() === "Lista" && r.getColumn() === 9 && r.getValue() === "Posicionada") {
var sheetname = s.getRange(r.getRow(),3).getValue();
var columnRef = s.getRange(r.getRow(),4).getValue();
var rowref = s.getRange(r.getRow(),5).getValue();
var targetSheet = ss.getSheetByName("Mapa " + sheetname);
var headers = targetSheet.getRange(1, 1, 1, targetSheet.getLastColumn()).getValues().toString().split(",");
var rows = targetSheet.getRange(1, 1, targetSheet.getLastRow(), 1).getValues().toString().split(",");
//Getting The correct Column
for (var i = 1; i < headers.length; i++) {
if (headers[i] === columnRef) {
break;
}
}
var column = i + 1;
//Getting the correct row
for (var i = 1; i < rows.length; i++) {
if (Number(rows[i]) === rowref) {
break;
}
}
var row = i + 1;
targetSheet.getRange(row,column).setValue(s.getRange(r.getRow(), 1, 1, 1).getValue());
}
}
答案 1 :(得分:0)
function onEdit(event) {
var range = event.range;
var fromRow = range.getRow();
var fromCol = range.getColumn()
...
s.getRange(fromRow, fromCol, 1, 1).copyTo(target);