仅从单独的Google表格复制格式

时间:2018-06-06 23:00:47

标签: google-apps-script google-sheets

我正在尝试仅从与当前工作表不同的工作簿中的源工作表复制格式。基本上,源表格格式发生了变化,我想将格式化的更新提取到我的目标表格中(这是我将要使用的当前表格)。我正在使用以下代码,但我在最后一行得到“无法将电子表格转换为(类)”错误。任何见解?

var ss = SpreadsheetApp.openById("Source ID")
var source = ss
var destination = SpreadsheetApp.openById("Destination ID");
var range = source.getRange("N3:AE50");
range.copyFormatToRange(destination, 10, 27, 4, 50);

1 个答案:

答案 0 :(得分:0)

您想将格式从电子表格A复制到电子表格B.如果我的理解是正确的,那么这个变通方法怎么样?我认为你的情况有几个答案,所以请把它当作其中之一。

正如tehhowch指出的,copyFormatToRange()可用于电子表格中的相同表格。对于这种情况,我知道您想要在2个电子表格之间使用。在我的解决方法中,我使用了以下流程。

  1. 将带有“来源ID”的电子表格的源表复制到带有“目的地ID”的电子表格。
  2. 从复制的工作表中检索范围作为源范围。
  3. 使用copyFormatToRange()将源范围复制到目标表。
  4. 删除复制的表格。
  5. 示例脚本:

    var sourceA1Notation = "N3:AE50";
    var destinationA1Notation = "D10"; // row=4, col=10 This is the cell of upper left for putting the source range.
    var source = SpreadsheetApp.openById("Source ID");
    var destination = SpreadsheetApp.openById("Destination ID");
    
    var sourceSheet = source.getSheets()[0]; // You can also use source.getSheetByName(name)
    var destinationSheet = destination.getSheets()[0]; // You can also use source.getSheetByName(name)
    
    var copiedsheet = sourceSheet.copyTo(destination);
    var sourceRange = copiedsheet.getRange(sourceA1Notation);
    var destinationRange = destinationSheet.getRange(destinationA1Notation);
    sourceRange.copyFormatToRange(
      destinationSheet,
      destinationRange.getColumn(),
      destinationRange.getColumn() + sourceRange.getNumColumns() - 1,
      destinationRange.getRow(),
      destinationRange.getRow() + sourceRange.getNumRows() - 1
    );
    destination.deleteSheet(copiedsheet);
    

    注意:

    • 使用此功能时,请输入并确认sourceA1NotationdestinationA1Notation"Source ID""Destination ID"
      • destinationA1Notation是左上角的单元格,用于放置源范围。
    • 在此示例脚本中,使用了每个第一张“源ID”和“目标ID”。如果您想使用其他工作表,请修改此脚本。

    参考文献:

    如果我误解了你想要的东西,我很抱歉。