将文本格式从单元格迁移到引用它的另一个单元格

时间:2017-09-13 11:43:00

标签: google-apps-script

在Google电子表格的其中一张表中,有一个我在其他单元格中引用的单元格。文本被复制正常,但没有任何格式。因此,如果我有任何粗体或斜体书写,它将在引用的单元格中显示为正常书写。

我已经尝试过以下脚本,但它没有按预期工作。它不是复制整个格式,而是复制单元格边框,并将其复制到下面的多个单元格中(总共7个单元格,目标单元格加上下面的6个单元格。)

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var activeSheetName = activeSheet.getName();
  var activeCell = activeSheet.getActiveCell();
  if ( activeSheet.getName().indexOf("Job ID") != -1 && activeCell.getRow() == 4 && activeCell.getColumn() == 15 ) {
    var targetSheet = ss.getSheetByName('Active Jobs');
    var jobRowNumber = findJobIdRow();
    var sourceCell = activeSheet.getRange(4,1,15,1);
    sourceCell.copyFormatToRange(targetSheet, 16, 16, jobRowNumber, jobRowNumber);
  }
}

function findJobIdRow() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var jobID = ss.getActiveSheet().getRange(2,1).getValue();
  var column = ss.getSheetByName('Active Jobs').getRange(2,1,ss.getSheetByName('Active Jobs').getMaxRows()-2,1);
  var values = column.getValues(); // get all data in one call
  for(var ct = 0; ct < values.length-1; ct++){
    if(values[ct][0] == jobID){
      var ct = ct+2;
      break;
    }
  }
  return ct;
}

1 个答案:

答案 0 :(得分:1)

首先,您对getRange的调用可能包含错误: 你写的

var sourceCell = activeSheet.getRange(4,1,15,1);

但这个范围不是单个单元格,从A4开始是15比1的范围。顺序是(row,column,numRows,numColumns)。也许你的意思是

var sourceCell = activeSheet.getRange(4,15,1,1);

其次,我建议使用copyTo方法,该方法具有取代“copy ... ToRange”方法功能的选项。

var targetRange = targetSheet.getRange(...);
sourceCell.copyTo(targetRange, {formatOnly: true});