在询问姓名时复制/粘贴值和格式

时间:2016-12-06 05:06:56

标签: google-apps-script google-sheets

我正在尝试将所有值和格式复制到不同的电子表格,每周一次,每次在工作簿中创建一个新工作表。这是出于档案目的。我拼凑了以下内容:

function ArchiveByWeek(){
  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('CRS Stats By Week')
  var buildVersion = Browser.inputBox("What is the Weekend Ending Date?");
  var sValues = source.getDataRange().getValues();
  var sBG = source.getDataRange().getBackgrounds();
  var sFC = source.getDataRange().getFontColors();
  var sFF = source.getDataRange().getFontFamilies();
  var sFL = source.getDataRange().getFontLines();
  var sFFa = source.getDataRange().getFontFamilies();
  var sFSz = source.getDataRange().getFontSizes();
  var sFSt = source.getDataRange().getFontStyles();
  var sFW = source.getDataRange().getFontWeights();
  var sHA = source.getDataRange().getHorizontalAlignments();
  var sVA = source.getDataRange().getVerticalAlignments();
  var sNF = source.getDataRange().getNumberFormats();
  var sWR = source.getDataRange().getWraps();
  var destination = SpreadsheetApp.openById('1WVfJGDbdOewO2H-aMhQiek7sCOolK6xH7cSbfZ8KQgY');
  var destinationSheet = destination.insertSheet(buildVersion, 1);
  destinationSheet.getRange(1,1,sValues.length,sValues[0].length).setValues(sValues)
  .setBackgrounds(sBG)
  .setFontColors(sFC)
  .setFontFamilies(sFF)
  .setFontLines(sFL)
  .setFontFamilies(sFFa)
  .setFontSizes(sFSz)
  .setFontStyles(sFSt)
  .setFontWeights(sFW)
  .setHorizontalAlignments(sHA)
  .setVerticalAlignments(sVA)
  .setNumberFormats(sNF)
  .setWraps(sWR);
}

这似乎工作正常,只有一些单元格不被复制。出于某种原因,只有细胞才能将其他细胞相加。无法弄清楚原因。

我发现以下脚本完美无缺,只是我找不到给每张新表单一个唯一名称的方法:

function copySheetValues(){
  var source = SpreadsheetApp.getActiveSheet();
  var sourcename = source.getSheetName();
  var sValues = source.getDataRange().getValues();
  var sBG = source.getDataRange().getBackgrounds();
  var sFC = source.getDataRange().getFontColors();
  var sFF = source.getDataRange().getFontFamilies();
  var sFL = source.getDataRange().getFontLines();
  var sFFa = source.getDataRange().getFontFamilies();
  var sFSz = source.getDataRange().getFontSizes();
  var sFSt = source.getDataRange().getFontStyles();
  var sFW = source.getDataRange().getFontWeights();
  var sHA = source.getDataRange().getHorizontalAlignments();
  var sVA = source.getDataRange().getVerticalAlignments();
  var sNF = source.getDataRange().getNumberFormats();
  var sWR = source.getDataRange().getWraps();

  var destination = SpreadsheetApp.openById('15ucPbZrIYXZAOCYVdpK6OA0oyQT1NcsmuiJmDRfdpHQ');
  var destinationSheet = destination.insertSheet(sourcename, 0);
  destinationSheet.getRange(1,1,sValues.length,sValues[0].length).setValues(sValues)
  .setBackgrounds(sBG)
  .setFontColors(sFC)
  .setFontFamilies(sFF)
  .setFontLines(sFL)
  .setFontFamilies(sFFa)
  .setFontSizes(sFSz)
  .setFontStyles(sFSt)
  .setFontWeights(sFW)
  .setHorizontalAlignments(sHA)
  .setVerticalAlignments(sVA)
  .setNumberFormats(sNF)
  .setWraps(sWR);
}

1 个答案:

答案 0 :(得分:0)

我实际上能够提出一个我满意的解决方案。这样就可以粘贴所有值,并且在查看时格式与纸张上的格式完全相同。它要求提供新表的名称,这是我的意图:

    function Archive() {
    var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SHEET NAME')
    var sValues = source.getDataRange()
        .getValues();
    var weekEnding = Browser.inputBox("What is the Weekend Ending Date?");
    var destination = SpreadsheetApp.openById('SHEET ID');
    var copy = source.copyTo(destination)
        .setName(weekEnding)
    copy.getRange(1, 1, sValues.length, sValues[0].length)
        .setValues(sValues); // overwrite all formulas that the copyTo preserved