首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Google脚本中创建电子表格备份时复制格式和值,而不是公式?

如何在Google脚本中创建电子表格备份时复制格式和值,而不是公式?
EN

Stack Overflow用户
提问于 2019-10-06 18:50:25
回答 1查看 2.2K关注 0票数 1

目标是创建具有多个工作表的电子表格的冻结备份。备份电子表格需要复制值和格式,但不需要复制公式。

有些工作表有=IMPORTRANGE,如果先复制电子表格,然后复制同一范围内的值以消除公式,则会出现问题,因为新的电子表格需要访问函数中间导入的范围(这将导致A1中的#REF )。

这个问题已经问了很多次了,但似乎没有一个答案能解决这个问题。我看过这些问题(实际上还有更多问题):链接1链接2链接3链接4链接5链接6。我试着从这些问题的答案或这些问题的组合中实现片段,但没有结果。我测试过的每一个片段都很难追踪。

我尝试使用copyTo()forEach函数中复制整个工作表,使用{contentsOnly:true}{formatOnly:true}选项进行复制,但都没有成功。copyTo()希望范围位于相同的电子表格/表中,或者getDataRange()不匹配备份范围.

下面是我目前使用的脚本,它成功地创建了一个仅包含值的整个电子表格的副本。我想不起来我是从哪一个问题中得到的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function copyEntireSpreadsheet(){
  var ss,ssName,sheet,sheetName,data,destination
  ss = SpreadsheetApp.openById("id").getSheets();
  ssName = SpreadsheetApp.openById("id").getName();
  destination = SpreadsheetApp.create(ssName + " - " + new Date().toLocaleString());

  for (var i = 0; i < ss.length; i++){
    sheet = ss[i];
    sheetName = sheet.getSheetName();
    data = sheet.getSheetValues(1, 1, sheet.getLastRow(), sheet.getLastColumn());
    destination.insertSheet(sheetName);
    destination.getSheets()[i+1].getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).setValues(data);
  }

 destination.deleteSheet(destination.getSheetByName('Sheet1'));
}

源电子表格有许多格式,包括合并单元格、条件格式等,这将是理想的复制。我还可以将某些表硬编码到脚本中,如果这与另一种方法有任何不同的话。

简而言之:我正在寻找一个冻结备份的电子表格与多个工作表。值和格式需要复制,而不是公式。

我可能在所有这些问题的答案中遗漏了什么,所以我会继续尝试。同时,如能提供任何帮助/指导,将不胜感激。提前感谢!

解决了:@Tanaike下面的第二个示例脚本是一个很好的解决方法,可以复制具有其他电子表格引用的工作表,因此需要在被值覆盖之前访问它们。非常感谢“Tanaike”对此的广泛帮助--非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-06 21:34:15

  • 您希望将电子表格中所有工作表的值和格式复制到新的电子表格中。
    • 在这种情况下,您希望只复制没有公式的值。
    • The source spreadsheet has a lot of formatting with merged cells, conditional formatting, etc.
    • 源电子表格包括与IMPORTRANGE一起放置的值。

  • 您希望使用Google脚本来实现这一点。

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

流动:

  1. 将源电子表格中的所有工作表复制为时态表。
  2. 在复制的工作表中,单元格仅被值覆盖。这样,公式就可以被删除。
    • 如果复制了源电子表格,则用IMPORTRANGE检索的值将变为#REF。因为它需要在新复制的电子表格上授权。为了避免这种情况,在源电子表格中复制时态表。

  1. 复制源电子表格。
  2. 删除源电子表格中的时态表。
  3. 删除目标电子表格中的原始工作表。

通过上述流程,只有值可以在没有IMPORTRANGE授权的情况下被复制。

示例脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function copyEntireSpreadsheet() {
  var id = "###"; // Please set the source Spreadsheet ID.

  var ss = SpreadsheetApp.openById(id);
  var srcSheets = ss.getSheets();
  var tempSheets = srcSheets.map(function(sheet, i) {
    var sheetName = sheet.getSheetName();
    var dstSheet = sheet.copyTo(ss).setName(sheetName + "_temp");
    var src = dstSheet.getDataRange();
    src.copyTo(src, {contentsOnly: true});
    return dstSheet;
  });
  var destination = ss.copy(ss.getName() + " - " + new Date().toLocaleString());
  tempSheets.forEach(function(sheet) {ss.deleteSheet(sheet)});
  var dstSheets = destination.getSheets();
  dstSheets.forEach(function(sheet) {
    var sheetName = sheet.getSheetName();
    if (sheetName.indexOf("_temp") == -1) {
      destination.deleteSheet(sheet);
    } else {
      sheet.setName(sheetName.slice(0, -5));
    }
  });
}

参考文献:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58262948

复制
相关文章
Java父类强制转换子类原则
最近,微信群友在讨论子类父类的转换问题,其实不难,给大家用实例来说明一下就很明了了。 我们知道Java中子类转换成父类是没有任何问题的,那父类可以转换成子类吗? 来看下面这段程序: public class TestObjectConvert { public static void main(String[] args) { test1(); test2(); } private static void test1() { F
Java技术栈
2018/04/02
2.3K0
Java父类强制转换子类原则
Java强制类型转换异常
(2) 说明我文件夹modle里面的Question类,不能转换成com.core.entity文件里面的question类。
算法与编程之美
2023/01/03
1.8K0
Java强制类型转换异常
java.lang.ClassCastException(java强制类型转换异常)
ClassCastException,从字面上看,是类抛出异常,即是类型转换错误,通常是进行强制类型转换时候出的错误。如下图所示:
黑泽君
2018/10/11
44.8K0
java.lang.ClassCastException(java强制类型转换异常)
java类型强制转换异常例子_java.lang.unsatisfiedlinkerror
ClassCastException,从字面上看,是类型转换错误,通常是进行强制类型转换时候出的错误。下面对产生ClassCastException异常的原因进行分析,然后给出这种异常的解决方法。 这种异常是如何产生的呢?举一个比较形象的例子。 Animal表示动物,Dog表示狗,是动物的子类,Cat表示猫,是动物的子类。看下面的代码:
全栈程序员站长
2022/10/04
7850
Java子类与父类之间的对象转换(说明继承)
在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换。从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子类对象的时候,通过把变量定义为父类型,我们可以通过一个变量,使用该父类型的所有子类型实例;从父类型向子类型的转换称为向下转换(downcasting),通过向下转换,我们能在必要的时候,将父类型变量转换成子类型变量,使用一些通过子类型才能够使用的方法。以下是我对于对象转换的一些个人理解,如有不对,欢迎指正,虚心向大神们请教。
用户7886150
2020/12/10
3.8K0
Java数组 强制类型转换
最重要的是!!!最开始的时候声明的数组类型!!! 最重要的是!!!最开始的时候声明的数组类型!!! 最重要的是!!!最开始的时候声明的数组类型!!!
地鼠窝里有个Gopher
2022/10/30
1.8K0
java 父类 new 子类
父类: public class A {   public  void  say(){        System.out.println("Hello   A");   } } 子类: public class B extends  A{ public  void  say(){ System.out.println("Hello   B"); } public void sing(){ System.out.println("sing   hell
用户1220053
2018/02/09
2.5K0
Java基础:数值类型转换、强制类型转换
数值类型之间的转换,在小数值往大数值转换时,不会发生精度的损失。在小数值往大数值转换时有可能发生精度的损失。
呆呆
2021/10/04
2.4K0
Java——集合工具类(Collections工具类、Stack子类)
Collections是专为集合服务的工具类,可以进行List、Set、Map等集合的操作,比较有用 的方法如下:
Winter_world
2020/09/25
9240
Java——集合工具类(Collections工具类、Stack子类)
java的类型转换异常_类型转换异常英文
自己的项目中,有个定时任务的模块,里面需要将返回的对象强转为某个实体类JobModel,可是在转换的过程中,却报出了java.lang.ClassCastException: com.jy.admin.server.model.JobModel cannot be cast to com.jy.admin.server.model.JobModel
全栈程序员站长
2022/09/30
1.5K0
outputstream类或writer类的子类_java private
在本教程中,我们将借助示例学习Java OutputStreamWriter及其方法。
全栈程序员站长
2022/10/01
5430
outputstream类或writer类的子类_java private
Java异常类
异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。
翎野君
2023/05/12
4450
Java异常类
java父类引用指向子类对象好处_java子类调用父类属性
Java之所以引入多态的概念,原因之一就它在类的继承上的问题和C++不同,后者允许多继承,这确实给其带来了非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,势必在功能上有很大的限制,所以,Java引入多态性的概念以弥补这点不足,此外,抽象类和接口也是解决单继承规定限制的重要手段.同时,多态也是面向对象编程的精髓所在.
全栈程序员站长
2022/11/03
1.3K0
[python]父类、子类、子类实例属性
本文旨在说明 父类、子类、子类实例的属性继承关系: >>> A = type('A', (), {'name':1}) >>> B = type('B',(A,), {'addr':'beijing'})    #B的父类为A >>> A.__dict__ mappingproxy({'name': 1, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute
py3study
2020/01/19
1.9K0
[计组]强制类型转换
不改变数值内容,改变解释方式,一般是负数时会出问题,因为符号位是1,转成无符号位时会被当成数据内容
唯一Chat
2021/01/08
1.9K0
Java知多少(53)使用Java创建自己的异常子类
尽管Java的内置异常处理大多数常见错误,你也许希望建立你自己的异常类型来处理你所应用的特殊情况。这是非常简单的:只要定义Exception的一个子类就可以了(Exception当然是Throwable的一个子类)。你的子类不需要实际执行什么——它们在类型系统中的存在允许你把它们当成异常使用。
全栈程序员站长
2022/07/05
3200
【原创】JAVA数值类型强制类型转换扩展
 经常需要将一些数值类型转换为另外一种数值类型。下图给出了数值类型之间的合法转换。
零点
2023/10/18
1750
【原创】JAVA数值类型强制类型转换扩展
Java导出excel工具类
web开发中,一个系统的普通需求也包括导出excel,一般采用POI做统计报表导出excel。
用户7108768
2021/09/23
1.1K0
Java之——自动类型提升、强制类型转换
Java各整数类型有固定的表数范围和字段长度,不受具体操作系统的影响,以保证Java程序的可移植性
CODER-V
2023/03/04
1K0
Java之——自动类型提升、强制类型转换
【说站】java强制类型转换的使用
2、如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。
很酷的站长
2022/11/24
7860
【说站】java强制类型转换的使用

相似问题

查询以查找列表中的所有匹配项。

11

以列表作为参数的spring数据查询方法

12

以有效的方式将dict中的所有项作为参数传递

224

使用列表中的项作为参数

22

JDOQL子查询计数问题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文