将单元格值插入此Google应用程序脚本代码中以进行导入无法正常工作

时间:2019-07-17 00:28:32

标签: google-apps-script

我正在编写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表格中。

有人可以帮忙吗?

1 个答案:

答案 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
}

注意:

  • 在脚本中,行和列的长度由numrowsnumcols检索。因此,您可以将它们用于setValues()的方法。

参考文献:

如果我误解了你的问题,我深表歉意。并且,如果这不适用于您的情况,您可以提供示例CSV文件吗?由此,我想确认一下。

编辑:

  • 您要通过从文件的CSV值中选择范围来放置值。

如果我的理解是正确的,那么该示例脚本如何?

模式1:

在此模式下,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);
}

模式2:

在此模式中,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);
}