【问题标题】:Create a new sheet within an existing spreadsheet google sheets在现有电子表格谷歌表格中创建一个新表格
【发布时间】:2018-09-10 12:47:31
【问题描述】:

这是我当前项目的第三个(希望是最后一个)问题。

IF ELSE 语句在以下代码中似乎无法正常工作:

function onFormSubmit() {
  // onFormSubmit
  // get submitted data
  var ss = 
SpreadsheetApp.openById("1UMSTyjYz2DMubBT54Q7a0V5ie5TAPYFZ2riqV5p93gE");
  var sheet = ss.getSheetByName("Submissions");
  var row = sheet.getLastRow();
  var Col = sheet.getLastColumn();
  var headings = sheet.getRange(1,1,1,Col).getValues();
  var lastRow = sheet.getRange(row, 1, 1, Col);
  var UnitNumber = sheet.getRange(row,3,Col).getValue(); 
  var newSheet = sheet.getRange(row,4,Col).getValue();
  // check if username has sheet

  if(ss.getSheetByName(UnitNumber)){
    var DrillSheet = ss.insertSheet(UnitNumber);
    // if not make
  } else {
  var DrillSheet = SpreadsheetApp.create(UnitNumber); 
DrillSheet.getSheetByName('Sheet1').getRange(1,1,1,Col).setValues(headings);
  }
  // Rename sheet to submission date
  DrillSheet.renameActiveSheet(newSheet);
  // copy submitted data to Drill sheet
  DrillSheet.appendRow(lastRow.getValues()[0]);
  DrillSheet.appendRow(['=CONCATENATE(B6," ",B5)']);
  DrillSheet.appendRow(['=TRANSPOSE(B1:2)']);
  //Hide top rows with raw data
  var hiderange = DrillSheet.getRange("A1:A3");
  DrillSheet.hideRow(hiderange);
  //Widen columns
  DrillSheet.setColumnWidth(1,390);
  DrillSheet.setColumnWidth(2,700);
}

这里的目标是创建一个新的电子表格,标题为“UnitNumber”,工作表标题作为提交日期(如果该电子表格尚不存在)。如果“UnitNumber”电子表格确实存在,我想在该电子表格中创建一个新工作表,标题为提交日期。

目前它每次都在创建一个新的电子表格。

【问题讨论】:

  • 你能在不同的帖子里问你不同的问题吗?
  • 您的代码逻辑与您声明的逻辑不匹配。 if/else 执行您的代码要求它执行的操作。一个好的第一步是逐行、逐语句地分析您的代码,并向附近的人解释该语句正在做什么——它需要的参数,以及它具有的返回值/副作用——如果有的话。这将使您能够确定您的代码当前正在做什么,并对 Apps 脚本和 JavaScript 语言建立足够的熟悉度,以便您可以尝试将代码逻辑调整为您声明的逻辑。

标签: google-apps-script google-sheets


【解决方案1】:

看到你的问题后试试这个代码:

function onFormSubmit() {
  var ss = SpreadsheetApp.openById("1UMSTyjYz2DMubBT54Q7a0V5ie5TAPYFZ2riqV5p93gE");
  var sheet = ss.getSheetByName("Submissions");
  var row = sheet.getLastRow();
  var Col = sheet.getLastColumn();
  var headings = sheet.getRange(1,1,1,Col).getValues();
  var lastRow = sheet.getRange(row, 1, 1, Col);
  var UnitNumber = sheet.getRange(row,3).getValue(); 

  var fileExist = false;
  var drillSheet = null;
  var folder = DriveApp.getFoldersByName("nameOfTheFolder").next();
  var files = folder.getFilesByName(UnitNumber);
  var file = null;
  while (files.hasNext())
  {
    fileExist = true;
    file = files.next();
    break;
  }
  if (fileExist)
  {
    drillSheet = SpreadsheetApp.openById(file.getId());
    drillSheet.renameActiveSheet("randomString") ;
  }
  else
  {
    drillSheet = SpreadsheetApp.create(UnitNumber);
    var ssID = drillSheet.getId();
    file = DriveApp.getFileById(ssID);
    file = file.makeCopy(UnitNumber, folder);
    DriveApp.getFileById(ssID).setTrashed(true);
    drillSheet = SpreadsheetApp.openById(file.getId());
    drillSheet.renameActiveSheet("randomString");
  }
}

【讨论】:

  • 感谢 JSmith,对于迟到的回复,我深表歉意 - 赶上了另一项任务。不幸的是,我只是厌倦了这个,它做同样的事情——每次都创建一个新的电子表格。您还有其他意见吗?再次感谢。
  • @ColinGrant 当然可以,但我更喜欢在电子表格上,因为它是进行修改的地方...
【解决方案2】:

要回答您的最后一个问题,一旦您创建了一个文件夹并与人员列表共享(整个文件夹),您随后放置在该文件夹中的任何文件都将自动与这些人共享。

【讨论】:

  • 一个问题只应该问一个问题。您不应尝试回答与实际问题无关的其他问题。
【解决方案3】:

这是按我的预期工作的固定代码。非常感谢@JSmith 帮助我度过难关——没有你我不可能做到这一点!

function onFormSubmit() {
  // onFormSubmit
  // get submitted data and set variables
  var ss = SpreadsheetApp.openById("some id");
  var sheet = ss.getSheetByName("Submissions");
  var row = sheet.getLastRow();
  var Col = sheet.getLastColumn();
  var headings = sheet.getRange(1, 1, 1, Col).getValues();
  var lastRow = sheet.getRange(row, 1, 1, Col);
  var UnitNumber = sheet.getRange(row, 3).getValue(); 
  var newSheet = sheet.getRange(row, 4, Col).getValue();
  var fileExist = false;
  var drillSheet = null;
  var folder = DriveApp.getFoldersByName("Fraser Drill Inspections").next();
  var files = folder.getFilesByName(UnitNumber);
  var file = null;
  // check if Drill has sheet
  while (files.hasNext()) {
    fileExist = true;
    file = files.next();
    break;
  }
  if (fileExist) //If spreadsheet exists, insert new sheet
  {
    drillSheet = SpreadsheetApp.openById(file.getId());
    drillSheet.insertSheet("" + newSheet);
  }
  else //create new spreadsheet if one doesn't exist
  {
    drillSheet = SpreadsheetApp.create(UnitNumber);
    var ssID = drillSheet.getId();
    file = DriveApp.getFileById(ssID).makeCopy(UnitNumber, folder);
    DriveApp.getFileById(ssID).setTrashed(true);
    drillSheet = SpreadsheetApp.openById(file.getId());
    drillSheet.renameActiveSheet(newSheet);
  }
  // copy submitted data to Drill sheet
  drillSheet.getSheetByName(newSheet).getRange(1, 1, 1, Col).setValues(headings);
  drillSheet.appendRow(lastRow.getValues()[0]);
  drillSheet.appendRow(['=CONCATENATE(B6, " ", B5)']);
  drillSheet.appendRow(['=TRANSPOSE(B1:2)']);
  //Hide top rows with raw data
  var hiderange = drillSheet.getRange("A1:A3");
  drillSheet.hideRow(hiderange);
  //Widen columns
  drillSheet.setColumnWidth(1, 390);
  drillSheet.setColumnWidth(2, 700);
}

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 2016-01-03
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多