Google apps script 使用Google Apps脚本将值和格式复制到另一个Google电子表格
我构建了一个从XML提要中提取数据的工作表。我编写了一个脚本,然后根据特定专栏的内容将一张纸拆分成其他几张纸。这一切都很好 我的问题是,从XML中提取数据后,在将其拆分为新的工作表之前,我添加了一些列,进行了一些格式化,等等。然后,当我将一行(使用appendRow())复制到新工作表时,我丢失了格式和公式 我目前使用的代码是:Google apps script 使用Google Apps脚本将值和格式复制到另一个Google电子表格,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,我构建了一个从XML提要中提取数据的工作表。我编写了一个脚本,然后根据特定专栏的内容将一张纸拆分成其他几张纸。这一切都很好 我的问题是,从XML中提取数据后,在将其拆分为新的工作表之前,我添加了一些列,进行了一些格式化,等等。然后,当我将一行(使用appendRow())复制到新工作表时,我丢失了格式和公式 我目前使用的代码是: var datarange = template_sheet.getDataRange(); for (var i in dataRange) { workbo
var datarange = template_sheet.getDataRange();
for (var i in dataRange) {
workbook.getSheetByName(dataRange[i][6]).appendRow(dataRange[i]);
}
有没有办法做到我想要的?或者我需要先将原始数据拆分成单独的表格,然后在每张表格中循环并进行格式化/公式设置吗 您应该使用范围对象的方法copyTo(范围,optadvancedags)
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));
}
您应该使用范围对象的方法copyTo(范围,optadvancedags)
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));
}
将具有值和格式的选项卡从一个选项卡复制到新选项卡:
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
}
将具有值和格式的选项卡从一个选项卡复制到新选项卡:
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
}
是的,这个解决方案唯一的问题是我需要遍历每一行来找到第6列的值,将它复制到正确的表中。或者,您是说copyTo的工作原理与appendTo完全相同,只是它也复制了格式和公式?如果每一行可能都指向不同的工作表,您就无法避免在每一行中循环—您的代码段也在这样做;-)我添加了更清晰的脚本版本。看一看作为copyTo做的与appendRow不同的事情。您需要使用getMaxRows()查找第一个空闲行@Nathangesbrechtya,这个解决方案唯一的问题是,我需要遍历每一行,找到第6列的值,将其复制到正确的表中。或者,您是说copyTo的工作原理与appendTo完全相同,只是它也复制了格式和公式?如果每一行可能都指向不同的工作表,您就无法避免在每一行中循环—您的代码段也在这样做;-)我添加了更清晰的脚本版本。看一看作为copyTo做的与appendRow不同的事情。您需要使用getMaxRows()查找第一个空闲行@纳桑吉斯布雷希特