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

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

@Serge,我认为埃文的问题不同。Evan 担心拆分没有考虑行。

解决方案是使用两个拆分。第一的,

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() 将二维数组作为输入。

我不确定你想做什么。如果您只想将数据写入单元格,请使用这段代码

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

如果要将数据中的每个元素写入电子表格中的一行,则可以使用

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

请注意在第一种情况和第二种情况下如何创建二维数组。

于 2012-06-20T10:03:39.663 回答
0

我想最简单的做法是将这些选项卡转换为其他内容,例如逗号,毕竟这就是 csv 的“c”的来源......然后你可以在任何你想要的地方写它。

示例: commaString = tabString.replace(\t/g,',') ;应该可以,但我不是正则表达式的专家......如果我错了,肯定有人会纠正它;-)

于 2012-06-20T15:10:35.070 回答