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")