google-apps-script - 存档脚本随机停止处理工作表上已填充的数据
问题描述
我的脚本以前没有问题,每天在其列 (5) 的下一行填充一次数据。但是,它停止了工作。现在它只能在没有以前数据的空白纸上工作。前两列包含相同的脚本,但仍在工作。这只是一个随机的错误吗?当它执行时,它声称它成功了
function test() {
const ss = SpreadsheetApp.openById('sourceID');
const sh = ss.getSheetByName('forecast');
const data = [[sh.getRange('B126').getValue(),new Date()]];
const tss = SpreadsheetApp.openById('archiveID');
const ts = tss.getSheetByName('Archive');
ts.getRange(getColumnHeight() + 1, 5, data.length, data[0].length).setValues(data);
}
function getColumnHeight(col, sh, ss) {
var ss = ss || SpreadsheetApp.openById('archiveID');
var sh = sh || ss.getSheetByName('Archive');
var col = col || 5;
const rcA = sh.getRange(1, col, sh.getLastRow(), 1).getValues().flat().reverse()
let s = 0;
for (let i = 0; i < rcA.length; i++) {
if (rcA[i].toString().length == 0) {
s++;
} else {
break;
}
}
return rcA.length - s;
}
解决方案
试试这种方式:
function test() {
const ss = SpreadsheetApp.openById('ssid');
const sh = ss.getSheetByName('forecast');
const data = [[sh.getRange('B126').getValue(), new Date()]];
const tss = SpreadsheetApp.openById('Archive Id');
const ts = tss.getSheetByName('Archive');
ts.getRange(getMyColumnHeight(5, ts, tss) + 1, 5, data.length, data[0].length).setValues(data);
}
function getMyColumnHeight(col, sh, ss) {
if (col && sh && ss) {
var rcA = [];
if (sh.getLastRow()) { rcA = sh.getRange(1, col, sh.getLastRow(), 1).getValues().flat().reverse(); }
let s = 0;
for (let i = 0; i < rcA.length; i++) {
if (rcA[i].toString().length == 0) {
s++;
} else {
break;
}
}
return rcA.length - s;
} else {
throw "Invalid number of parameters";
}
}
推荐阅读
- join - 我可以在创建新列时加入两个表吗?
- flutter - 如何在某个区域画一条线,并从它停止的地方继续
- git - 如何让 Redmine 更新其数据库以反映配置的 git 存储库的内容
- reactjs - 如何使用 promise 递归地获取分页数据?
- python - 如何在箱线图中显示所有年龄细分
- laravel - 如何摆脱我的 Laravel 网站上的 aeR4Choc(恶意代码)?
- c++ - 从 Arduino 中的函数返回初始未知长度的 char 数组
- php - 如何在 Laravel 中拥有不同的 robots.txt 文件子域和主域?
- javascript - Docusign:如何让信封收件人在不同时间签署两个文件?
- php - 如何使用 PHP 在 netsuite api 中通过销售代表获取销售订单项目?