将分隔文本作为字符串写入电子表格

时间:2012-06-20 05:23:37

标签: google-apps-script

我有一个简短的脚本,我试图从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
}

3 个答案:

答案 0 :(得分: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]); 
}

答案 1 :(得分:1)

Range.setValues()采用二维数组作为输入。

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

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

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

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

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

答案 2 :(得分:0)

我想最容易做的就是将这些标签转换为别的东西,例如逗号,这毕竟是csv的'c'来自......然后你可以把它写在任何你想要的地方。

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