1

ここに私のコードがありますが、replaceText() が機能しない理由がわかりません。

function createDoc(){
  var templateid = "1jM-6Qvy47gQ45u88WfDU_RvfuSTsw27zBP_9MfsUGr8"; // get template file id
  var FOLDER_NAME = "Completed Rental Agreements"; // folder name of where to put doc
// get the data from an individual user
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var data = sheet.getRange(2, 1, sheet.getLastRow()-1,sheet.getLastColumn()).getValues();
  var lastRow = sheet.getLastRow();

  var firstName = sheet.getRange(lastRow, 2, 1,1).getValues();
  var lastName = sheet.getRange(lastRow, 3, 1,1).getValues();
  var guestEmail = sheet.getRange(lastRow, 7, 1,1).getValues();
  var companyEmail = "bearlakeprojectmanagement@yahoo.com";
  var companyName = "Bear Lake Project Management";
  var username = "jared.hislop.test@gmail.com"; // get their email (from sheet name)
  var me = "jared.hislop.test@gmail.com";

  //Copy Template
  var docid = DocsList.getFileById(templateid).makeCopy("Rental Agreement - "+firstName+""+lastName+"-"+guestEmail).getId();
//  var file = DocsList.getFileById(docid).addEditors(me);

 // move file to right folder
  var file = DocsList.getFileById(docid);
  var folder = DocsList.getFolder(FOLDER_NAME);
  file.addToFolder(folder);

  var doc = DocumentApp.openById(docid);
  var body = doc.getActiveSection();
  var body_text = doc.addEditor("jared.hislop.test@gmail.com");


 //  Append Cabin Rules 
//   doc.appendParagraph("This is a typical paragraph.");
body.replaceText("/^companyEmail$/", "test");
body.replaceText("%companyName%", "test1");
body.replaceText("%todayDate%", "test1");
doc.saveAndClose();

}

他のいくつかのオプションとともに doc.replaceText と body.replaceText を試しました。

これが機能しない理由はありますか?

少し早いですがお礼を

4

1 に答える 1

4

このことを考慮:

body.replaceText("%companyName%", "test1");

これにより、両側に「%」が付いた「companyName」のすべてのインスタンスが検索されます。この場合の「%」は、奇妙な場所にある句読点です。これは、ドキュメント内の実際のテキストを誤って置き換える可能性を減らすために使用される規則です。

置換が機能するには、テンプレート ドキュメントにその正確なパターンが必要です。(あなたのものはそうではありません... 代わりに、「companyName」だけです。「%companyName%」に変更してください。) 作成したい他の置換にそのルールを適用します。


いくつかの最適化の恩恵を受けることができます。

  ...
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  // Next line is hard to maintain - there's a better way.
  // var data = sheet.getRange(2, 1, sheet.getLastRow()-1,sheet.getLastColumn()).getValues();
  // Read whole spreadsheet, skip headers
  var data = sheet.getDataRange().getValues().slice(1);

  // Already read in all data, use it instead of reading sheet again.
  var firstName = data[data.length-1][2-1];    // (2-1) because array counts from 0
  var lastName = data[data.length-1][3-1];     // while spreadsheet columns from 1
  var guestEmail = data[data.length-1][7-1];   // Better: put these into variables.
  ...

あなたのコードを試しているときに、オートコンプリートの問題に遭遇しましたdoc.getActiveSection()2013 年 4 月 15 日のリリース ノートによると、最近変更があったことがわかりました。

Document.getActiveSection() の名前を getBody() に変更しました。

それに応じてコードを更新する必要があります。

于 2013-05-01T01:33:20.827 に答える