Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用Google Apps脚本将值和格式复制到另一个Google电子表格_Google Apps Script_Google Sheets_Google Spreadsheet Api - Fatal编程技术网

Google apps script 使用Google Apps脚本将值和格式复制到另一个Google电子表格

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

我构建了一个从XML提要中提取数据的工作表。我编写了一个脚本,然后根据特定专栏的内容将一张纸拆分成其他几张纸。这一切都很好

我的问题是,从XML中提取数据后,在将其拆分为新的工作表之前,我添加了一些列,进行了一些格式化,等等。然后,当我将一行(使用appendRow())复制到新工作表时,我丢失了格式和公式

我目前使用的代码是:

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()查找第一个空闲行@纳桑吉斯布雷希特