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

Posted

技术标签:

【中文标题】Google脚本将电子表格中的工作表复制到新电子表格并在特定单元格后命名新电子表格【英文标题】:Google script to copy sheet in spreadsheet to new spreadsheet and name new spreadsheet after specific cell 【发布时间】:2019-01-15 13:58:25 【问题描述】:

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

即 我有什么= 名为“颜色”的电子表格 - 工作表 1="red"、工作表 2=“蓝色”、工作表 3=“黄色”等。

我想要的 =

电子表格称为“红色”。电子表格称为“蓝色”,电子表格称为“黄色”

到目前为止,我有这个脚本,但它告诉我“找不到脚本函数:saveAsSpreadsheet 了解更多信息”

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.

任何帮助将不胜感激。

【问题讨论】:

好的,意识到我很愚蠢并且没有正确运行该函数,这解释了找不到脚本函数错误,但是现在我有错误“TypeError:无法在对象表中找到函数makeCopy” 【参考方案1】:

您需要将电子表格作为文件打开,而不是作为电子表格打开才能使用 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

【讨论】:

太好了,谢谢,我已经测试了脚本,但是它会复制整个电子表格,而不仅仅是活动工作表?我如何将其更改为活动工作表?

以上是关于Google脚本将电子表格中的工作表复制到新电子表格并在特定单元格后命名新电子表格的主要内容,如果未能解决你的问题,请参考以下文章

仅通过 Google Apps 脚本值修改 Google 电子表格

计算工作表中的行数,然后使用 Google Apps 脚本在 Google 电子表格上减去

Google Apps 脚本 - 将一行数据从一个电子表格移动到另一个电子表格

如何将宏应用于 Google 表格中一个电子表格中的所有表格

在 Google App 脚本、电子表格中添加前导零

Excel 表格验证/公式未复制到新表格行