我正在尝试在Google表格中运行以下脚本,但无法停止运行。任何人都可以建议我要去哪里。 谢谢
function TriplicateEachLine() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var cc = ss.getCurrentCell();
//Set New Hedders
ss.getRange('R1').setValue('Stock');
ss.getRange('S1').setValue('Weeks');
ss.getRange('A2').activate();
//Start of Loop Function
while (cc > ""){
ss.getCurrentCell().offset(0, 17).setFormulaR1C1('=R[0]C[-5]-R[0]C[-4]');
ss.getCurrentCell().offset(0, 18).setValue('12 Weeks');
sheet.getRange(ss.getCurrentCell().getRow(), 1, 1, sheet.getMaxColumns()).activate();
ss.getActiveSheet().insertRowsAfter(ss.getActiveRange().getLastRow(), 1);
ss.getActiveRange().offset(ss.getActiveRange().getNumRows(), 0, 1, ss.getActiveRange().getNumColumns()).activate();
sheet.getRange(ss.getCurrentCell().getRow() - 1, 1, 1, sheet.getMaxColumns()).copyTo(ss.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
ss.getCurrentCell().offset(0, 17).setFormulaR1C1('=R[0]C[-5]-R[0]C[-4]');
ss.getCurrentCell().offset(0, 18).setValue('8 Weeks');
sheet.getRange(ss.getCurrentCell().getRow(), 1, 1, sheet.getMaxColumns()).activate();
ss.getActiveSheet().insertRowsAfter(ss.getActiveRange().getLastRow(), 1);
ss.getActiveRange().offset(ss.getActiveRange().getNumRows(), 0, 1, ss.getActiveRange().getNumColumns()).activate();
sheet.getRange(ss.getCurrentCell().getRow() - 2, 1, 1, sheet.getMaxColumns()).copyTo(ss.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
ss.getCurrentCell().offset(0, 17).setFormulaR1C1('=R[0]C[-5]-R[0]C[-4]');
ss.getCurrentCell().offset(0, 18).setValue('4 Weeks');
ss.getCurrentCell().offset(1, 0).activate();
}
Browser.msgBox("Complete!");
};
答案 0 :(得分:0)
可能会影响您的几个问题:
cc
中的值。Browser.msgBox()
正在等待用户输入。您可以使用Logger.log()
语句检查前三个问题。
// Check values
Logger.log("Active Spreadsheet Name: " + ss.getName());
Logger.log("Active Sheet Name: " + sheet.getName());
Logger.log("Cell Address: " + cell.getA1Notation());
只需使用getValue()
即可轻松解决第四个问题。在这种情况下,我创建了一个新变量来保存它。
var cellValue = cell.getValue();
第五个问题,检查单元格是否为空应该测试其是否为空字符串。您可以通过几种方法来执行此操作。一种是检查[不相等](cellValue != ""
),另一种是检查长度(cellValue.length > 0
)。
要确保您要更改变量的值,可以再次使用Logger.log()
语句。在我的示例中,您可以看到我正在这两行中更新单元格和单元格值变量:
cell = cell.offset(1, 0);
cellValue = cell.getValue();
最后,Browser.msgBox()
可能很棘手。它将暂停您的脚本,直到用户与其显示的UI进行交互为止。如果从脚本编辑器运行脚本,则可能看不到消息框,因此脚本将继续无限期运行。您可以尝试摆脱该行,而在测试时仅使用Logger.log()
,也可以创建一个custom menu从电子表格UI触发脚本。
下面是完整的示例代码。您应该能够运行它,并据此对原始文件进行必要的修改。
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("Test Menu")
.addItem("Find first empty cell", "findFirstBlank")
.addToUi();
}
function findFirstBlank() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var cell = ss.getCurrentCell();
var cellValue = cell.getValue();
// Check values
Logger.log("Active Spreadsheet Name: " + ss.getName());
Logger.log("Active Sheet Name: " + sheet.getName());
Logger.log("Cell Address: " + cell.getA1Notation());
while (cellValue != "") {
cell = cell.offset(1, 0);
cellValue = cell.getValue();
}
Logger.log("First Empty Cell: " + cell.getA1Notation());
Logger.log("Complete!");
Browser.msgBox("Complete!");
};
注意:这不能处理没有没有空单元格的情况。鉴于您的特定要求,您绝对应该考虑如何最好地处理该问题。