【问题标题】:Copy Range based on specific column value into multiple tabs in new workbook将基于特定列值的范围复制到新工作簿中的多个选项卡中
【发布时间】:2019-11-06 05:01:08
【问题描述】:

我在 google 表格中管理一个工作簿以跟踪供应商票证。它有一个名为“MasterTracker”的选项卡。表头如下;

票号 |问题 |说明 |状态内部 |状态供应商 |优先 |创建日期 |内部所有者 |供应商所有者 |分辨率 |目标解决日期 |评论 |关闭日期

我现在要做的是根据“StatusInternal”列(值:Open、Hold、Future、Hold)拆分数据,并将列中每个值的数据移动到一个新选项卡中将状态名称作为工作表名称的工作簿。 例如,所有具有打开、关闭、保留、未来状态的工单都移动到新工作表中工作表名称为“打开”、“关闭”、“保留”、“未来”的新工作表,并将其保存在谷歌驱动器中。

这个新的工作簿每天都会通过电子邮件发送出去,目前,我以手动方式完成上述过程。

有人可以向我提供在 Google 表格中执行此操作的脚本或插件吗?

提前致谢! -铝

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    如果我理解正确,您需要一个新的电子表格,其中包含三张表(打开、保留和未来),其中包含相应的数据。

    这是我尝试过的:

    function createSpreadsheets() {
    
      var StatusInternal = ["Open","Hold","Future"];
    
      //Create the new file
      var newSprsheet = SpreadsheetApp.create("Status Internal");
    
      for (var i = 0; i < StatusInternal.length; i++){
        //Create the new Sheets with the Status Internal names
        newSprsheet.insertSheet(StatusInternal[i]);
      }
      //Activates the first sheet (Sheet1), to delete it, as it is not necessary
      newSprsheet.getSheets()[0].activate();
      newSprsheet.deleteActiveSheet();
    
      splitData(newSprsheet, StatusInternal);
    
    
    }
    
    function splitData(newSprsheet, StatusInternal){
    
      var mainSprsheet = SpreadsheetApp.openById("Id of your main Spreadsheet");
      var mainSheet = mainSprsheet.getActiveSheet();
    
      //Gets the values of the first row
      var headcolumns = mainSheet.getRange("A1:L1").getValues(); 
      //Gets the values of the Status Internal Column
      var StatusValues = mainSheet.getRange("C2:C").getValues();
    
      var lastRow = mainSheet.getLastRow();
    
      for (var i = 0; i < 3; i++){
        //Copies the first row values to each new Sheet
        newSprsheet.getSheets()[i].appendRow(headcolumns[0]);
      }
    
      for (var i = 2; i <= lastRow; i++){
        //Gets all the values of the row
        var rowContents = mainSheet.getRange("A"+i+":L"+i).getValues();
        //Appends a new row to the Sheet depending of the value in Column C.
        switch(StatusValues[i-2].toString()){
    
          case StatusInternal[0]:
            newSprsheet.getSheetByName(StatusInternal[0]).appendRow(rowContents[0]);
            break;
          case StatusInternal[1]:
            newSprsheet.getSheetByName(StatusInternal[1]).appendRow(rowContents[0]);
            break;
          case StatusInternal[2]:
            newSprsheet.getSheetByName(StatusInternal[2]).appendRow(rowContents[0]);
            break;
        }
    
      }
    }
    

    参考资料:

    【讨论】:

    • 您好 Jescanellas,该解决方案非常有效!非常感谢您编写脚本 :) 我做了一些调整以阅读正确的选项卡,因为我在工作簿中有多个选项卡(我确实在我的问题中提到了一个选项卡,而它更多)我通过添加 @ 进行了调整987654326@ 在当前解决方案的基础上,我收到了两个问题; 1.如何将格式保留为具有不同状态数据的新选项卡没有任何格式,如标题带颜色、对齐方式等 2。如何将文件保存到 Google Drive 的文件夹中?
    • 很高兴它对您有所帮助!关于您的两个问题,您应该打开一个新帖子,因为在 cmets 中回答这将非常混乱。
    • 明白了,我再发一个问题,把链接发给你。谢谢!
    • 根据您的建议,我创建了一个新的post。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多