File 我想在电子表格中添加一个按钮,该按钮将';复印一份';并移动到指定的文件夹

File 我想在电子表格中添加一个按钮,该按钮将';复印一份';并移动到指定的文件夹,file,button,google-sheets,File,Button,Google Sheets,我发现了类似的问题,并尝试使用脚本,但没有一个适合我 我已经用Google Sheets创建了一份订单,一旦我们填写了客户订单,我想点击一个按钮,使用订单ID、名字和姓氏的文件名复制一份订单,然后将其存储在一个名为11月订单等的文件夹中。我想将脚本附加到一个按钮上。我已经创建了按钮,但无法使用脚本。我不断收到错误消息,如getrange为null或文件夹ID不正确。我要把头发拔出来!进入文件、制作副本、粘贴订单ID、键入名称,然后选择目标文件夹非常耗时,因此我希望在工作表上有一个按钮来执行此操作

我发现了类似的问题,并尝试使用脚本,但没有一个适合我

我已经用Google Sheets创建了一份订单,一旦我们填写了客户订单,我想点击一个按钮,使用订单ID、名字和姓氏的文件名复制一份订单,然后将其存储在一个名为11月订单等的文件夹中。我想将脚本附加到一个按钮上。我已经创建了按钮,但无法使用脚本。我不断收到错误消息,如getrange为null或文件夹ID不正确。我要把头发拔出来!进入文件、制作副本、粘贴订单ID、键入名称,然后选择目标文件夹非常耗时,因此我希望在工作表上有一个按钮来执行此操作!对于办公室里那些从不使用表格或excel的技术恐惧症患者来说,这也会更好

欢迎大家帮忙!如果有人能粘贴我需要的实际脚本,那就太棒了


谢谢大家!

您可以使用下面的脚本来实现您的目标。请参阅注释(//),了解我对脚本每个部分及其功能的解释

function makeCopy() {
  // Make sure the script your make copy button is running is "makeCopy"
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  
  // No columns/rows are present in the image so I used sample cells
  // Update the cells below (B1, B2, B3) to correspond with the needed values
  var firstName = sheet.getRange("B3").getValue();
  var lastName = sheet.getRange("B2").getValue();
  var orderID = sheet.getRange("B1").getValue();
  
  // Filename format was my idea
  // No specifics were mentioned so create a format what you think is best
  // The sample here is <lastName>_<firstName>_<orderID> based on what variables you gave
  var fileName = lastName + "_" + firstName + "_" + orderID;
  
  // Exit function if one of the variables for the filename is blank
  if ( !lastName || !firstName || !orderID ) { 
    return; 
  }
  
  // Update folderID with your folder's ID. 
  // Can be found in the URL when the drive is currently visited. 
  // Everything after "https://drive.google.com/drive/folders/" is the folderID
  var folderID = "14oxtQIqRenG2l7fTk-I7fz7UunjxB64a";
  var destFolder = DriveApp.getFolderById(folderID); 
  DriveApp.getFileById(ss.getId()).makeCopy(fileName, destFolder); 
}

function reset() {
  // Make sure the script your reset button is running is "reset"
  var sheet = SpreadsheetApp.getActiveSheet();
  
  // No columns/rows are present in the image so I used sample cells
  // Add/Update the cells below (B1, B2, B3) to correspond with the needed values to be reset
  var firstName = sheet.getRange("B3").clear();
  var lastName = sheet.getRange("B2").clear();
  var orderID = sheet.getRange("B1").clear();
}
函数makeCopy(){
//确保“生成副本”按钮正在运行的脚本为“生成副本”
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=SpreadsheetApp.getActiveSheet();
//图像中没有列/行,因此我使用了示例单元格
//更新下面的单元格(B1、B2、B3)以符合所需的值
var firstName=sheet.getRange(“B3”).getValue();
var lastName=sheet.getRange(“B2”).getValue();
var orderID=sheet.getRange(“B1”).getValue();
//文件名格式是我的主意
//没有提到细节,所以创建一个你认为最好的格式
//这里的示例基于您给出的变量
var fileName=lastName+“”+firstName+“”+orderID;
//如果文件名的一个变量为空,则退出函数
如果(!lastName | | |!firstName | |!orderID){
返回;
}
//使用文件夹的ID更新folderID。
//当前访问驱动器时,可以在URL中找到。
//“之后的一切”https://drive.google.com/drive/folders/“这是folderID吗
var folderID=“14oxtQIqRenG2l7fTk-I7fz7UunjxB64a”;
var destFolder=DriveApp.getFolderById(folderID);
DriveApp.getFileById(ss.getId()).makeCopy(文件名,文件夹);
}
函数重置(){
//确保“重置”按钮运行的脚本为“重置”
var sheet=SpreadsheetApp.getActiveSheet();
//图像中没有列/行,因此我使用了示例单元格
//添加/更新下面的单元格(B1、B2、B3)以符合需要重置的值
var firstName=sheet.getRange(“B3”).clear();
var lastName=sheet.getRange(“B2”).clear();
var orderID=sheet.getRange(“B1”).clear();
}

复制脚本后,转到电子表格文件并创建重置按钮以清除电子表格中的所有数据。您可以按照此链接获取有关如何在电子表格中添加按钮的说明,因为这也是我的参考资料:

您可以发布当前正在尝试的脚本吗?你能发布你收到的确切错误消息吗?嗨,托马斯,我尝试的脚本是这样的:函数saveAsSpreadsheet(){var sheet=SpreadsheetApp.getActiveSpreadsheet();var range=sheet.getRange('Samson!A9:B9');sheet.setNamedRange('buildingNameAddress',range);var TestRange=sheet.getRangeByName('buildingNameAddress')).getValues();Logger.log(TestRange);var destFolder=DriveApp.getFolderById(“xxxxxxxxxxxxxxxxxx”);DriveApp.getFileById(sheet.getId()).makeCopy(“测试文件”,destFolder);}构建名称有点让我困惑,因为我认为我不需要它?我也不明白测试范围的部分。对不起,我是个笨蛋!你好@NicolaForster,下面的答案已经发布了。如果你觉得答案对你有用,请随意接受并投票表决。谢谢。哦,天哪,哇!你是个超级明星!它工作得很好,非常感谢,我非常感激!)@尼古拉福斯特,如果你感觉到了,也可以随意投票给上面的答案。ThanksHi我已经投了赞成票,但由于Monique是一个新用户,它说它没有公开展示?嗨@NicolaForster,你可以参考这个链接,了解如何投赞成票(回答:非常感谢!)