Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与使用google apps脚本作为文档模板占位符的google文档中的appendText方法相比,setText方法循环不正确_Javascript_Google Apps Script_Google Docs - Fatal编程技术网

Javascript 与使用google apps脚本作为文档模板占位符的google文档中的appendText方法相比,setText方法循环不正确

Javascript 与使用google apps脚本作为文档模板占位符的google文档中的appendText方法相比,setText方法循环不正确,javascript,google-apps-script,google-docs,Javascript,Google Apps Script,Google Docs,我在谷歌文档中制作了一个简历模板,在文档中有占位符,然后运行一个脚本,用实际内容填充它们。然后,当占位符被移除时,我使用书签轻松地替换元素中的文本 完整代码: function ResumeUpdate() { var doc = DocumentApp.getActiveDocument(); var body = doc.getBody(); var Content = { personal_info: { first_name: "Luis",

我在谷歌文档中制作了一个简历模板,在文档中有占位符,然后运行一个脚本,用实际内容填充它们。然后,当占位符被移除时,我使用书签轻松地替换元素中的文本

完整代码:

function ResumeUpdate() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();



  var Content = {
    personal_info: {
      first_name: "Luis",
      middle_name: "mymiddlename",
      last_name: "lastname Merchant",
      address_line_1: "111 grdvvv Ct NE",
      address_line_2: "Concord, NC 00000",
      phone_number: "(704) 450-9196",
      email_address: "mygmail@gmail.com",
      linkedin_url: "LINKEDIN GOES HERE... "},

    resume_body: { 
      objective: "OBJECTIVE GOES HERE... ",
      experience: ["EXPERIENCE GO HERE... "],
      education: [{
        institution: "Intitution",
        degree: "Degree",
        course_work: ["course work... "]}],
      skills: ["SKILLS GO HERE... "],
      leadership: ["LEADERSHIP GOES HERE... ","second"],}
  };
  var pinfo = Content.personal_info;
  pinfo.full_name = pinfo.first_name + " " + pinfo.middle_name + " " + pinfo.last_name;

  //set street address.

  for (var key1 in Content) {
    // skip loop if the property is from prototype
    //if (Content.hasOwnProperty(key1)) {

      var obj = Content[key1];
      for (var prop in obj) {
          // skip loop if the property is from prototype
          //if(obj.hasOwnProperty(prop)) {

            // your code
            var property_name = String(prop).toUpperCase();
            var property_const = obj[prop];
            var property_placeholder = "{" + String(prop) + "}";
            //Logger.log(String(prop));
            propertyUpdate(property_name, property_const,property_placeholder,doc,false);
          //}
      }
    //}
  }

  //getAllElements(body,1);
}
function lookUpPropert() {

}

function propertyUpdate(property_name, property_const,property_placeholder,doc) {
  var bookmark_ids = PropertiesService.getScriptProperties();
  var body = doc.getBody();
  var temp = body.findText(property_placeholder);
  var position = null;

  if(temp != null) {
    temp = temp.getElement();
    position = doc.newPosition(temp,0);
    temp.setText(property_const);
    Logger.log(temp);
    bookmark_ids.setProperty(property_name, doc.addBookmark(position).getId());
  } else if(bookmark_ids.getProperty(property_name) != null) {
    temp = bookmark_ids.getProperty(property_name);
    Logger.log(temp);
    position = doc.getBookmark(temp).getPosition();
    temp = position.getElement().getChild(0);
    Logger.log(temp);
    temp.setText(property_placeholder);
    //bookmark_ids.setProperty(property_name, doc.addBookmark(position).getId());
  }
}

function getAllElements(element,k) {
  if(element.getType() != DocumentApp.ElementType.TEXT) {
    for(var i = 0;i < element.getNumChildren();i++) {
      var currentElement = element.getChild(i);

      Logger.log("DEPTH: " + k);
      Logger.log("    Element "+ (i+1) + ": "+ currentElement.getType());
      getAllElements(currentElement,k+1);
    }
  }
}
如果我改变了我认为给我带来麻烦的那一行

temp.setText(property_placeholder);
将上面的语句更改为下面的语句将使脚本正常运行

temp.appendText(property_placeholder);
我也尝试过解决这个问题。用以下语句替换它,但它也无法正常运行

temp.clear();
temp.appendText();.
我想知道我是否能解决这个问题,使它正常运行,或者我是否做错了什么。提前谢谢。我已经寻找过类似问题的问题,但我没有发现任何问题

Logger.log首次运行时的输出:

[18-04-24 17:28:33:386 EDT] Text
[18-04-24 17:28:33:472 EDT] id.w0ss48exdha8
[18-04-24 17:28:33:480 EDT] Text
[18-04-24 17:28:33:547 EDT] id.2fgia2ykm2ll
[18-04-24 17:28:33:556 EDT] Text
[18-04-24 17:28:33:631 EDT] id.q935y6ouj0q
[18-04-24 17:28:33:640 EDT] Text
[18-04-24 17:28:33:708 EDT] id.xrizd1yc7i7h
[18-04-24 17:28:33:716 EDT] Text
[18-04-24 17:28:33:795 EDT] id.mkx1yvl8zw
[18-04-24 17:28:33:803 EDT] Text
[18-04-24 17:28:33:875 EDT] id.rzbgk2n8la5n
Logger.log输出第二次运行:

[18-04-24 17:29:14:051 EDT] id.w0ss48exdha8
[18-04-24 17:29:14:056 EDT] Text
[18-04-24 17:29:14:099 EDT] id.2fgia2ykm2ll
[18-04-24 17:29:14:103 EDT] Text
[18-04-24 17:29:14:146 EDT] id.q935y6ouj0q
[18-04-24 17:29:14:150 EDT] Text
[18-04-24 17:29:14:192 EDT] id.xrizd1yc7i7h
[18-04-24 17:29:14:196 EDT] Text
[18-04-24 17:29:14:239 EDT] id.mkx1yvl8zw
[18-04-24 17:29:14:243 EDT] Text
[18-04-24 17:29:14:287 EDT] id.rzbgk2n8la5n
[18-04-24 17:29:14:291 EDT] Text
此时,脚本中没有错误,但文档输出是错误的,即使书签ID与上一次运行中的ID匹配

Logger.log输出第三次运行:

[18-04-24 17:30:47:142 EDT] id.w0ss48exdha8
脚本抛出以下错误

TypeError: Cannot call method "getPosition" of null. (line 76, file "Code")

这很有意义,因为setText()在第二次运行时删除了第一个书签;但是,它仍然没有解释为什么文档输出在第二次运行时格式错误。第三次运行时抛出的错误将通过用占位符替换书签来修复,因此,它将运行查找占位符而不是书签。此过程将每运行两次脚本就重复一次。

我看到您尝试记录temps值。你能告诉我们记录了什么吗?刚刚用Logger.log输出编辑了这个问题
TypeError: Cannot call method "getPosition" of null. (line 76, file "Code")