0

早上好。

再次,我不得不请求你的帮助。

我正在编写的脚本是执行以下操作:

  1. 从选定的工作表中获取选项卡(在“源 1”表中选择)
  2. 将所有内容复制到粘贴表中
  3. 在“粘贴”表的基础上 - 创建一个包含所有内容的新文件(跳过标记的表)

我设法做的有一些缺点,例如:

  1. 没有循环来收集和复制标记的工作表
  2. 无参数仅复制样式和值(跳过功能)

但最让我担心的是照片没有被复制。

function copyAndPaste(){

    var app = SpreadsheetApp;
    var ss = app.getActiveSpreadsheet().getSheetByName("Source 1");
    //Logger.log(ss.getRange(3, 8).getValue())
    Logger.log("LastColumn "+ss.getLastColumn());
    Logger.log("LastRow "+ss.getLastRow());
    Logger.log(ss.getDataRange());
    var ssRange = ss.getRange(ss.getLastRow(), ss.getLastColumn()).getA1Notation();
    var ssRange_ = "A1:"+ssRange;
    var select = ss.getRange(ssRange_)
    var destSheet = app.getActiveSpreadsheet().getSheetByName("Paste");
    var destRange = destSheet.getRange(destSheet.getLastRow()+1,1);
    select.copyTo (destRange, {contentsOnly: true});
    select.copyTo (destRange, {contentsOnly: false});

}

我的工作档案

编辑 20.07.2018

这是代码,这是应该清理单元格中数据验证但出现错误的代码。

function copyAndPaset(){
  var app = SpreadsheetApp;
  var spreadsheet = app.getActiveSpreadsheet(); // Modified
  var ss = spreadsheet.getSheetByName("Source 1");// Modified

  var copiedSheet = ss.copyTo(spreadsheet).setName("Paste"); // Added
  copiedSheet.clearContents(); // Added

  var ssRange = ss.getRange(ss.getLastRow(), ss.getLastColumn()).getA1Notation();
  var ssRange_ = "A1:"+ssRange;
  var select = ss.getRange(ssRange_)

  var destSheet = app.getActiveSpreadsheet().getSheetByName("Paste");
  var destSheetRange = destSheet.getRange(destSheet.getLastRow(), destSheet.getLastColumn()).getA1Notation(); // I added but will get an error
  var destSheetRange_ ="A1:"+destSheetRange; // Added
  var destRangeClear = destSheet.getRange(destSheetRange_); // Added
  destRangeClear.clearDataValidations() // Added


  var destRange = destSheet.getRange(destSheet.getLastRow()+1,1);
  select.copyTo (destRange, {contentsOnly: true});
  //select.copyTo (destRange, {contentsOnly: false}); // When this is run, the merged cells are cleared.
}
4

1 回答 1

2

不幸的是,还没有在电子表格上检索图像的方法。那么这个解决方法怎么样?此解决方法的流程如下。

流动 :

  1. 将“Source 1”复制到与“Paste”工作表名称相同的电子表格中。
    • 这样,可以复制“Source 1”上的图像。
  2. 使用 删除复制的工作表(“粘贴”)上的内容clearContents()
    • 这样,工作表上的值就会被删除。但图像不会被删除。
  3. 使用您的脚本,将内容复制到“粘贴”。

修改后的脚本:

function copyAndPaset(){
  var app = SpreadsheetApp;
  var spreadsheet = app.getActiveSpreadsheet(); // Modified
  var ss = spreadsheet.getSheetByName("Source 1");// Modified
  var copiedSheet = ss.copyTo(spreadsheet).setName("Paste"); // Added
  copiedSheet.clearContents(); // Added

  var ssRange = ss.getRange(ss.getLastRow(), ss.getLastColumn()).getA1Notation();
  var ssRange_ = "A1:"+ssRange;
  var select = ss.getRange(ssRange_)
  var destSheet = app.getActiveSpreadsheet().getSheetByName("Paste");
  var destRange = destSheet.getRange(destSheet.getLastRow()+1,1);
  select.copyTo (destRange, {contentsOnly: true});
  select.copyTo (destRange, {contentsOnly: false}); // When this is run, the merged cells are cleared.
}

笔记 :

  • 在使用此脚本之前,请重命名或删除现有的“粘贴”表。
  • 在您的脚本中,该操作似乎与var copiedSheet = ss.copyTo(spreadsheet).setName("Paste");. 因为我认为您可能想要放置其他值而不是重复,所以我clearContents()在复制工作表后使用。
  • 使用select.copyTo (destRange, {contentsOnly: false})您的脚本时,合并的单元格将被清除。如果你想要这种情况,请使用它。如果要保留合并的单元格,请删除此脚本。

参考 :

如果此解决方法不是您想要的,我很抱歉。

编辑 :

发生错误是因为destSheet.getLastRow()destSheet.getLastColumn()都是 0。getRange(0, 0)发生错误。所以我修改了脚本如下。

function copyAndPaset(){
  var app = SpreadsheetApp;
  var spreadsheet = app.getActiveSpreadsheet(); // Modified
  var ss = spreadsheet.getSheetByName("Source 1");// Modified

  var copiedSheet = ss.copyTo(spreadsheet).setName("Paste"); // Added
  copiedSheet.clearContents(); // Added

  var ssRange = ss.getRange(ss.getLastRow(), ss.getLastColumn()).getA1Notation();
  var ssRange_ = "A1:"+ssRange;
  var select = ss.getRange(ssRange_)

  var destSheet = app.getActiveSpreadsheet().getSheetByName("Paste");

  var destRange = destSheet.getRange(destSheet.getLastRow()+1,1); // Moved
  select.copyTo (destRange, {contentsOnly: true}); // Moved

  var destSheetRange = destSheet.getRange(destSheet.getLastRow(), destSheet.getLastColumn()).getA1Notation(); // I added but will get an error
  var destSheetRange_ ="A1:"+destSheetRange; // Added
  var destRangeClear = destSheet.getRange(destSheetRange_); // Added
  destRangeClear.clearDataValidations() // Added

  //select.copyTo (destRange, {contentsOnly: false}); // When this is run, the merged cells are cleared.
}
于 2018-07-19T22:15:28.990 回答