使用Google Script将多个CSV文件导入Google工作表

时间:2017-10-23 01:49:49

标签: google-apps-script google-sheets

我正在使用Google脚本将CSV文件从网络网址导入到Google工作表中的单个工作表。我想在导入新信息之前清除某些列的内容。在导入之前,我无法让脚本清除内容。我还在一张纸上包含了一张CSV的一部分和另一张。我想我需要在CSV文件之间添加一些内容。我还需要在导入之前添加一些内容来清除内容。我不想只清除工作表,因为有些公式需要保留。我也不想使用Google IMPORTDATA功能,因为它不可靠。

以下是我当前的脚本(已删除网址):

function importCSVFromWeb() {

  var csvUrl = "http://csvurlhere";
  var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
  var csvData = Utilities.parseCsv(csvContent);
  var ss = SpreadsheetApp.openByUrl('spreadsheeturlhere');
  var sheet = SpreadsheetApp.getActiveSheet();
  var ss = sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

  var csvUrl = "http://csvurlhere";
  var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
  var csvData = Utilities.parseCsv(csvContent);
  var sheet = SpreadsheetApp.getActive().getSheetByName('RentPaid');
  var ss = sheet.getRange(3, 3, csvData.length, csvData[0].length).setValues(csvData);

  var csvUrl = "http://csvurlhere";
  var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
  var csvData = Utilities.parseCsv(csvContent);
  var sheet = SpreadsheetApp.getActive().getSheetByName('Tenants');
  var ss = sheet.getRange(1, 2, csvData.length, csvData[0].length).setValues(csvData);

  var csvUrl = "http://csvurlhere";
  var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
  var csvData = Utilities.parseCsv(csvContent);
  var sheet = SpreadsheetApp.getActive().getSheetByName('Owners');
  var ss = sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}

1 个答案:

答案 0 :(得分:2)

要清除工作表中的工作表或一系列单元格的内容,您可以使用sheet.clearContents()range.clearContent(),这样只会删除值&留下你的格式&机智的公式。

我注意到您的行var ss = SpreadsheetApp.openByUrl('spreadsheeturlhere');没有做任何事情,因为您随后重新声明了ss变量。如果脚本绑定到电子表格,则您不需要此行来调用getActive()& getActiveSheet()会为您提供主机电子表格的参考。您对SpreadsheetApp.getActive().getSheetByName()的调用无论如何都会返回对主机电子表格的引用,而不是您通过网址打开的引用。

我还会考虑更改您的功能以接受CSV源网址,工作表名称和单元格锚点作为参数,以便代码更易于维护。 e.g。

function importCSVFromWeb(csvUrl, sheetName, dataAnchor) {
  /* csvUrl:     the CSV source URL
     sheetName:  the name of the sheet to add the data
     dataAnchor: the cell origin for the range.setValues() call as an array 
                 i.e. dataAnchor = [row, col]
  */
  var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
  var csvData = Utilities.parseCsv(csvContent);
  var ss = SpreadsheetApp.getActive();
  // note that you'll need to pass in a name for each sheet, 
  //   including the first one where you used SpreadsheetApp().getActiveSheet() previously
  var sheet = ss.getSheetByName(sheetName);
  sheet.getRange(dataAnchor[0], dataAnchor[1], csvData.length, csvData[0].length).setValues(csvData);
}

function feedCSVImport(){
  var urls_sheets_list = [["csv_source_url_1", "Sheet1", [1,1]],
                          ["csv_source_url_2", "RentPaid", [3,3]],
                          ["csv_source_url_3", "Tenants", [1,2]],
                          ["csv_source_url_4", "Owners", [1,1]]
                         ];
  for(var i = 0, lim = url_sheets_list.length; i < lim; ++i){
    importCSVFromWeb(url_sheets_list[i][0], url_sheets_list[i][1], url_sheets_list[i][2]);
  }
}