我正在使用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);
}
答案 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]);
}
}