繁体   English   中英

在 Google Apps 脚本中的同一脚本中调用另一个 function 中的 function

[英]Call a function within another function in the same script in Google Apps Script

我对编写代码很陌生,我需要一些帮助。 我正在研究谷歌表格。 在下面的代码中,我试图在copyAllInRange() function 中调用Merge() ) function。 我看到了很多例子,但我对如何做到这一点有点困惑。 这两个功能都运行良好; 我不知道如何将一个 function 称为另一个。

目标是运行copyAllInRange() 并在 function 结束时调用Merge() function 运行。


 function Merge(){
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var sheet = ss.getSheetByName('PDF_TEMP');
     var Range_Logo = sheet.getRange('C11:D16').merge();
     var Range_Bottom = sheet.getRange('C50:J52').merge();
 
 Range_Bottom.setHorizontalAlignment("center").setVerticalAlignment("middle");
 Range_Logo.setHorizontalAlignment("center").setVerticalAlignment("middle");
 }

 function copyAllInRange(){
 var SS = SpreadsheetApp.getActiveSpreadsheet(); 
 var NS = SS.getSheetByName("PDF_TEMP");    
     if (NS != null) {
         SS.deleteSheet(NS);}
     NS = SS.insertSheet();
     NS.setName("PDF_TEMP");
 
 var Sheet = SS.getSheetByName("Factura");     
 var TR = Sheet.getRange("C3:N59");        
 var PR = NS.getRange("A1:L55");               
   
 var columnWidths = SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS
   TR.copyTo(PR);
   TR.copyTo(PR,columnWidths,false);  
 }

两者都在同一个脚本文件中; 两者都独立工作。

可以在合并结束时调用第二个 function function

 function Merge(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('PDF_TEMP'); var Range_Logo = sheet.getRange('C11:D16').merge(); var Range_Bottom = sheet.getRange('C50:J52').merge(); Range_Bottom.setHorizontalAlignment("center").setVerticalAlignment("middle"); Range_Logo.setHorizontalAlignment("center").setVerticalAlignment("middle"); copyAllInRange() }

笔记:

请记住尽可能分享您正在处理的工作的样本表/屏幕截图,以便我们能够更好地可视化您的目标,这也将帮助我们为您提供更好的答案/建议。

推荐:

我已经测试了您的代码并根据您的代码创建了一个示例表。 您可以使用以下代码作为参考:

 function copyAllInRange(){// Please select this copyAllInRange function before running the script
    var ss2 = SpreadsheetApp.getActiveSpreadsheet(); 
    var ns = ss2.getSheetByName("PDF_TEMP");    
        if (ns != null) {
            ss2.deleteSheet(ns);}
        ns = ss2.insertSheet();
        ns.setName("PDF_TEMP");
    
    var sheet = ss2.getSheetByName("Factura");     
    var tr = sheet.getRange("C3:N59");        
    var pr = ns.getRange("A1:L55");               
      
    var columnWidths = SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS;
      tr.copyTo(pr);
      tr.copyTo(pr,columnWidths,false);  
      Logger.log("First Run: Done running copyAllInRange()"); //Added a log line so that you can track how the code runs in Execution logs on the Apps Script editor
      merge();//last function to be run before the code ends
 }

  function merge(){
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var sheet = ss.getSheetByName('PDF_TEMP');
     var range_Logo = sheet.getRange('C11:D16').merge();
     var range_Bottom = sheet.getRange('C50:J52').merge();
 
     range_Bottom.setHorizontalAlignment("center").setVerticalAlignment("middle");
     range_Logo.setHorizontalAlignment("center").setVerticalAlignment("middle");
     Logger.log("Second Run: Done running merge()"); //Added a log line so that you can track how the code runs in Execution logs on the Apps Script editor
 }

我已经更正了上面的一些代码,因为您在一些变量名称上使用了正确的命名约定 ( PascalCase ),例如var SS =重命名为 ( CamelCase ) var ss = 这是因为在命名变量时,arrays 或其他元素总是以小写字母或“CamelCase”开头。 使用大写字母或“PascalCase”来命名函数、类和其他对象,当您在命名变量时使用它可能会在代码中出现问题

这是我的示例 PDF_TEMP 表:

在此处输入图像描述

这是我的示例情况说明书:

在此处输入图像描述

运行代码后,PDF_TEMP 表上的结果如下:

在此处输入图像描述

这是执行日志结果:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM