当前位置: 首页 > 知识库问答 >
问题:

Google脚本将电子表格中的工作表复制到新的电子表格中,并在特定单元格后命名新的电子表格

冉永宁
2023-03-14

我有一个谷歌电子表格,里面有多张表格,我想把每一张表格复制到一个新的电子表格中,并在一个特定的单元格中以文本命名新的电子表格。我很高兴运行脚本多次,所以我想让它复制活动表。

即。我所拥有的=称为“颜色”的电子表格——工作表1=“红色”,工作表2=“蓝色”,工作表3=“黄色”,等等。

我想要什么=

名为“红色”的电子表格。电子表格叫做"蓝色",电子表格叫做"黄色"

到目前为止,我有这个脚本,但它告诉我“找不到脚本函数:有关详细信息,请参见SaveAsPreadSheet”

function copyDocument() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); // Get current active spreadsheet.
var sstocopy = ss.getActiveSheet(); // Get spreadsheet with DriveApp.
var sheet = ss.getActiveSheet(); // Get current active sheet.
var sheet_name = sheet.getRange("i2").getValue(); // Get the value of cell B1, used to name the new spreadsheet.
var folder = DriveApp.getFolderById("xxxxxxxxxxxxx"); // Get the ID of the folder where you will place a copy of the spreadsheet.
sstocopy.makeCopy(sheet_name,folder); // Make a copy of the spreadsheet in the destination folder.

任何帮助都将不胜感激。

共有1个答案

澹台浩广
2023-03-14

您需要将电子表格作为文件打开,而不是作为电子表格打开,以便能够使用makeCopy功能。

因此,代码中的这一行不正确:

var sstocopy = ss.getActiveSheet(); // Get spreadsheet with DriveApp.

应该是:

var sstocopy = DriveApp.getFileById(ss.getId()); // Get spreadsheet with DriveApp.

因此,正确的代码如下所示:

function copyDocument() {
    var ss = SpreadsheetApp.getActiveSpreadsheet(); // Get current active spreadsheet.
    var sstocopy = DriveApp.getFileById(ss.getId()); // Get spreadsheet with DriveApp.
    var sheet = ss.getActiveSheet(); // Get current active sheet.
    var sheet_name = sheet.getRange("i2").getValue(); // Get the value of cell B1, used to name the new spreadsheet.
    var folder = DriveApp.getFolderById("xxxxxxxxxxxxx"); // Get the ID of the folder where you will place a copy of the spreadsheet.
    sstocopy.makeCopy(sheet_name,folder); // Make a copy of the spreadsheet in the destination folder.

答复你的评论:

出于您的目的,应按以下方式修改代码:

var sheet = SpreadsheetApp.getActiveSheet(); // Get current active sheet.
var sheet_name = sheet.getRange("i2").getValue(); // Get the value of cell B1, used to name the new spreadsheet.

var folder = DriveApp.getFolderById("xxxxxxxxxxxxx"); // Get the ID of the folder where you will place a copy of the spreadsheet.

var newSS = SpreadsheetApp.create(sheet_name); // create new blank spreadsheet in a root folder
var asFile = DriveApp.getFileById(newSS.getId()); // get new spreadsheet as a file

folder.addFile(asFile); // add this file to destination folder
DriveApp.getRootFolder().removeFile(asFile); // remove a file from root folder

var copiedSheet = sheet.copyTo(newSS); // copy active sheet to new spreadsheet
copiedSheet.setName(sheet_name); // rename copied sheet
newSS.deleteSheet(newSS.getSheetByName('Sheet1')); // remove "Sheet1" sheet which was created by default in new spreadsheet
 类似资料:
  • 我做了一个PHP脚本,使用api v4将一些信息导出到谷歌电子表格。当我尝试向单元格中添加注释时,我应该为每个注释向API发出请求,这对我来说是一个问题,前面已经解释过了。 我目前的方法是以下一种,我试图在单行的每一列上添加注释($HeaderNotes是一个数组): 在这种方法中,注释是一个接一个地添加的(使用循环),并且工作正常。主要的问题是,我做的请求和notes一样多,而谷歌的Cuota有

  • 我的脚本在提交一些表单后在电子表格上添加新的表单。此表用作排行榜。但要查看它,我必须单击新创建的选项卡。有什么办法可以从脚本中完成吗? 这张图片是创建新工作表后的屏幕截图(第1周第2课)。 P、 我发现我必须重新表述这个问题。问题是,我想从另一个电子表格(此电子表格有onSubmit触发器,并在其他打开的电子表格(排行榜)上创建和放置信息)中执行此操作。我检查setActiveSheet(工作表)

  • 人若自洁,脱离卑贱的事,就必作贵重的器皿,成为圣洁,合乎主用,预备行各样的善事。你要逃避少年的私欲,同那清心祷告主的人追求公义、信德、仁爱、和平。惟有那愚拙无学问的辩论,总要弃绝,因为知道这等事是起争竞的。(2 TIMOTHY 2:21-23) 电子表格 一提到电子表格,可能立刻想到的是excel。殊不知,电子表格“历史悠久”,比Word要长久多了。根据维基百科的记载整理一个简史: VisiCal

  • 我已经通过谷歌官方文档《开发者指南》API中提到的一个简单Java代码成功地在我的Google Drive帐户的现有电子表格中创建了一个新的工作表,但我想通过Java代码在我的Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提到这方面的任何示例代码。我已经在Spreadservice类中看到了不同的可用方法。 如何使用Google电子表格API实现这一点?

  • 我有每周更新的谷歌电子表格。它包含多个工作表,每个星期都有不同的名称。 有没有一种方法可以使用google脚本将该电子表格中的所有表格复制到另一个电子表格中?我的主要目标是复制整个电子表格,并让我运行脚本的工作表拥有源表中的所有工作表和数据。如果这个复制过程只复制数据,而不是其他工作表中的公式,那也很好。 提前谢谢! 埃里克

  • 我使用Google Sheets电子表格来管理我正在处理的文件。我在任何给定的时间都有大约60-70个文件,每个文件都有一个唯一的文件号。在我的电子表格中,每个文件都由一个由其文件编号命名的唯一工作表表示。文件编号符合以下格式:[#]-[##]-[####]](例如5-18-0040)。我还有一个名为“文件”的工作表,它是所有这些工作表的列表,以及其他一些包含操作的隐藏工作表。 我拼凑了一个脚本,