Фильтруйте CVS перед импортом в Google Spreadsheet - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть сценарий в электронной таблице Google, который загружает сжатый CSV-файл с URL-адреса и затем импортирует его в электронную таблицу. На самом деле, CVS слишком большой, и мне не нужны все данные из него. У меня вопрос: как я могу отфильтровать данные перед их импортом в электронную таблицу? Например, отфильтруйте столбец A со значением X.

Это код, который у меня есть:

function descargarzip() 
{
var urldescarga = "http://187.191.75.115/gobmx/salud/datos_abiertos/datos_abiertos_covid19.zip"
var url = urldescarga
var zipblob = UrlFetchApp.fetch(url).getBlob(); 
zipblob.setContentTypeFromExtension();
var unzipblob = Utilities.unzip(zipblob); 
var unzipstr=unzipblob[0].getDataAsString();
var csv = Utilities.parseCsv(unzipstr);

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
ss.getRange(1, 1, csv.length, csv[0].length).setValues(csv);
}

Заранее спасибо!

1 Ответ

2 голосов
/ 16 апреля 2020

Попробуйте:

function descargarzip() {
  var urldescarga = "http://187.191.75.115/gobmx/salud/datos_abiertos/datos_abiertos_covid19.zip"
  var url = urldescarga
  var zipblob = UrlFetchApp.fetch(url).getBlob(); 
  zipblob.setContentTypeFromExtension();
  var unzipblob = Utilities.unzip(zipblob); 
  var unzipstr=unzipblob[0].getDataAsString();
  var csv = Utilities.parseCsv(unzipstr);
  var x = 'You enter the contents x';
  csv.forEach(function(r,i){
    if(r[0]==x) {
      r[0]='';//You have to put something back in there because the csv has to be a rectangular array for setValues();
    }
  });//You could remove an entire line or an entire column
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  ss.getRange(1, 1, csv.length, csv[0].length).setValues(csv);
}

Если @TheMaster верен, попробуйте следующее:

function descargarzip() {
  var urldescarga = "http://187.191.75.115/gobmx/salud/datos_abiertos/datos_abiertos_covid19.zip"
  var url = urldescarga
  var zipblob = UrlFetchApp.fetch(url).getBlob(); 
  zipblob.setContentTypeFromExtension();
  var unzipblob = Utilities.unzip(zipblob); 
  var unzipstr=unzipblob[0].getDataAsString();
  var csv = Utilities.parseCsv(unzipstr);
  var x = 'You enter the contents x';
  var d=0;
  //I tested this on some of my data and I believe it works
  for(var i=0;(i-d)<csv.length;i++) {
    if(csv[i-d][0]==x) {
      csv.splice(i-d++,1);//I think this is correct but I could be wrong in here because I mostly use this approach for deleting rows not portions of the array.  So if you have problems the please share your csv data and I will debug it.
    }
  }
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  ss.getRange(1, 1, csv.length, csv[0].length).setValues(csv);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...