虽然代码冻结了调试。无限循环?但是我不确定如何满足定义的最终条件。
我正在使用的工作表是库存表。我有另一个脚本,可以在货物离开仓库时在单独的选项卡上自动对货物进行分类,然后将数据留空。我想将数据移到第一个空行。该脚本将在多次运行时执行此操作,但是,如果在运行脚本时压缩了所有数据,它将把最后一个数据行移到第一个空行,此时它实际上位于最后一个数据行之下。>
function shift() {
//this sheet
var spr = SpreadsheetApp.getActiveSpreadsheet();
var thissheet = spr.getSheetByName('CURRENT MONTH');
//define last row with data
var lastRow = thissheet.getLastRow();
var range = thissheet.getRange("A" + lastRow);
if (range.getValue() !== "") {
var lastDataRow = lastRow;
} else {
var lastDataRow = range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
//define first empty row
var column = thissheet.getRange('A11:A');
var values = column.getValues();
var ct = 0;
while (values[ct] && values[ct][0] != "") {
ct++;
}
console.log(ct + 1);
var firstEmptyRow = (ct + 1) + 10 //+10 accounts for header
//the range to copy to (first empty row)
var emptyrange = thissheet.getRange(firstEmptyRow, 1, 1, 15);
//the copy and clear code
while (lastDataRow > firstEmptyRow) {
thissheet.getRange(lastDataRow, 1, 1, 15).copyTo(emptyrange);
thissheet.getRange(lastDataRow, 1, 1, 15).clearContent();
}
}
我的解决方案是使用While移位数据,直到最后一个数据行号小于第一个空行号,因此,只要空行下有数据,Whise(lastDataRow> firstEmptyRow)就应该运行。 >
答案 0 :(得分:0)
您需要在循环中每次减小lastDataRow
while (lastDataRow > firstEmptyRow) {
thissheet.getRange(lastDataRow, 1, 1, 15).copyTo(emptyrange);
thissheet.getRange(lastDataRow, 1, 1, 15).clearContent();
lastDataRow--;
}
答案 1 :(得分:0)
不幸的是,先前的答案没有帮助。但是我确实知道了。
while (true) {
thissheet.getRange(lastDataRow, 1, 1, 15).copyTo(emptyrange);
thissheet.getRange(lastDataRow, 1, 1, 15).clearContent();
Utilities.sleep(500);
if (lastDataRow > firstEmptyRow) {
break;}
}
我使用了手动休息时间。睡眠可能不是必需的,但我想稍微延迟一下以帮助其更有效地运行。同样,我是菜鸟,可能根本没有必要。无论如何,只是想分享我的成功。再次感谢您对Barmar的所有帮助!