复制整个电子表格,只保留值

Copy an entire Spreadsheet, Just Preserve the Values

我想将大约 20 多个 sheet 的整个传播sheet 复制到云端硬盘中的不同位置;但是,我只想保留每个单元格中的硬值和格式,而不是公式(基本上只是对值进行快照)。我一直在研究如何写这篇文章,但我对什么是最好的方法没有一个明确的想法。我刚开始在 google sheet 的培训中学习条件语句,如循环,如有任何帮助,我们将不胜感激。谢谢!

那些绿色的单元格都是 vlookup,它们是从我在另一个跨页上的数组更新的sheet。这个想法是在数组中获取所有正确的数据,让这个 sheet 完全填写当天的正确值,然后最好将其保存为 google sheet 但只是值,以便在数组数据出现错误时可以编辑它们。

如果您真的打算使用这些数据,您可能需要三思而后行,不要随意复制所有内容。如果您只想存档 只需将 export?format=zip 添加到 link 的末尾,您就会得到一个包含值和格式的已保存副本。

  • 您想复制 Google 驱动器中特定文件夹中的源电子表格。
  • 您想使用 a date stamped on it for a name 作为文件名。
  • 您不想复制公式。您只想复制显示值。
  • 在您的电子表格中,包含 many vlookups and other outside reference cells 的公式。
  • 您想使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

上述目标的示例脚本流程如下。

流量:

  1. 将源电子表格中的所有工作表复制为临时工作表。
  2. 在复制的工作表中,单元格仅被值覆盖。这样,公式就可以去掉了。
  3. 复制源电子表格。
  4. 删除源电子表格中的时间表。
  5. 删除目标电子表格中的原始工作表。
  6. 将复制的电子表格移动到特定文件夹。

示例脚本:

在您 运行 脚本之前,请设置源电子表格 ID 和目标文件夹 ID。

function myFunction() {
  var spreadsheetId = "###"; // Please set the source Spreadsheet ID.
  var destFolderId = "###";  // Please set the destination folder ID.

  // Copy each sheet in the source Spreadsheet by removing the formulas as the temporal sheets.
  var ss = SpreadsheetApp.openById(spreadsheetId);
  var tempSheets = ss.getSheets().map(function(sheet) {
    var dstSheet = sheet.copyTo(ss).setName(sheet.getSheetName() + "_temp");
    var src = dstSheet.getDataRange();
    src.copyTo(src, {contentsOnly: true});
    return dstSheet;
  });
  
  // Copy the source Spreadsheet.
  var destination = ss.copy(ss.getName() + " - " + new Date().toLocaleString());
  
  // Delete the temporal sheets in the source Spreadsheet.
  tempSheets.forEach(function(sheet) {ss.deleteSheet(sheet)});
  
  // Delete the original sheets from the copied Spreadsheet and rename the copied sheets.
  destination.getSheets().forEach(function(sheet) {
    var sheetName = sheet.getSheetName();
    if (sheetName.indexOf("_temp") == -1) {
      destination.deleteSheet(sheet);
    } else {
      sheet.setName(sheetName.slice(0, -5));
    }
  });

  // Move file to the destination folder.
  var file = DriveApp.getFileById(destination.getId());
  DriveApp.getFolderById(destFolderId).addFile(file);
  file.getParents().next().removeFile(file);
}

注:

  • 在此示例脚本中,使用了
  • 这是一个简单的示例脚本。所以请根据您的实际情况进行修改。

参考文献:

另一种非常简单的方法是将 sheet 下载到 Excel。它将保留本地公式但删除外部引用(如 importrange 等),因此数据将保持冻结状态;) 您甚至可以从 Gsheets 打开 Excel 文件(无需将其转换为 sheets)。