3

UrlFetchから取得したデータをスプレッドシートに解析したいのですが、取得しているのは未定義です。誰かが私が間違っていることを教えてくれますか?

xmlはアドレスhttps://dl.dropbox.com/u/11787731/Minecraft/bans.xmlにあります

function runevery15mins() {
 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MC Bans");
 sheet.clearContents();
 var banURL = "https://dl.dropbox.com/u/11787731/Minecraft/bans.xml";

 var banXML = UrlFetchApp.fetch(banURL).getContentText();
 var banDOC = Xml.parse(banXML, false);
 var mcuser = banDOC.bans;

 var x = 0;
 for(var c=0; c>mcuser.length;c++){
   var name = mcuser.getElement("username")[c].getText();
   var date = mcuser.getElement("date")[c].getText();
   var reason = mcuser.getElement("reason")[c].getText();
   var duration = mcuser.getElement("duration")[c].getText();



 } 
 sheet.appendRow([name, date, reason, duration]);
}
4

2 に答える 2

3

コードに小さなエラーがあります。

たとえば、forループの2番目の引数は。である必要がありますc<mcuser.length

Xmlサービスのドキュメントを使用して、これは私のために働いた

function runevery15mins() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MC Bans");
  sheet.clearContents();
  var banURL = "https://dl.dropbox.com/u/11787731/Minecraft/bans.xml";

  var banXML = UrlFetchApp.fetch(banURL).getContentText();
  var banDOC = Xml.parse(banXML, false);
  // Get all the child nodes from the document element that are 'user' nodes
  var mcusers = banDOC.getElement().getElements('user');

  for(var c=0; c<mcusers.length;c++){
    var user = mcusers[c];
    var name = user.getElement('username').getText();
    var date = user.getElement('date').getText();
    var reason = user.getElement('reason').getText();
    var duration = user.getElement('duration').getText();

    sheet.appendRow([name, date, reason, duration]);
 } 
}

たとえば、sheet.appendRowラインがループの内側にあり、以前のように外側にないことに注意してください。X変数の目的がわからなかったため、X変数も削除しました。

userまた、各ノードのさまざまなコンテンツを取得する方法を理解しやすくするために、XmlElementである変数を作成しました。

于 2012-06-21T03:58:34.950 に答える
1

あなたはほとんどそこにいました。

ドリルダウンする必要のある別のアレイがあったようです。また、スプレッドシートへのコールバックはループ内にある必要があります。これを試して:

...
var mcuser = banDOC.bans.user;

for(var i in mcuser){
   var name = mcuser[i].getElement("username").getText();
   var date = mcuser[i].getElement("date").getText();
   var reason = mcuser[i].getElement("reason").getText();
   var duration = mcuser[i].getElement("duration").getText();
   sheet.appendRow([name, date, reason, duration])
 } 
于 2012-06-22T13:06:32.583 に答える