我有一个脚本可以复制一个电子表格,然后根据初始工作表中的一些复选框删除/隐藏它的一些工作表。
我正在调用许多工作表并在 if 语句中使用它们。根据复选框,特定工作表将被删除或隐藏。
有没有更快的方法来执行这个?
这是脚本:
function template() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var campaigninfosheet = ss.getSheetByName('Campaign Info');
var spreadsheettemplateId = "INSERT SPREADSHEET ID";
var spreadsheettemplate = DriveApp.getFileById(spreadsheettemplateId);
var spreadsheetcopy = spreadsheettemplate.makeCopy();
var spreadsheetcopyID = spreadsheetcopy.getId();
var sheetcopy = SpreadsheetApp.openById(spreadsheetcopyID);
var fileName = sheetcopy.getName();
var awarenesscheckbox = campaigninfosheet.getRange("A2:B2").getValues()
var videoviewscheckbox = campaigninfosheet.getRange("A3:B3").getValues()
var engagementscheckbox = campaigninfosheet.getRange("A4:B4").getValues()
var followerscheckbox = campaigninfosheet.getRange("A5:B5").getValues()
var trafficcheckbox = campaigninfosheet.getRange("A6:B6").getValues()
var appinstallscheckbox = campaigninfosheet.getRange("A7:B7").getValues()
var leadgenerationcheckbox = campaigninfosheet.getRange("A8:B8").getValues()
var conversionscheckbox = campaigninfosheet.getRange("A9:B9").getValues()
var metaplatform = campaigninfosheet.getRange("C2:D2").getValues();
var snapplatform = campaigninfosheet.getRange("C3:D3").getValues();
var tiktokplatform = campaigninfosheet.getRange("C4:D4").getValues();
var twitterplatform = campaigninfosheet.getRange("C5:D5").getValues();
var youtubeplatform = campaigninfosheet.getRange("C6:D6").getValues();
var googleplatform = campaigninfosheet.getRange("C7:D7").getValues();
var linkedinplatform = campaigninfosheet.getRange("C8:D8").getValues();
var programmaticplatform = campaigninfosheet.getRange("C9:D9").getValues();
for (var i = 0; i < awarenesscheckbox.length; i++) {
var metaawarenesscsheet = sheetcopy.getSheetByName('Meta Awareness Campaign');
var metaawarenessassheet = sheetcopy.getSheetByName('Meta Awareness Ad Set');
var fbawarenessassheet = sheetcopy.getSheetByName('FB Awareness Ad Set')
var igawarenessassheet = sheetcopy.getSheetByName('IG Awareness Ad Set')
var snapchatawarenesscsheet = sheetcopy.getSheetByName('Snapchat Awareness Campaign');
var snapchatawarenessassheet = sheetcopy.getSheetByName('Snapchat Awareness Ad Set');
var tiktokawarenesscsheet = sheetcopy.getSheetByName('TikTok Awareness Campaign');
var tiktokawarenessassheet = sheetcopy.getSheetByName('TikTok Awareness Ad Set');
var twitterawarenesscsheet = sheetcopy.getSheetByName('Twitter Awareness Campaign');
var twitterawarenessassheet = sheetcopy.getSheetByName('Twitter Awareness Ad Set');
var youtubeawarenesscsheet = sheetcopy.getSheetByName('Youtube Awareness Campaign');
var youtubeawarenessassheet = sheetcopy.getSheetByName('Youtube Awareness Ad Set');
var googleawarenesscsheet = sheetcopy.getSheetByName('Google Awareness Campaign');
var googleawarenessassheet = sheetcopy.getSheetByName('Google Awareness Ad Set');
var linkedinawarenesscsheet = sheetcopy.getSheetByName('LinkedIn Awareness Campaign');
var linkedinawarenessassheet = sheetcopy.getSheetByName('LinkedIn Awareness Ad Set');
var programmaticawarenesscsheet = sheetcopy.getSheetByName('Programmatic Awareness Campaign');
var programmaticawarenessassheet = sheetcopy.getSheetByName('Programmatic Awareness Ad Set');
var awarenesssheets = [metaawarenesscsheet, metaawarenessassheet, fbawarenessassheet, igawarenessassheet, snapchatawarenesscsheet, snapchatawarenessassheet, tiktokawarenesscsheet, tiktokawarenessassheet, twitterawarenesscsheet, twitterawarenessassheet, youtubeawarenesscsheet, youtubeawarenessassheet, googleawarenesscsheet, googleawarenessassheet, linkedinawarenesscsheet, linkedinawarenessassheet, programmaticawarenesscsheet, programmaticawarenessassheet]
if (awarenesscheckbox[i][0] === "N") {
awarenesssheets.forEach(asheet => sheetcopy.deleteSheet(asheet))
}
else if (awarenesscheckbox[i][0] === "Y") {
for (var i = 0; i < metaplatform.length; i++) {
if (metaplatform[i][0] === "Y") {
[metaawarenesscsheet, metaawarenessassheet, fbawarenessassheet, igawarenessassheet].forEach(metaasheet => metaasheet.hideSheet())
}
else {
[metaawarenesscsheet, metaawarenessassheet, fbawarenessassheet, igawarenessassheet].forEach(metaasheet => sheetcopy.deleteSheet(metaasheet))
}
}
for (var i = 0; i < snapplatform.length; i++) {
if (snapplatform[i][0] === "Y") {
[snapchatawarenesscsheet, snapchatawarenessassheet].forEach(snapasheet => snapasheet.hideSheet())
}
else if (snapplatform[i][0] === "N") {
[snapchatawarenesscsheet, snapchatawarenessassheet].forEach(snapasheet => sheetcopy.deleteSheet(snapasheet))
}
}
for (var i = 0; i < tiktokplatform.length; i++) {
if (tiktokplatform[i][0] === "Y") {
[tiktokawarenesscsheet, tiktokawarenessassheet].forEach(tiktokasheet => tiktokasheet.hideSheet())
}
else {
[tiktokawarenesscsheet, tiktokawarenessassheet].forEach(tiktokasheet => sheetcopy.deleteSheet(tiktokasheet))
}
}
for (var i = 0; i < twitterplatform.length; i++) {
if (twitterplatform[i][0] === "Y") {
[twitterawarenesscsheet, twitterawarenessassheet].forEach(twitterasheet => twitterasheet.hideSheet())
}
else {
[twitterawarenesscsheet, twitterawarenessassheet].forEach(twitterasheet => sheetcopy.deleteSheet(twitterasheet))
}
}
for (var i = 0; i < youtubeplatform.length; i++) {
if (youtubeplatform[i][0] === "Y") {
[youtubeawarenesscsheet, youtubeawarenessassheet].forEach(youtubeasheet => youtubeasheet.hideSheet())
}
else {
[youtubeawarenesscsheet, youtubeawarenessassheet].forEach(youtubeasheet => sheetcopy.deleteSheet(youtubeasheet))
}
}
for (var i = 0; i < googleplatform.length; i++) {
if (googleplatform[i][0] === "Y") {
[googleawarenesscsheet, googleawarenessassheet].forEach(googleasheet => googleasheet.hideSheet())
}
else {
[googleawarenesscsheet, googleawarenessassheet].forEach(googleasheet => sheetcopy.deleteSheet(googleasheet))
}
}
for (var i = 0; i < linkedinplatform.length; i++) {
if (linkedinplatform[i][0] === "Y") {
[linkedinawarenesscsheet, linkedinawarenessassheet].forEach(linkedinasheet => linkedinasheet.hideSheet())
}
else {
[linkedinawarenesscsheet, linkedinawarenessassheet].forEach(linkedinasheet => sheetcopy.deleteSheet(linkedinasheet))
}
}
for (var i = 0; i < programmaticplatform.length; i++) {
if (programmaticplatform[i][0] === "Y") {
[programmaticawarenesscsheet, programmaticawarenessassheet].forEach(programmaticasheet => programmaticasheet.hideSheet())
}
else {
[programmaticawarenesscsheet, programmaticawarenessassheet].forEach(programmaticasheet => sheetcopy.deleteSheet(programmaticasheet))
}
}
}
}
}
试试这个:
function myFunction() {
const NewSpreadsheetTitle = `New Spreadsheet Title`
//
const MASTER = SpreadsheetApp.getActiveSpreadsheet()
const SHEETS = SpreadsheetApp.getActiveSpreadsheet().getSheets()
const INFOSHEET = MASTER.getSheetByName(`Campaign Info`)
//
const PLATFORMS = INFOSHEET.getRange(`C2:D9`)
.getValues()
.filter(Row => Row[0] === `Y`)
.flatMap(Row => Row[1])
const OBJECTIVES = INFOSHEET.getRange(`A2:B9`)
.getValues()
.filter(Row => Row[0] === `Y`)
.flatMap(Row => Row[1])
//
const COPY = SpreadsheetApp.create(NewSpreadsheetTitle)
INFOSHEET.copyTo(COPY).setName(`Campaign Info`)
MASTER.getSheetByName(`Overall`).copyTo(COPY).setName(`Overall`)
PLATFORMS.forEach(Platform => {
SHEETS.filter(Sheet => Sheet.getName().includes(Platform))
.forEach(Sheet => {
if (Sheet.getName() === Platform) Sheet.copyTo(COPY).setName(Sheet.getName())
if (OBJECTIVES.some(Objective => Sheet.getName().includes(Objective))) Sheet.copyTo(COPY).hideSheet().setName(Sheet.getName())
})
})
}
评论:
function myFunctionCommented() {
// Title of New Spreadsheet being created below.
const NewSpreadsheetTitle = `New Spreadsheet Title`
const MASTER = SpreadsheetApp.getActiveSpreadsheet()
// Creates an array of all Sheets in Spreadsheet.
const SHEETS = SpreadsheetApp.getActiveSpreadsheet().getSheets()
const INFOSHEET = MASTER.getSheetByName(`Campaign Info`)
// With the Range of `C2:D9`..
const PLATFORMS = INFOSHEET.getRange(`C2:D9`)
// Get values..
.getValues()
// Keep only checked boxes..
.filter(Row => Row[0] === `Y`)
// And create an array of only the platforms.
.flatMap(Row => Row[1])
const OBJECTIVES = INFOSHEET.getRange(`A2:B9`)
.getValues()
.filter(Row => Row[0] === `Y`)
.flatMap(Row => Row[1])
// Create a new spreadsheet..
const COPY = SpreadsheetApp.create(NewSpreadsheetTitle)
// and copy over Campaign Info and Overall.
INFOSHEET.copyTo(COPY).setName(`Campaign Info`)
MASTER.getSheetByName(`Overall`).copyTo(COPY).setName(`Overall`)
// For each platform:
PLATFORMS.forEach(Platform => {
// Get all sheets that include the current platform in their name.
SHEETS.filter(Sheet => Sheet.getName().includes(Platform))
// For each of these filtered sheets:
.forEach(Sheet => {
// If the sheet's name is the platform, copy it over.
if (Sheet.getName() === Platform) Sheet.copyTo(COPY).setName(Sheet.getName())
// If the sheet's name is the platform, copy it over but hide it.
if (OBJECTIVES.some(Objective => Sheet.getName().includes(Objective))) Sheet.copyTo(COPY).hideSheet().setName(Sheet.getName())
})
})
}
尽管如此,由于纸张及其内容的数量,它运行得相当慢。
我建议创建一个新文件夹,并将您的模板表按平台分离到它们自己的电子表格中。然后,您可以让您的“主”表仅包含广告系列信息和总体表以及 Apps 脚本代码。
分页法:
const MASTERS = {
Meta: `Spreadsheet ID Here`,
Snapchat: `Spreadsheet ID Here`,
TikTok: `Spreadsheet ID Here`,
// etc
}
function VersionTwo() {
const NewSpreadsheetTitle = `New Spreadsheet Title`
//
const MASTER = SpreadsheetApp.getActiveSpreadsheet()
const INFOSHEET = MASTER.getSheetByName(`Campaign Info`)
const OVERALLSHEET = MASTER.getSheetByName(`Overall`)
//
const PLATFORMS = INFOSHEET.getRange(`C2:D9`)
.getValues()
.filter(Row => Row[0] === `Y`)
.flatMap(Row => Row[1])
const OBJECTIVES = INFOSHEET.getRange(`A2:B9`)
.getValues()
.filter(Row => Row[0] === `Y`)
.flatMap(Row => Row[1])
//
const CLONE = SpreadsheetApp.create(NewSpreadsheetTitle)
INFOSHEET.copyTo(COPY).setName(`Campaign Info`)
OVERALLSHEET.copyTo(COPY).setName(`Overall`)
PLATFORMS.forEach(Platform => {
SpreadsheetApp.openById(MASTERS[Platform])
.getSheets()
.filter(Sheet => Sheet.getName().includes(Platform))
.forEach(Sheet => {
if (Sheet.getName() === Platform) Sheet.copyTo(CLONE).setName(Sheet.getName())
if (OBJECTIVES.some(Objective => Sheet.getName().includes(Objective))) Sheet.copyTo(CLONE).hideSheet().setName(Sheet.getName())
})
})
}