google-apps-script - Google Sheet 脚本将文件夹范围导入到一张工作表

标签 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 但它在数组公式上挂起。这个脚本看起来很完美,如果我能让它工作就好了。

最佳答案

这段代码:

  • 从特定文件夹获取文件
  • 循环遍历文件夹中的所有文件
  • 测试文件的 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);         
  };
};

关于google-apps-script - Google Sheet 脚本将文件夹范围导入到一张工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34646340/

相关文章:

python - Google API(表格)API 错误代码 403。权限不足 : Request had insufficient authentication scopes

excel - 根据月份中的某天将总和范围加 1

javascript - 表单提交时收到的 Google 表单事件没有响应

date - 如何在 Google Apps Scripts 中创建具有特定时区的 Date()

javascript - 加速 Google 脚本中的 onEdit 功能 - 有时无响应

python - 如何使用 Python 将 Google 表单链接到 Google Sheet?

javascript - XMLHTTPRequest 没有定义?谷歌电子表格?

mysql - 带 IF 语句的 for 循环不会退出

google-apps-script - ArrayFormula 破坏了 getLastRow() 功能。可能的解决方法?

javascript - 根据匹配的内容合并数组的内容