要将文件夹范围导入到一张工作表的Google Sheet脚本

时间:2016-01-07 02:18:26

标签: google-apps-script google-sheets

我正在研究如何做我需要的事情,我发现this video并认为这对我来说是完美的。

它显示了如何在页面上设置脚本以导入整个文件夹,这正是我需要的。我有14张相同的纸张。我需要将A2:F从所有这些复制到一张表中。这是脚本:

function getdata() {
    var files = DriveApp.getFolderById("0B94fkeHjleasRF9QMDFlcHllRVU").getFiles()
    while (files.hasNext()) {
      var file = files.next();
      var shoot = SpreadsheetApp.openById(file.getId());

      var sourcesheet = SpreadsheetApp.getActive().getSheetByName("Sheet1");
      var sourcerange = sourcesheet.getRange('A2:F');
      var sourcevalues = sourcerange.getValues();

      var destsheet = shoot.getSheetByName('Sheet1'); 
      var destrange = destsheet.getRange('A2:F'); 
      destrange.setValues(sourcevalues);         
   }
 }

问题是:虽然它在视频中起作用,但我似乎无法让它为我工作。我玩了最后一行(我收到错误的地方)。我设法让脚本删除我需要复制的所有信息。大声笑。显然我需要帮助。任何人都可以在这个剧本中看到任何明显的错误吗?

我尝试了importRange,但它挂起了数组公式。这个脚本看起来很完美,只要我能让它发挥作用。

1 个答案:

答案 0 :(得分:2)

此代码:

  • 从特定文件夹中获取文件
  • 循环浏览文件夹中的所有文件
  • 测试文件的Mime类型以仅获取电子表格
  • 获取源表标签中的所有值
  • 将所有新数据写入现有数据的末尾

要使此代码生效,您必须输入文件夹ID,源表格标签名称和目标电子表格文件ID。

代码:

function getdata() {
  //declare multiple variables in one statement - Initial value will
  //be undefined
  var destinationSpreadsheet,destinationSS_ID,destsheet,destrange,file,files,
      sourcerange,sourceSS,sourcesheet,srcSheetName,sourcevalues;

  srcSheetName = "Type the Name of Source Sheet Tab Here";
  destinationSS_ID = "Type the Name of destination spreadsheet file ID Here";
  files = DriveApp.getFolderById("Folder ID").getFiles();
  destinationSpreadsheet = SpreadsheetApp.openById(destinationSS_ID);
  destsheet = destinationSpreadsheet.getSheetByName('Sheet1');  

  while (files.hasNext()) {
    file = files.next();
    if (file.getMimeType() !== "application/vnd.google-apps.spreadsheet") {
      continue;
    };
    sourceSS = SpreadsheetApp.openById(file.getId());
    sourcesheet = sourceSS.getSheetByName(srcSheetName);
    //sourcesheet.getRange(start row, start column, numRows, number of Columns)
    sourcerange = sourcesheet.getRange(2,1,sourcesheet.getLastRow()-1,6);
    sourcevalues = sourcerange.getValues();

    //Write all the new data to the end of this data
    destrange = destinationSpreadsheet.getSheetByName("Sheet1")
        .getRange(destsheet.getLastRow()+1,1,sourcevalues.length,sourcevalues[0].length);

    destrange.setValues(sourcevalues);         
  };
};