1

URLからデータを取得して、既存のスプレッドシートのシートに書き込もうとしている短いスクリプトがあります。スクリプトは次のとおりです。

function urlDataImport() {
  var input = "https://reports.acc-q-data.com/clientreports/ecaldwell_201206192722/ecaldwell_20122722.txt";
  // The code below gets the HTML code.
  var response = UrlFetchApp.fetch(input);
  var data = response.getContentText();
  Logger.log(data);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ptSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("pt");
  ptSheet.getActiveRange().setValues(data);
}

データ内の情報はタブ区切りでログに正しく表示されますが、文字列であるため、.setValuesを使用してシートptに書き込むことができず、他のURLから情報を取得する方法がわかりません。仕方。

この質問の基本的な性質については申し訳ありませんが、スクリプトを作成するのは非常に新しいので、助けていただければ幸いです。

更新されたコード:

function ptDataImport() { 
  var input = "https://reports.acc-q-data.com/clientreports/ecaldwell_201206192722/ecaldwell_2012062.txt";  
  var response = UrlFetchApp.fetch(input);  // Get the data from the URL as an object.
  var data = response.getContentText();  // Convet the object to text
  var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("pt");  // Get the sheet to write the data to  
  var rows = data.split('\n');  // Splits the text into rows
  dataSheet.clear();
  var dataSet = new Array();
  for ( var i in rows){
    dataSet[i] = rows[i].split('\t'); // Split the rows into individual fields and add them to the 2d array
  }
  dataSet.pop(); // Had a blank row at the bottom that was giving me an error when trying to set the range - need to make this conditional somehow
  var numColumns = dataSet[0].length;
  var numRows = dataSet.length;
  var lastRow = dataSet[(numRows -1)];
  dataSheet.getRange(1,1,numRows,numColumns).setValues(dataSet);  // Get a range the size of the data and set the values
}
4

3 に答える 3

2

@サージ、エヴァンの質問は違っていたと思います。Evanは、分割で行が考慮されないことを懸念しています。

その解決策は、2つの分割を使用することです。初め、

var rows = data.split('\n'); 

その後

for ( var i in rows){
  tmp = rows[i].split('\t'); // Use Serge's method if this doesn't work
  /* Get the range here */
  range.setValues([tmp]); 
}
于 2012-06-21T04:38:35.233 に答える
1

Range.setValues()は、入力として2次元配列を取ります。

何をしたいのかわかりません。セルにデータを書き込むだけの場合は、このコードを使用してください

ptSheet.getActiveRange().setValues([[data]]);

データの各要素をスプレッドシートの行に書き込みたい場合は、次を使用できます。

var tmp = data.split(DELIMITER); 
/* Get the correct range here */
range.setValues([tmp]); 

最初のケースと2番目のケースで2次元配列を作成していることに注意してください。

于 2012-06-20T10:03:39.663 に答える
0

最も簡単な方法は、これらのタブを別の場所、たとえばカンマに変換することだと思います。これは、結局のところ、csvの「c」が由来する場所です...その後、好きな場所に書き込むことができます。

例: commaString = tabString.replace(\t/g,',') ;動作するはずですが、私は正規表現の専門家ではありません...私が間違っている場合、誰かが確実に修正します;-)

于 2012-06-20T15:10:35.070 に答える