1

我有一張工作表,它從XML提要中提取數據。我寫了一個腳本,然後根據特定列的內容將該表分成幾張其他表。這一切工作正常。使用Google Apps腳本將值和格式複製到另一個Google電子表格

我的問題是,在我從XML中拉入數據之後,在將它分成新的工作表之前,我添加了一些列,做了一些格式化等。然後當我複製一行(使用appendRow())到新的表格,我失去了格式和公式。

我目前使用的代碼是:

var datarange = template_sheet.getDataRange(); 

for (var i in dataRange) { 
    workbook.getSheetByName(dataRange[i][6]).appendRow(dataRange[i]); 

} 

有沒有辦法做我正在尋找?或者,我是否需要首先將原始數據拆分爲單獨的表格,然後遍歷每個表格並執行格式化/公式?

回答

3

您應該使用Range對象的方法copyTo(range,optAdvancedArgs)

var datarange = template_sheet.getDataRange(); 
for (var i in datarange) 
    datarange[i].copyTo(
    workbook.getSheetByName(dataRange[i][6]).getRange(
     workbook.getSheetByName(dataRange[i][6]).getMaxRows()+1, 1)); 

應該做的伎倆

更清晰

var datarange = template_sheet.getDataRange(); 
for (var i in datarange) { 
    var sheet = workbook.getSheetByName(dataRange[i][6].getValue()); 
    datarange[i].copyTo(sheet.getRange(sheet.getMaxRows()+1, 1)); 
} 
+0

雅中,這個解決方案唯一的問題是我需要遍歷每一行來查找第6列的值,以將其複製到適當的工作表。或者你是否說copyTo與AppendTo完全相同,只是它複製了格式和公式? – nathangiesbrecht

+1

那麼,如果每一行都有可能出現在不同的工作表中,那麼您無法避免循環遍歷每一行 - 您的代碼段也是這樣做的;-)我添加了更清晰的腳本版本。查看[link](https://developers.google.com/apps-script/class_range#copyTo),因爲copyTo與appendRow不同。您需要使用getMaxRows()來查找第一個空行。 @nathangiesbrecht – Taras

+0

完美!謝謝! – nathangiesbrecht

1

副本值的標籤,並格式化從一個標籤到一個新的標籤:

function copyTab() { 
    var ss, sourceSheet, sourceData, sourceDataRange, newSheetTab; 

    ss = SpreadsheetApp.getActiveSpreadsheet();//Get active spreadsheet 

    sourceSheet = ss.getSheetByName("Sheet1");//Get the source sheet tab 
    newSheetTab = ss.insertSheet("New Sheet");//Create a new sheet tab 

    sourceDataRange = sourceSheet.getDataRange(); 

    sourceDataRange.copyTo(newSheetTab.getRange(1, 1));//Copies the data from a range of 
    //cells to another range of cells. By default both the values and formatting are copied 

} 
相關問題