我正在编写此脚本来复制/粘贴信息并生成图表。我在调试它时遇到问题。我在下面提供了一个片段,但它缺少一些上下文,因此它无法自行工作。我已经使用调试器完成了脚本,一切都工作到我的倒数第二行代码(在此之后是最后一行 for 循环(,调试器退出而不会将错误推送到日志。我得到的只是"执行已取消"。
除了取消执行之外,copyValuesToRange 似乎没有在其任何行中执行任何操作。对于那里的 setFormulas 行也是如此。copyFormatToRange 似乎工作正常,除了在调试器停止之前我无法直观地看到它已经工作。我还没有在调试器之外运行它。编辑:运行脚本正常显示错误"styleEditor.getRange 不是函数"。
var sRow = 2
var sCol = 2
for (var eRow = 2; eRow <= (row2-row1); eRow++){
var ePos = eBoard.getCell(eRow, 1);
// find next occurance of eboard position
findMe = Editor.createTextFinder(ePos.getDisplayValue()).startFrom(eBoard.getCell(1,1));
//TODO: Error check for findNext,verify that it is not the same cell as ePos
// get the next range of members
findMe.findNext();
var topHold = findMe.findNext().getRow() + 1;
delete findMe;
var botHold = findBlank.findNext().getRow() - 1;
var directors = Editor.getRange(topHold,1,(botHold - topHold + 1),3);
// copy/paste format of style editor
// insert enough columns for the directors under the eboard member
styleEditor.copyFormatToRange(newPSheet, sCol, (sCol + 1 + directors.getNumRows()), sRow, (sRow + 11));
var dirNo = directors.getNumRows();
Editor.getRange(styleEditor.getCell(6,2).getRow(),styleEditor.getCell(6,2).getColumn(),3,1).copyFormatToRange(newPSheet,sCol + 1,sCol + dirNo,sRow + 5,sRow + 7);
//Editor.getRange(styleEditor.getCell(6,2).getRow(),styleEditor.getCell(6,2).getColumn(),3,1).copyFormatToRange(newPSheet,4,7,7,9);
// for each director
for(var i = 1; i < directors.getNumRows(); i++)
{
// copy/paste director title
directors.getCell(i,1).copyValuesToRange(newPSheet,(sRow + 5), (sRow + 5), (sCol + i), (sCol + i)); // <------ Values are not copied on final document.
// copy director name, hyperlink to listed email address
newPSheet.getRange((sRow + 6), (sCol + i)).setFormula('=HYPERLINK("'& directors.getCell(i,2) &'", "'& directors.getCell(i,3) &'")'); // <------ Hyperlinks do not show up in final document
}
// set new sCol to next space, clean up variable i
sCol = sCol + i + 1;
delete i;
// copy/paste values of chart in style editor
styleEditor.getRange(6,1,3,1).copyValuesToRange(newPSheet, (sRow + 5),(sRow + 7), sCol, sCol); // <----- Execution stops HERE
}
编辑:我意识到执行正在停止,因为"styleEditor"是一个范围,所以我试图获得一个范围的范围。这部分回答了我的问题,但没有解释为什么错误没有推送到日志。它也没有解释为什么格式之外的任何编辑都不适用于我的电子表格。
对于复制值,使用 getValues 获取整个值范围。这将简化代码并加快执行时间。
下面的代码获取工作表复制自电子表格中区域 C2:G8 的值。 请注意,这是一个 JavaScript 数组:
var CopyRng = SpreadsheetApp.getSheetByName('sheetCopyingFrom').getRange(2, 3, 6, 4);
var vals = CopyRng.getValues();
Logger.log(vals[0][0]);
现在,您可以使用值 [r][c] 使用引用值(r 是复制数据的行,c 是都从零开始的列(
var pasteRng = SpreadsheetApp.getSheetByName('sheetPastingTo').getRange('A1');
// [0][0] will be the top left value of the range copied:
pasteRng.setValue(vals[0][0])
使用 setValues 一次粘贴多个值。但是,要粘贴到的范围必须与要粘贴到其中的多维数组的大小相同。
最后,谨慎使用getCell。它使代码难以阅读。