วิธีแก้ค่า #N/A โดยใช้ฟังก์ชัน Google Sheet =importxml

ฉันมีชีตที่ต้องการนำเข้าค่าของผลการค้นหาของ Google โดยใช้ฟังก์ชัน importxml บางครั้งฉันได้รับ #N/A ในเซลล์ A2

ฉันใช้ while loop เพื่อพยายามดึงข้อมูลต่อไป แต่ก็ยังไม่ได้รับข้อมูลแม้ว่าจะรอเป็นเวลานานก็ตาม เป็นไปได้ไหมที่จะตั้งค่าตัวจับเวลา JavaScript ให้ทำงานจนกว่าฉันได้รับค่าในเซลล์ A2 จากนั้นตัวจับเวลาจะหยุดและปล่อยให้โค้ดที่เหลือดำเนินการต่อ

ฉันควรทำอย่างไรเพื่อหลีกเลี่ยงกรณีดังกล่าวและรับคุณค่าจากเซลล์ A2 เสมอ ทางเลือกอื่นใด?

  var queryString = Math.random();

  var cellFunction1 = '=IMPORTXML("' + SpreadsheetApp.getActiveSheet().getRange('C2').getValue() + '&randomNumber=' + queryString + '","'+ SpreadsheetApp.getActiveSheet().getRange('D2').getValue() + '")';
  SpreadsheetApp.getActiveSheet().getRange('A2').setValue(cellFunction1);

  var stop = 0;
  while (SpreadsheetApp.getActiveSheet().getRange('A2').getValue() === "#N/A" && stop++<10) {
            Utilities.sleep(5000);
            var queryString3 = Math.random();
          var cellFunction1 = '=IMPORTXML("' + SpreadsheetApp.getActiveSheet().getRange('C2').getValue() + '&randomNumber=' + queryString3 + '","'+ SpreadsheetApp.getActiveSheet().getRange('D2').getValue() + '")';
          SpreadsheetApp.getActiveSheet().getRange('A2').setValue(cellFunction1);
      }

person user1788736    schedule 17.10.2015    source แหล่งที่มา
comment
คุณมีอะไรใน C2 และ D2?   -  person Mogsdad    schedule 17.10.2015


คำตอบ (1)


ฉันประสบปัญหาเดียวกัน ฉันสงสัยว่าเป็นเพราะโค้ดพยายาม .getValue จากเซลล์ก่อนที่ค่าของเซลล์จะถูกอัปเดตจาก IMPORTXML

วิธีแก้ปัญหาของฉันคือเขียนฟังก์ชันสองฟังก์ชันแยกกัน ฟังก์ชันหนึ่งบังคับให้ IMPORTXML รีเฟรช และอีกฟังก์ชันหนึ่งเพื่อเขียนข้อมูลลงในชีต จากนั้นฉันก็ให้ทริกเกอร์ IMPORTXML ทำงานทุกๆ 5 นาที จากนั้นจึงเรียกใช้ฟังก์ชันเขียนด้วยทริกเกอร์ของตัวเอง

คุณอาจต้องการลองสิ่งนี้:

function refresher() {
  var ss = SpreadsheetApp.getActiveSheet();
  var sheet = ss.getSheetById("input");
  // Cell input!A2 holds the formula '=IMPORTXML(A1, XMLpath)'
  //So now we give input!A1 a URL with a random ?number behind...
  //...to force IMPORTXML to refresh
  sheet.getRange(1, 1)
    .setValue("http://www.urlWhereInfoResides.com/?" + Math.floor(Math.random() * 40));
}

↑ ให้รีเฟรช () ทริกเกอร์ให้ทำงานทุกๆ 5 นาที

function writer() {
  var ss2 = SpreadsheetApp.getActiveSheet();
  //assumes desired value sits in cell input!A2
  var input = ss2.getSheetById("input")
    .getRange(2, 1)
    .getValue();
  //adds input value into a new row in output sheet
  var outputSheet = ss2.getSheetById("output");
  var output = outputSheet.getRange(outputSheet.getLastRow() + 1, 1)
    .setValue(input);
}

↑ ให้ไรท์เตอร์ () ทริกเกอร์ให้ทำงานทุกๆ 5 นาทีหรืออะไรก็ตามที่จำเป็น

person dzorug    schedule 19.10.2015