使用谷歌应用程序脚本自动复制从工作表2到工作表1的单元格值

时间:2016-12-20 09:24:45

标签: excel google-apps-script

我正在尝试获取工作表2中的列Notes值,并将其放在工作表1的列注释中。为此,它们应具有相同的列公司值。当我在公司(表2)中输入值时,代码将查找它是否在公司(表1)中具有相同的值。如果代码找到相同的Company值,我输入的Notes(Sheet 2)中的值将自动放入Notes(Sheet 1)中。我在代码中使用了if / else语句,但它没有运行。

非常感谢任何帮助。

例如:

表1 enter image description here

表2 enter image description here

这是我的代码:)



function onEdit() {
  var sheetId = SpreadsheetApp.openById('1fx59GrC_8WEU5DCM5y2N8YR3PK936RLqZVknQ66WWUA'); //replace with source ID
  var sourceSheet = sheetId.getSheetByName('Notes'); //replace with source Sheet tab name
  var notesActiveCell = sourceSheet.getActiveCell();
  var notesRow = notesActiveCell.getRow();
  var notesComp = SpreadsheetApp.getActiveSheet().getRange('B' + notesRow.toString()); 

  
  var destSheet = sheetId.getSheetByName('Companies'); //replace with destination Sheet tab name
  var compActiveCell = destSheet.getActiveCell();
  var compRow = compActiveCell.getRow();
  var companies = SpreadsheetApp.getActiveSheet().getRange('B' + compRow.toString());
  
  
  if (notesComp.getValues() == companies.getValues()) {
    Logger.log(notesComp.getValues());
    var sourceRange = SpreadsheetApp.getActiveSheet().getRange('C' + notesRow.toString()); //assign the range you want to copy
    var notesData = sourceRange.getValues();
    destSheet.getRange('F' + compRow.toString()).setValues(notesData);
  }
}




2 个答案:

答案 0 :(得分:0)

您的代码中存在很多错误。我不是一个非常有经验的程序员,但形成你所说的我认为下面的脚本应该给你一个很好的起点。

别忘了,输入值时还需要添加onEdit触发器来运行脚本。

function onEdit(e) {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getActiveSheet(); 
var sourceCellRow = sourceSheet.getActiveCell().getRowIndex();
var sourceData = sourceSheet.getRange(sourceCellRow, 1, 1, 2).getValues();

var destSS = SpreadsheetApp.openById('Paste destination Spreadsheet ID here');
var destSheet = destSS.getSheetByName('Companies');
var searchData = destSheet.getRange(1, 1,     destSheet.getLastRow()).getValues();

for (var i = 0; i < searchData.length; i ++){
   if(searchData[i][0] == sourceData[0][0]){
      destSheet.getRange(i + 1, 2).setValue(sourceData[0][1]);
      break;
     }     
    }
   }

答案 1 :(得分:0)

尝试使用copyTo(destination)

将一系列细胞中的数据复制到另一个细胞范围。值和格式都被复制。

// The code below will copy the first 5 columns over to the 6th column.
var sheet = SpreadsheetApp.getActiveSheet();
var rangeToCopy = sheet.getRange(1, 1, sheet.getMaxRows(), 5);
rangeToCopy.copyTo(sheet.getRange(1, 6));
}

我认为这在你的onEdit()函数中是非常宝贵的。\

您可能还想查看this google forum

中的此示例
function Copy() {
var sss = SpreadsheetApp.openById('spreadsheet_key'); //replace with source ID
var ss = sss.getSheetByName('Source'); //replace with source Sheet tab name
var range = ss.getRange('A2:E6'); //assign the range you want to copy
var data = range.getValues();

var tss = SpreadsheetApp.openById('spreadsheet_key'); //replace with destination ID
var ts = tss.getSheetByName('SavedData'); //replace with destination Sheet tab name
ts.getRange(ts.getLastRow()+1, 1,5,5).setValues(data); //you will need to define the size of the copied data see getRange()
}