0

この「テンプレートから生成」スクリプトを編集しようとしています。スクリプトが行うことは、スプレッドシートからドキュメントに情報を入力するテンプレートに基づいています。ドキュメントにテンプレートのコピーと行番号を付けるだけであることを除いて、私はそれがどのように機能するかが気に入っています。これは、私がこれを使用しようとしている目的にはあまり効率的ではありません。私の質問は、これらのオプションのいずれかをどのように実行できるかです。

A: 行内の特定のセルに基づいて名前を付けます。たとえば、Claim # と Department という名前の列があります。これらの両方で各ドキュメントのタイトルを構成したいと思います。ドキュメントは、エクスポートされたその行のその列の情報に基づいて、「 {部門名} {クレーム #} 」になります。

B: ドキュメントを生成するときに、ファイルの名前を尋ねるボックスを用意してください。

ご協力ありがとうございました!

PS: 必要な場合、ドキュメントの名前に使用する列は、E 列、D 列です。

これがコードです: (これは私が作成したものではありません。ギャラリーで見つけました。)

function generateDocument(e) {
  var template = DocsList.getFileById(e.parameter.Templates);
  var row = e.parameter.row
  var myDocID = template.makeCopy(template.getName()+" - "+ row).getId();
  var myDoc = DocumentApp.openById(myDocID);
  var copyBody = myDoc.getActiveSection();
  var Sheet = SpreadsheetApp.getActiveSpreadsheet();
  //Browser.msgBox(row);
  var myRow = SpreadsheetApp.getActiveSpreadsheet().getRange(row+":"+row);
  for (var i=1;i<Sheet.getLastColumn()+1;i++){
    var myCell = myRow.getCell(1, i);
    copyBody.replaceText("{"+myCell.getA1Notation().replace(row,"")+"}", myCell.getValue());
  }
  myDoc.saveAndClose();
  //var pdf = DocsList.getFileById(copyId).getAs("application/pdf"); 
  //MailApp.sendEmail(email_address, subject, body, {cc: carbonCopy, name: senderName, htmlBody: body, attachments: pdf}); 

  var app = UiApp.getActiveApplication();
  app.close();
  return app; 
}

function getTemplates() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var app = UiApp.createApplication().setTitle('Generate from template');
  // Create a grid with 3 text boxes and corresponding labels
  var grid = app.createGrid(3, 2);
  grid.setWidget(0, 0, app.createLabel('Template name:'));

  var list = app.createListBox();
  list.setName('Templates');
  grid.setWidget(0, 1, list);
  var docs = DocsList.getFolder("Templates").getFilesByType("document");
  for (var i = 0; i < docs.length; i++) {
    list.addItem(docs[i].getName(),docs[i].getId());
  }
  grid.setWidget(1, 0, app.createLabel('Row:'));
  var row = app.createTextBox().setName('row');
  row.setValue(SpreadsheetApp.getActiveSpreadsheet().getActiveRange().getRow());
  grid.setWidget(1, 1, row);
  // Create a vertical panel..
  var panel = app.createVerticalPanel();

  // ...and add the grid to the panel
  panel.add(grid);

  // Create a button and click handler; pass in the grid object as a callback element and the handler as a click handler
  // Identify the function b as the server click handler

  var button = app.createButton('Submit');
  var handler = app.createServerClickHandler('generateDocument');
  handler.addCallbackElement(grid);
  button.addClickHandler(handler);

  // Add the button to the panel and the panel to the application, then display the application app in the Spreadsheet doc
  panel.add(button);
  app.add(panel);
  doc.show(app);
}

function onOpen() {   
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name: "Generate from template", functionName: "getTemplates"}];  
  ss.addMenu("Template Generator", menuEntries);  
}
4

1 に答える 1