2016-12-06 53 views
0

我試圖將所有值和格式複製到不同的電子表格,每週一次,每次在工作簿中創建一個新工作表。這是爲了檔案目的。我拼湊在一起以下內容:詢問名稱時複製/粘貼值和格式

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); 
} 
+0

因爲您不是問用戶?腳本的哪部分完全不起作用? –

+1

在另一個說明中,您應該減少所有那些getDataRange()調用,如var range = source.getDataRange(); var sValues = range.getValues(); var sBG = range.getBackgrounds();等等 – utphx

回答

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