Cara mengatasi nilai #N/A menggunakan fungsi Google Sheet =importxml

Saya memiliki lembar yang ingin mengimpor nilai hasil pencarian Google menggunakan fungsi importxml. Terkadang saya mendapatkan #N/A di sel A2.

Saya menggunakan while loop untuk terus mencoba mengambil data dan tetap saja saya tidak mendapatkan data meskipun saya menunggu lama. Apakah mungkin untuk mengatur pengatur waktu JavaScript sehingga berjalan sampai saya mendapatkan nilai di sel A2 kemudian pengatur waktu berhenti dan membiarkan kode lainnya melanjutkan?

Apa yang harus saya lakukan untuk menghindari kasus seperti itu dan selalu mendapatkan nilai di sel A2? Adakah solusi alternatif?

  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 sumber
comment
Apa yang Anda miliki di C2 dan D2?   -  person Mogsdad    schedule 17.10.2015


Jawaban (1)


Saya menghadapi masalah yang sama. Saya menduga itu karena kode mencoba .getValue dari sel sebelum nilai sel diperbarui dari IMPORTXML.

Solusi saya adalah menulis dua fungsi terpisah, satu untuk memaksa IMPORTXML menyegarkan, dan yang lainnya untuk menulis data ke dalam lembar. Lalu saya memberi IMPORTXML pemicu untuk dijalankan setiap 5 menit, dan kemudian fungsi tulis dengan pemicunya sendiri.

Anda mungkin ingin mencoba ini:

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));
}

^ Berikan refresher() pemicu untuk dijalankan setiap 5 menit

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);
}

^ Berikan writer() pemicu untuk dijalankan setiap 5 menit atau apa pun yang diperlukan

person dzorug    schedule 19.10.2015