gpt4 book ai didi

javascript - 如何在 for 循环中复制/命名电子表格中单元格的 .setValue?

转载 作者:行者123 更新时间:2023-11-28 06:48:24 26 4
gpt4 key购买 nike

我(在帮助下)创建了一个脚本,用于创建文件夹、复制文件 15 次、重命名该文件,并将新重命名的文件放入它创建的文件夹中。

我正在尝试编辑脚本,以便它使用 .setValue 编辑已复制的新文件,将新复制的文件的“I9”单元格设置为:

.setValue('=IMPORTRANGE("ID", "问题详情!C' + j + 3 + ':AX' + j + 3 + ')');

我不知道如何在循环和创建新创建的电子表格时编辑它们。我不确定如何编辑脚本中作为“对象”的工作表。当我运行脚本时,它会说无法获取 copySheet.getRange(1,9,1,1);一个对象的。

现在,我试图在添加到此单元格的新公式中使用 for 循环中的“J”,这样我就可以让它根据“J”的值动态增加,但我无法让它工作。 (这个 for 循环已用于增加工作表名称中的数字)我确信我的语法有问题。但是,请原谅我。我仍在学习,并且非常喜欢从 SO 的帮助中学习。

我还想知道将其设置为随后循环浏览这些新文件夹/文件并编辑每个文件夹/文件中的“I9”单元是否更有意义?不确定...

下面的脚本我尝试在脚本中添加的代码在脚本底部注明。我确信这离基地很远,但我正在努力。你们能给我的任何帮助将不胜感激!谢谢!布兰登

  var folderIds = [];

function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('Data System Tool')
.addItem('Create Data System Folders', 'copyAndRenameTemplate')
.addToUi();
}

function copyAndRenameTemplate() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var theSheet = ss.getSheetByName('Sheet1');
var rangeOfFileNames = ss.getRange("B4:B");
var twoD_Array = rangeOfFileNames.getValues();
var arrayOfFileNames = twoD_Array.join().split(",");
var folderType = theSheet.getRange(2,1);
var cell = folderType.getValue();

Logger.log(folderType);
Logger.log(cell);

// throw new Error('Script Halted! Check out the logs!!');

var fldrNamesRng = theSheet.getRange(4,1,theSheet.getLastRow()-3,1);
Logger.log('fldrNamesRng: ' + fldrNamesRng);

var folderNames = fldrNamesRng.getValues();
Logger.log('folderNames: ' + folderNames);

var oneD_FolderNames = folderNames.join().split(",");
Logger.log('oneD_FolderNames: ' + oneD_FolderNames);

makeTheFolders(oneD_FolderNames);
putFilesIntoFolders(oneD_FolderNames);
};

function makeTheFolders(theFolderNames,cell) {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var theSheet = ss.getSheetByName('Sheet1');
var folderType = theSheet.getRange(2,1);
var cell = folderType.getValue();

var i=0,
folderObj;

for (i=0;i<theFolderNames.length;i+=1) {
folderObj = DriveApp.createFolder(theFolderNames[i] + " " + cell);

folderIds.push(folderObj.getId())
};
};

function putFilesIntoFolders(arrayOfFolderNames,theFolderNames,cell) {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var theSheet = ss.getSheetByName('Sheet1');
var folderType = theSheet.getRange(2,1);
var cell = folderType.getValue();
var file = DriveApp.getFileById("File to Copy");
var dest_folder = "";

var baseFileName = "",
newfile,
newFileName = "",
i=0,
j=0;

for (i=0;i<arrayOfFolderNames.length;i+=1) {
var source_folder = DriveApp.getFolderById("Folder that has File to be Copied");
dest_folder = DriveApp.getFolderById(folderIds[i]);
Logger.log('dest_folder' + dest_folder);

baseFileName = arrayOfFolderNames[i];

for (j=1; j<16; j+=1) {
var newFileName = baseFileName + " " + cell + " " + j.toString();
var fileCopy = file.makeCopy();

/* Code I tried */
// var copyID = fileCopy.getId();
// var copySs = DriveApp.getFileById(copyID);
// var copySheet = copySs.getSheets()[0];
// var copyCell = copySheet.getRange(1,9,1,1);
// copyCell.setValue('=IMPORTRANGE("ID", "Question Details!C' + j + 3 + ':AX' + j + 3 + ')');

var namedFileCopy = fileCopy.setName("_" + newFileName);

if (j<10) {
dest_folder.addFile(namedFileCopy);
source_folder.removeFile(fileCopy);
} else {
var namedFileCopy = fileCopy.setName(newFileName);
dest_folder.addFile(namedFileCopy);
source_folder.removeFile(fileCopy);
};
};
};
};

最佳答案

您的想法是正确的,您只需确保将新的(复制的)电子表格作为 Spreadsheet 对象打开,以便可以在其上使用 Spreadsheet 方法。

而不是:

  var copySs = DriveApp.getFileById(copyID);

用途:

  var copySs = SpreadsheetApp.openById(copyID);

通过这样做,copySs 将成为一个代表 Spreadsheet object 的变量。 ,而您已经写的其他行实际上是有意义的!

  var copySheet = copySs.getSheets()[0];
var copyCell = copySheet.getRange(1,9,1,1);
copyCell.setValue('=IMPORTRANGE("ID", "Question Details!C' + j + 3 + ':AX' + j + 3 + ')');

关于javascript - 如何在 for 循环中复制/命名电子表格中单元格的 .setValue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com