将活动电子表格复制到文件夹中的所有电子表格文档

时间:2017-02-06 16:32:02

标签: google-apps-script

我正在尝试将单个电子表格复制到文件夹中的所有电子表格文件。我无法弄清楚如何做到这一点,所以我使用的是我之前发现的代码,列出了所有文件,但它最终列出了我的驱动器中的所有文件,而不仅仅是在该文件夹中。

我是否可以帮助制作脚本将其复制到特定文件夹中的所有文件,或者更改它以便下面的代码只显示它所在的文件夹?从我看到/更改的DriveApp.getFiles()应该只列出文件夹中的那些文件?

function List()
{
  var app = UiApp.createApplication();
  app.setTitle("Copy Sheet in Multiple Spreadsheets");

  var form = app.createFormPanel();
  var flow = app.createFlowPanel();

  var label = app.createLabel("Select Spreadsheet where you want to copy the current sheet:").setId('selectLabel');
  flow.add(label);
  var allfiles =  DriveApp.getFiles();
  var verticalPanel = app.createVerticalPanel().setId('verticalPanel');
  var i = 0;
  while (allfiles.hasNext())
  {
    var file = allfiles.next();
    var temp = app.createCheckBox(file.getName()).setName('cb'+i).setId('cb'+i);
    var tempvalue = app.createHidden('cbvalue'+i, file.getId());
    verticalPanel.add(temp);
    verticalPanel.add(tempvalue);
    i++;
  }

  var scrollPanel = app.createScrollPanel().setId('scrollPanel');
  scrollPanel.add(verticalPanel);
  scrollPanel.setSize("400", "250")
  flow.add(scrollPanel);

  var buttonsubmit = app.createSubmitButton("Copy");
  flow.add(buttonsubmit);

  form.add(flow);
  app.add(form);

  SpreadsheetApp.getActiveSpreadsheet().show(app);
  return app;
}

function doPost(eventInfo) {
  var app = UiApp.getActiveApplication();
  var allfiles =  DriveApp.getFiles();
  var tempSsId = "";

  var i = 0;
  while (allfiles.hasNext())
  {
    var temp = eventInfo.parameter['cb'+i];
    if(temp == 'on')
    {
      tempSsId = eventInfo.parameter['cbvalue'+i];
      var activeSheet = SpreadsheetApp.getActiveSheet().copyTo(SpreadsheetApp.openById(tempSsId));
      activeSheet.setName(SpreadsheetApp.getActiveSheet().getSheetName());
    }
    i++;
  }

  var label = app.createLabel('statusLabel');
  label.setText("Copied Active sheet in all selected Spreadsheets...");
  label.setVisible(true);
  app.add(label);
  return app;
}

1 个答案:

答案 0 :(得分:0)

DriveApp.getFiles();会获取云端硬盘中的所有文件。

DriveApp.getFolderById('folder id').getFiles();如果您想获取特定文件夹中的文件(这将获取该文件夹中的文件,但不会获取子文件夹中的文件)。

此脚本与您提出的问题无关,我认为您的问题可能不正确。

您的意思是说您试图将单个工作表从电子表格复制到特定文件夹中的所有其他电子表格吗?

修改

function copyTo() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheetName = ''; // ENTER THE NAME OF THE SHEET YOU WANT TO COPY
    var targetFolder = DriveApp.getFolderById(''); //ENTER THE ID OF THE TARGET FOLDER HERE
    var sheet = ss.getSheetByName(sheetName);
    var getFiles = targetFolder.getFiles();

    while (getFiles.hasNext()) {
        var file = getFiles.next();
        if (file.getMimeType() == 'application/vnd.google-apps.spreadsheet') {
            var targetSheet = SpreadsheetApp.openById(file.getId());
            sheet.copyTo(targetSheet).setName(sheetName);
        }
    }
}