首页 > 解决方案 > 从工作表标签和一个模板制作变量

问题描述


function createDocs() {
  var headers = Sheets.Spreadsheets.Values.get('1wjmfG-mTYFw_JQZIondppy-VxffdV3fFzcEi8Og', 'Juli 2021!A5:K5');
  var tactics = Sheets.Spreadsheets.Values.get('1wjmfG-mTYFw_JQZIondppy-VoCguU_VgVfdsdcEi8Og', 'Juli 2021!H6:K4000');
  var templateId = '1B2IzVd03MmoPtT7Tcvce8I9wXGrb6fYXCnz8JikAs';

 
    for(var i = 0; i < tactics.values.length; i++){
    
    var textId = tactics.values[i][0];
    
    var titel = tactics.values[i][1];
      
    var words = tactics.values[i][3];
    
    //Make a copy of the template file
    var documentId = DriveApp.getFileById(templateId).makeCopy().getId();
    
    //Rename the copied file
    DriveApp.getFileById(documentId).setName('NEW ' + textId +' '+ titel + ' ' + words);
    
    //Get the document body as a variable
    var body = DocumentApp.openById(documentId).getBody();
    
    
    //Insert the textid name
    body.replaceText('##textID##', textId)
    
    //Insert the titel name
    body.replaceText('##subject##', titel)
    
    //Insert the words name
    body.replaceText('##words##', words)
        
    //Append tactics
    parseTactics(headers.values[0], tactics.values[i], body);
    
  }

}

function parseTactics(headers, tactics, body){ 
  
  for(var i = 1; i < tactics.length; i++){
    {tactics[i] != '' && 
      body.appendListItem(headers[i] + ' | ' + tactics[i] + ' net').setGlyphType(DocumentApp.GlyphType.BULLET);
    }
    
  }
}

所以我有这段代码可以在特定选项卡上正常工作并基于模板创建文档。

我怎样才能做到这一点,以便我的代码适用于所有选项卡?

所有感兴趣的选项卡都具有以下格式:“月年”。有一些不感兴趣的选项卡具有不同的格式。所有选项卡都有自己的相应文件夹。

目标是只有一个模板文件,我可以复制需要创建文档的每个文件夹。

标签: google-apps-scriptgoogle-cloud-platform

解决方案


如果您的工作表/标签是这样的:November 2021

然后你可以使用这样的东西从你的其他工作表中过滤它们:

function selectSheets() {
  const mA = [...Array.from(new Array(12).keys(), x => Utilities.formatDate(new Date(2021, x), Session.getScriptTimeZone(), "MMMM"))];
  const ss = SpreadsheetApp.getActive();
  let shts = ss.getSheets().filter(sh => {
    let t = sh.getName().split(' ');
    if (~mA.indexOf(t[0]) && t[1].match(/\d{4}/)) {
      return true;
    } else {
      return false;
    }
  }).map(sh => sh.getName());
  Logger.log(shts.join(','))
}

推荐阅读