如果我有一个表格,里面用importxml抓取了一些数据,我把这个表格发布到网络。

有时候数据重新抓取需要几秒或者十几秒的时间,有时候数据抓取会出错,这些情况下,单元格要不为空,要不就error,如果整个表格有一些依赖抓取数据的单元格,全部会出错。

怎么避免这种情况?

我的解决办法是:

1、把所有抓取内容,比如说都是非0的数字的话,就每项抓取找一个,把他们的倒数全部加起来。结果到底什么数值没有意义,只要判断这个结果是不是正常。为什么要用倒数,因为如果抓取的数据不存在,倒数就会报错,如果直接相加,一些为空的单元格会被默认为0,整个加法不会报错。把这个判断结果true or false写在A1。如果加法的结果报错,则证明抓取中至少有一项数据出错。

A1=if(b2=False,False,True)

B2=iferror((1/B1+1/B2+1/B3+1/B4+1/B5),False)

 

2、设置一个每分钟执行一次的timetigger

function createTimeDrivenTriggers() {
ScriptApp.newTrigger(“myFunction”)
.timeBased()
.everyMinutes(1)
.create();
}

3、触发器执行函数,函数内容是判断1中的结果是否为true,如果是,就复制整个表格内容到另外一个区域。也就是说所有抓取都正常的情况下,备份最新的数据。

function myFunction() {
var app = SpreadsheetApp;
var copySheet = app.getActiveSpreadsheet().getSheetByName(“2019”);
if(copySheet.getRange(“A41”).getValue()){
copySheet.getRange(1,1,40,15).copyTo(copySheet.getRange(1,25,40,40), {contentsOnly:true});
copySheet.getRange(“A42”).setValue(Math.random());
}
}

4、发布的内容源换成复制后的表格区域

最后结果就是,不断复制表格内容到新的位置,如果抓取有任何一个失败,就不复制。新的位置的表格就是最新的,没有任何错误的数据。

说点什么