我正在编写Google应用脚本代码,以便可以将csv数据文件自动导入到Google电子表格中。
这是我的代码:
function myFunction() {
var file = DriveApp.getFilesByName("data.csv").next();
varcsvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();
var numrows = csvData.length();
var numcols = csvData[0].length();
sheet.getRange(1,1, numrows, numcols).setValue(csvData)
}
导入所有行和列时,代码可以正常工作。但是当我指定像“ B2:C5”这样的单元格区域时,它不起作用。我尝试插入数值(对于单元格范围B2:C5-5行2行)和numcols。该代码运行,但没有输出可见。即没有数据导入到具有指定单元格范围的Google表格中。
有人可以帮忙吗?
答案 0 :(得分:1)
此修改如何?
length()
修改为length
。Utilities.parseCsv()
检索的值是二维数组。为了使用此功能,请将setValue(csvData)
修改为setValues(csvData)
。function myFunction() {
var file = DriveApp.getFilesByName("data.csv").next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();
var numrows = csvData.length; // Modified
var numcols = csvData[0].length; // Modified
sheet.getRange(1,1, numrows, numcols).setValues(csvData); // Modified
}
numrows
和numcols
检索。因此,您可以将它们用于setValues()
的方法。如果我误解了你的问题,我深表歉意。并且,如果这不适用于您的情况,您可以提供示例CSV文件吗?由此,我想确认一下。
如果我的理解是正确的,那么该示例脚本如何?
在此模式下,the GridRange用于从CSV数据范围中选择值。使用GridRange选择的值将放入电子表格中。
示例脚本:function myFunction() {
// As a sample, C3:D5 is as follows.
var startRowIndex = 2;
var endRowIndex = 5;
var startColumnIndex = 2;
var endColumnIndex = 4;
var file = DriveApp.getFilesByName("data.csv").next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var values = [];
for (var row = startRowIndex; row < endRowIndex; row++) {
var temp = [];
for (var col = startColumnIndex; col < endColumnIndex; col++) {
temp.push(csvData[row][col]);
}
values.push(temp);
}
var sheet = SpreadsheetApp.getActiveSheet();
var numrows = values.length;
var numcols = values[0].length;
sheet.getRange(1,1, numrows, numcols).setValues(values);
}
在此模式中,a1Notation用于从CSV数据范围中选择值。首先,将所有CSV数据放入电子表格。然后,检索所选范围的值。清除电子表格后,这些值将放入电子表格中。
示例脚本:function myFunction() {
var csvRange = "C3:D5"; // Please set the range of CSV data.
var file = DriveApp.getFilesByName("data.csv").next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();
var numrows = csvData.length;
var numcols = csvData[0].length;
sheet.getRange(1,1, numrows, numcols).setValues(csvData);
var values = sheet.getRange(csvRange).getValues();
sheet.clearContents();
sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}