我正在拼命寻找有关在Google电子表格上运行功能时遇到的错误的一些帮助。
我已经编写了所有代码,我遇到了两种情况:
如果我从应该工作的工作表运行脚本,我会收到错误“糟糕 我们很抱歉。服务器遇到错误。请按“确定”刷新工作表“即使所有操作都在错误弹出窗口下方实际完成。
如果我从另一个工作表运行脚本,脚本就会成功完成。
我认为这个问题可能与活动工作表功能有关,所以我开始调试以找到解决方案。我发现除了我要求电子表格对列进行一些操作的部分之外,我对所有代码都没有任何问题:首先创建一个新的,然后调整其中两个,最后删除一个。
我附上了所有代码,以便您可以更好地了解脚本正在做什么。
感谢您的关注。
贝
function forecastSettimanale() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var data = sheet.getDataRange();
// I need to operate on a column that has TOT written on its top, and its
// position can vary
var k = 1;
while (k <= data.getNumColumns()) {
var startRange = sheet.getRange(1, k, 1);
var value = startRange.getValue();
if(value == 'TOT') {
var flagColumn = startRange.getColumn(); //
}
k++;
}
sheet.insertColumnsBefore(flagColumn, 1);
sheet.setColumnWidth(flagColumn - 1, 40);
sheet.setColumnWidth(flagColumn, 50);
sheet.deleteColumn(flagColumn - 6);
sheet.setColumnWidth(flagColumn, 100);
}
带有您建议的新编辑代码:
function forecastSettimanale() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var data = sheet.getDataRange();
var searchElement = 'TOT';
var firstRow = 1, firstColumn = 1, rows = 1;
var lastColumn = sheet.getLastColumn();
var lastRow = sheet.getLastRow();
var range = sheet.getRange(firstRow, firstColumn, rows, lastColumn).getValues();
var flagColumn = range[0].lastIndexOf(searchElement) + 1;
sheet.setColumnWidth(flagColumn - 1, 40);
sheet.deleteColumn(flagColumn - 6);
sheet.insertColumns(flagColumn - 1);
var cellLeggiData = sheet.getRange(2, 3, 1);
var cellData = sheet.getRange(1, flagColumn - 1, 1);
cellData = cellData.setValue(cellLeggiData.getValue());
var last_row = sheet.getLastRow();
var copiaDa = sheet.getRange(2, flagColumn, last_row - 1);
var copiaA = sheet.getRange(2, flagColumn - 1, last_row - 1);
copiaDa.copyTo(copiaA, {contentsOnly: true});
for (var i = 35; i <= lastRow; i+=33) {
var cellaFormula = sheet.getRange(i, flagColumn, 1);
var rigaPrecedente = i - 1;
var totN = sheet.getRange(rigaPrecedente, flagColumn, 1);
var totFore = sheet.getRange(rigaPrecedente, flagColumn - 1, 1);
var letteraColonna = String.fromCharCode(64 + flagColumn);
var letteraColonnaMenoUno = String.fromCharCode(63 + flagColumn);
cellaFormula.setFormula("=" + letteraColonnaMenoUno + rigaPrecedente + "-" + letteraColonna + rigaPrecedente);
}
sheet.setColumnWidth(flagColumn - 1, 100);
sheet.showColumns(flagColumn - 6, 6);
}
答案 0 :(得分:0)
我无法重现这个问题。正如您所指出的那样,有问题的代码没有问题。也许您必须进行一些验证,例如sheet.deleteColumn(flagColumn - 6);
如果flagColumn
小于6,该怎么办?
我修改了一些获取所需列的方法。
/* CODE FOR DEMONSTRATION PURPOSES */
function forecastSettimanale() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var searchElement = 'TOT';
var firstRow = 1, firstColumn = 1, rows = 1;
var lastColumn = sheet.getLastColumn();
var range = sheet.getRange(firstRow, firstColumn, rows, lastColumn).getValues();
var flagColumn = range[0].lastIndexOf(searchElement);
if (flagColumn > -1) {
++flagColumn;
sheet.insertColumnsBefore(flagColumn, 1);
sheet.setColumnWidth(flagColumn - 1, 40);
sheet.setColumnWidth(flagColumn, 50);
sheet.deleteColumn(flagColumn - 6);
sheet.setColumnWidth(flagColumn, 100);
}
}
尝试逐行调试以确定方法生成错误,这样就更容易找到解决方案。