This was just a script that I wrote to learn more about how to deal with Google Doc in Scripts
function onOpen()
{
DocumentApp.getUi().createMenu('My Tools')
.addItem('Looking Inside','lookingInside')
.addItem('Highlight Current Selection','highLightCurrentSelection')
.addItem('Add Row To Table','addRowToTable')
.addItem('Get Body Text','getBodyText')
.addItem('Get All Text','getAllText')
.addSeparator()
.addItem('Load Paragraph Sidebar','loadParagraphSidebar')
.addItem('Get Revision History','getRevisionHistory')
.addToUi();
}
function dispStuff(stuff,title,width,height)
{
var width=(typeof(width)!='undefined')?width:500;
var height=(typeof(height)!='undefined')?height:500;
var title=(typeof(title)!='undefined')?title:'Displaying Stuff';
DocumentApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(stuff).setWidth(width).setHeight(height), title);
}
function addRowToTable()
{
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var tablerow = body.getChild(34).asTable().appendTableRow();
var a=['Left Side','Right Side'];
for(var i=0;i<2;i++)
{
tablerow.appendTableCell(a[i]);
}
}
function getBodyText()
{
var doctext=DocumentApp.getActiveDocument().getBody().editAsText().getText();
var txt=HtmlService.createHtmlOutput(doctext);
DocumentApp.getUi().showModelessDialog(txt, 'Body Text')
}
function getAllText()
{
var doc=DocumentApp.getActiveDocument();
var hdr=doc.getHeader().editAsText().getText();
var bdy=doc.getBody().editAsText().getText();
var ftr=doc.getFooter().editAsText().getText();
var html=HtmlService.createHtmlOutput(hdr + bdy + ftr);
DocumentApp.getUi().showModelessDialog(html, 'Document Text')
}
function setListItemText()
{
var doc=DocumentApp.getActiveDocument();
var resp=DocumentApp.getUi().prompt('childIndex,newText', 'Enter childIndex,New Text', DocumentApp.getUi().ButtonSet.OK)
var a=resp.getResponseText().split(',');
var childIndex=a[0];
var newText=a[1];
doc.getBody().getChild(childIndex).asListItem().editAsText().setText(newText);
}
function idImageTest()
{
idImage(0,true);
}
function idImage(idx, up)
{
var up=(typeof(up)!='undefined')?up:true;
var doc=DocumentApp.getActiveDocument();
var images=doc.getBody().getImages();
var img=images[idx];
var parent=img.getParent();
var position=doc.newPosition(parent, 0);
doc.setCursor(position);
var w=img.getWidth();
var h=img.getHeight();
if(up)
{
img.setWidth(w/2);
img.setHeight(h/2);
}
else
{
Utilities.sleep(1000);
img.setWidth(w);
img.setHeight(h);
}
return idx;
}
function highLightBodyChildText(idx)
{
var doc=DocumentApp.getActiveDocument();
var child=doc.getBody().getChild(idx);
var position=doc.newPosition(child, 0);
doc.setCursor(position);
child.asText().editAsText().setBackgroundColor('#ffff00');
return idx;
}
function highLightHeaderChildText(idx)
{
var doc=DocumentApp.getActiveDocument();
var child=doc.getHeader().getChild(idx);
var position=doc.newPosition(child, 0);
doc.setCursor(position);
child.asText().editAsText().setBackgroundColor('#ffff00');
return idx;
}
function lowLightBodyChildText(idx)
{
Utilities.sleep(1000);
DocumentApp.getActiveDocument().getBody().getChild(idx).asText().editAsText().setBackgroundColor('#ffffff');
}
function lowLightHeaderChildText(idx)
{
Utilities.sleep(1000);
DocumentApp.getActiveDocument().getHeader().getChild(idx).asText().editAsText().setBackgroundColor('#ffffff');
}
function saveChildTableCellChanges(idx,rowidx,cellidx,text)
{
var doc=DocumentApp.getActiveDocument();
var child=doc.getBody().getChild(idx);
child.asTable().getRow(rowidx).getCell(cellidx).editAsText().setText(text);
}
function testnext()
{
setChildAttribute('FOREGROUND_COLOR',0,'#ff0000')
}
function setChildAttribute(key,idx,text){
var doc=DocumentApp.getActiveDocument();
var child=doc.getBody().getChild(idx);
var type=child.getType();
switch(type)
{
case DocumentApp.ElementType.PARAGRAPH:
var childattrs=child.asParagraph().getAttributes();
break;
case DocumentApp.ElementType.LIST_ITEM:
var childattrs=child.asListItem().getAttributes();
break;
case DocumentApp.ElementType.TEXT:
var childattrs=child.asText().getAttributes();
break;
case DocumentApp.ElementType.TABLE:
var childattrs=child.asTable().getAttributes();
break;
case DocumentApp.ElementType.TABLE_CELL:
var childattrs=child.asTableCell().getAttributes();
break;
default:
var childattrs=child.asText().getAttributes();
}
childattrs[key]=text;
switch(type)
{
case DocumentApp.ElementType.PARAGRAPH:
child.asParagraph().setAttributes(childattrs);
break;
case DocumentApp.ElementType.LIST_ITEM:
child.asListItem().setAttributes(childattrs);
break;
case DocumentApp.ElementType.TEXT:
child.asText().setAttributes(childattrs);
break;
case DocumentApp.ElementType.TABLE:
child.asTable().setAttributes(childattrs);
break;
case DocumentApp.ElementType.TABLE_CELL:
child.asTableCell().setAttributes(childattrs);
break;
default:
child.asText().setAttributes(childattrs);
}
var id='#childAttr' + key + idx;
var a=[];
a.push(id);
a.push(text);
a.push(type);
return a;
}
function setThisElementAttribute(key,idx,rowidx,cellidx,text)
{
var doc=DocumentApp.getActiveDocument();
var child=doc.getBody().getChild(idx);
var cellAttrs=child.asTable().getRow(rowidx).getCell(cellidx).editAsText().getAttributes();
cellAttrs[key]=text;
child.asTable().getRow(rowidx).getCell(cellidx).editAsText().setAttributes(cellAttrs);
var id='#Attr' + key + idx + rowidx + cellidx;
var a=[];
a.push(id);
a.push(text);
return a;
}
function setSelectedElementAttribute(key, idx, text)
{
var doc=DocumentApp.getActiveDocument();
var selection=doc.getSelection();
var selectedElements=selection.getRangeElements();
var el=selectedElements[idx].getElement();
var eltype=el.getType();
switch(eltype)
{
case DocumentApp.ElementType.TEXT:
var elattrs=el.asText().getAttributes();
break;
default:
var elattrs=el.asText().getAttributes();
break;
}
elattrs[key]=text;
switch(eltype)
{
case DocumentApp.ElementType.TEXT:
el.asText().setAttributes(elattrs);
break;
default:
el.asText().setAttributes(elattrs);
break;
}
var id='#elattr' + key + idx;
var a=[];
a.push(id);
a.push(text);
a.push(eltype);
return a;
}
function loadFile(filename,folderID)
{
var filename = (typeof(filename) !== 'undefined')? filename : 'SampleData';
var folderID = (typeof(folderID) !== 'undefined')? folderID : '0Bx2ds1-a4A5nMS1GRHh6N3NEQXc';
var fldr = DriveApp.getFolderById(folderID);
var file = fldr.getFilesByName(filename);
var s = '';
while(file.hasNext())
{
var fi = file.next();
var target = fi.getName();
if(target == filename)
{
s = fi.getBlob().getDataAsString();
}
}
return s;
}
function getRevisionHistory()
{
var s='';
var br='<br />';
var doc=DocumentApp.getActiveDocument();
var id=doc.getId();
var revisions=Drive.Revisions.list(id);
if (revisions.items && revisions.items.length > 0)
{
for (var i = 0; i < revisions.items.length; i++)
{
var revision = revisions.items[i];
var date = new Date(revision.modifiedDate);
s+=br + Utilities.formatString('ID: %s, Date: %s <a href="%s" target="_blank">Link</a>', revision.id, date.toLocaleString(), revision.selfLink);
//Logger.log('ID: %s, Date: %s', revision.id, date.toLocaleString());
}
}
else
{
//Logger.log('No revisions found.');
s+=br + 'No revisions found.';
}
if(s)
{
DocumentApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(s), 'Document History for ' + doc.getName());
}
}
function saveListItemChanges(idx,text)
{
DocumentApp.getActiveDocument().getBody().getChild(idx).asListItem().editAsText().setText(text)
}
function saveParagraphChanges(idx,text)
{
DocumentApp.getActiveDocument().getBody().getChild(idx).asParagraph().editAsText().setText(text);
}
function highLightCurrentSelection()
{
var conclusionStyle = {};
conclusionStyle[DocumentApp.Attribute.BACKGROUND_COLOR]='#ffffff';
conclusionStyle[DocumentApp.Attribute.FOREGROUND_COLOR]='#000000';
conclusionStyle[DocumentApp.Attribute.FONT_FAMILY]='Calibri';
conclusionStyle[DocumentApp.Attribute.FONT_SIZE]=20;
conclusionStyle[DocumentApp.Attribute.BOLD]=false;
conclusionStyle[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT]=DocumentApp.HorizontalAlignment.LEFT;
conclusionStyle[DocumentApp.Attribute.VERTICAL_ALIGNMENT]=DocumentApp.VerticalAlignment.BOTTOM;
conclusionStyle[DocumentApp.Attribute.LINE_SPACING]=1.5;
conclusionStyle[DocumentApp.Attribute.HEIGHT]=2;
conclusionStyle[DocumentApp.Attribute.LEFT_TO_RIGHT]=true;
var br = '<br />';
var selection = DocumentApp.getActiveDocument().getSelection();
var s='';
if(selection)
{
s+=br + '<strong>Elements in Current Selection</strong>';
var selectedElements = selection.getRangeElements();
for(var i=0;i<selectedElements.length;i++)
{
var selElem = selectedElements[i];
var el = selElem.getElement();
var isPartial = selElem.isPartial();
if(isPartial)
{
var selStart = selElem.getStartOffset();
var selEnd = selElem.getEndOffsetInclusive();
s+=br + 'isPartial:true selStart=' + selStart + ' selEnd=' + selEnd ;
var bgcolor = (el.asText().getBackgroundColor(selStart)=='#ffff00')?'#ffffff':'#ffff00';
el.asText().setBackgroundColor(selStart, selEnd, bgcolor)
}
else
{
var selStart = selElem.getStartOffset();
var selEnd = selElem.getEndOffsetInclusive();
s+=br + 'isPartial:false selStart=' + selStart + ' selEnd=' + selEnd ;
var bgcolor = (el.asText().getBackgroundColor()=='#ffff00')?'#ffffff':'#ffff00';
el.asText().setBackgroundColor(bgcolor);
}
var elType=el.getType();
s+=br + 'selectedElement[' + i + '].getType()= ' + elType;
if(elType==DocumentApp.ElementType.TEXT)
{
var txt = selElem.getElement().asText().getText();
var elattrs = el.getAttributes();
if(elattrs)
{
s+=br + 'Type:<strong>TEXT</strong>';
s+=br + 'Text:<span style="color:#ff0000">' + txt + '</span>';
s+=br + 'Length: ' + txt.length;
s+=br + '<div id="sel' + Number(i) + '" style="display:none;">';
for(var key in elattrs)
{
s+= br + '<strong>' + key + '</strong>' + ' = ' + elattrs[key];
s+=br + '<input type="text" value="' + elattrs[key] + '" id="elattr' + key + Number(i) + '" />';
s+=br + '<input id="elattrbtn' + Number(i) + '" type="button" value="Save Changes" onClick="setSelectedElementAttribute(\'' + key + '\',' + i + ');" />'
}
s+='</div><a href="#sel' + Number(i) + '" onClick="toggleDiv(\'sel' + Number(i) + '\')">Show/Hide</a>';
}
}
if(elType==DocumentApp.ElementType.PARAGRAPH)
{
var txt = selElem.getElement().asParagraph().getText();
var elattrs = el.getAttributes();
if(elattrs)
{
s+=br + '<strong>PARAGRAPH Attributes</strong>';
s+=br + 'Text:<span style="color:#ff0000">' + txt + '</span> Text Length= ' + txt.length;
for(var key in elattrs)
{
s+= br + key + ' = ' + elattrs[key];
}
}
}
s+='<hr width="100%"/>';
}
//var finalP=DocumentApp.getActiveDocument().getBody().appendParagraph('Total Number of Elements: ' + Number(selectedElements.length));
//finalP.setAttributes(conclusionStyle);
}
else
{
s+= br + 'No Elements found in current selection';
}
s+='<input type="button" value="Toggle HighLight" onclick="google.script.run.highLightCurrentSelection();"/>';
//s+='<input type="button" value="Exit" onClick="google.script.host.close();" />';
DocumentApp.getUi().showSidebar(HtmlService.createHtmlOutputFromFile('htmlToBody').append(s).setWidth(800).setHeight(450).setTitle('Selected Elements'));
}
function dispImage()
{
var html=HtmlService.createHtmlOutputFromFile('image');
DocumentApp.getUi().showModelessDialog(html, 'Display Image')
}
function findMyTables()
{
var doc=DocumentApp.getActiveDocument();
var body=doc.getBody();
var br='<br />';
var s='';
if(body)
{
var numChildren=body.getNumChildren();
for(var i=0;i<numChildren;i++)
{
var child=body.getChild(i);
if(child.getType()==DocumentApp.ElementType.TABLE)
{
s+=br + 'ChildIndex = ' + i;
s+=br + 'Cell[row index][column index] ';
var numrows = child.asTable().getNumRows();
for(var j=0;j<numrows;j++)
{
var numcells=child.asTable().getRow(j).getNumCells();
for(var k=0;k<numcells;k++)
{
var celltxt=child.asTable().getCell(j, k).editAsText().getText();
s+=br + '<strong>Cell[' + j + '][' + k + ']= </strong>' + '<span style="color:#ff0000;font-size:14px;font-weight:bold;">' + celltxt + '</span>';
}
}
}
}
}
var html=HtmlService.createHtmlOutput(s).setWidth(600).setHeight(450);
DocumentApp.getUi().showModelessDialog(html, 'My Tables')
}
function putParagraph(paraObject)
{
var text=paraObject.text;
var index=paraObject.childIndex;
if(text && index)
{
DocumentApp.getActiveDocument().getBody().insertParagraph(index, text);
return true;
}
else
{
DocumentApp.getUi().alert('Either the paragraph contents or the child Index was missing');
return false;
}
}
function loadParagraphSidebar()
{
var html=HtmlService.createHtmlOutputFromFile('InsertParagraph').setTitle('Insert Paragraph');
DocumentApp.getUi().showSidebar(html);
}
function getNumChildren()
{
return DocumentApp.getActiveDocument().getBody().getNumChildren();
}
function lookingInside()
{
var br = '<br />';
var s='';
var doc = DocumentApp.getActiveDocument();
var header = doc.getHeader();
if(header)
{
s+=br + '<h3>Document Header</h3>';
var headerchildren = header.getNumChildren();
if(headerchildren)
{
var headerattrs = header.getAttributes();
s+=br + '<strong>Header Attributes</strong>';
s+=br + '<div id="hdr1" style="display:none;">';
for(var key in headerattrs)
{
s+= br + key + ' = ' + headerattrs[key];
}
s+='</div><a href="#hdr1" onClick="toggleDiv(\'hdr1\')">Show/Hide</a>';
var headertxt=header.editAsText().getText();
var headertype=header.getType();
if(headertxt)
{
s+=br + '<strong>Header Type:</strong>' + headertype;
s+=br + '<strong>Header Text:</strong>';
s+=br + '<span style="color:#ff0000;font-size:14px;">' + headertxt + '</span>';
s+=br + '<strong>Text Length:' + headertxt.length + '</strong>';
}
else
{
s+=br + '<strong>Header Type: </strong>' + headertype;
s+=br + '<strong>No Header Text for this document.</strong>';
}
s+=br + '<strong>Number of Children = ' + headerchildren + '</strong>';
s+=br + '<strong>Header Children Types</strong>';
s+='<hr width="100%"/>';
for(var i=0;i<headerchildren;i++)
{
var child = header.getChild(i);
if(child)
{
var type = child.getType();
var childtxt = child.asText().getText();
if(childtxt)
{
s+=br + '<strong>' + 'Child[' + i + ']= ' + type + '</strong>';
s+=br + '<strong>' + 'Text = ' + '</strong>' + '<span style="color:#ff0000;font-size:14px;">' + childtxt + '</span>';
s+=br + '<strong>' + 'Text Length = ' + childtxt.length + '</strong>';
s+=br + '<input id="hdrchildfind' + i + '"type="button" value="Click to Find Text" onClick="hlHeaderChildText(' + i + ')" />';
}
else
{
s+=br + '<strong>' + 'Child[' + i + ']= ' + type + '</strong>';
s+=br + '<strong>No Header Child[' + i + '] text.</strong>'}
var childattrs = child.getAttributes();
if(childattrs)
{
s+= br + '<strong>Child[' + i + '] Attributes</strong>';
s+=br + '<div id="hdrchild' + i + '" style="display:none;">';
for(var key in childattrs)
{
s+=br + key + ' = ' + childattrs[key];
}
s+='</div><a href="#hdrchild' + i + '" onClick="toggleDiv(\'hdrchild' + i + '\')">Show/Hide</a>';
}
else
{
s+=br + '<strong>No Header Child[' + i + '] attributes.</strong>';
}
s+='<hr width="100%"/>';
}
else
{
s+=br + '<strong>No ' + i + 'th Header Child</strong>';
}
}
}
else
{
s+=br + '<strong>No Header Children in this header.</strong>';
}
}
else
{
s+=br + '<h3>No Header Element in this document</h3>';
}
var body = doc.getBody();
if(body)
{
s+=br + '<h3>Document Body</h3>';
var bodychldrn = body.getNumChildren();
if(bodychldrn)
{
var bodyattrs = body.getAttributes();
if(bodyattrs)
{
s+=br + '<strong>Body Attributes</strong>';
s+=br + '<div id="bdy1" style="display:none;">';
for(var key in bodyattrs)
{
s+= br + key + ' = ' + bodyattrs[key];
}
s+='</div><a href="#bdy1" onClick="toggleDiv(\'bdy1\')">Show/Hide</a>';
}
else
{
s+=br + '<strong>No Body Attributes</strong>';
}
var bodytxt = body.editAsText().getText();
if(bodytxt)
{
s+=br + '<strong>Body Text:</strong>';
s+=br + '<span style="color:#ff0000;font-size:14px;">' + body.editAsText().getText() + '</span>';
s+=br + '<strong>Text Length = </strong>' + body.editAsText().getText().length;
s+=br + '<strong>Number of Children = ' + bodychldrn + '</strong>';
s+=br + '<strong>Body Children Types</strong>';
}
else
{
s+=br + '<strong>No Body Text</strong>';
}
s+='<hr width="100%"/>';
for(var i=0;i<bodychldrn;i++)
{
var child = body.getChild(i);
if(child)
{
var type = child.getType();
var childtxt = child.asText().getText();
if(childtxt)
{
s+=br + '<strong>' + 'Child[' + i + ']= ' + type + '</strong>';
s+=br + '<strong>' + 'Text = ' + '</strong>' + '<span style="color:#ff0000;font-size:14px;">' + childtxt + '</span>';
s+=br + '<strong>' + 'Text Length = ' + childtxt.length + '</strong>';
s+=br + '<input id="txtfind' + i + '"type="button" value="Click to Find Text" onClick="hlBodyChildText(' + i + ')" />';
}
else
{
s+=br + '<strong>' + 'Child[' + i + ']= ' + type + '</strong>';
s+=br + '<strong>No text in body child[' + i + '].</strong>';
}
switch(type)
{
case DocumentApp.ElementType.PARAGRAPH:
var childattrs=child.asParagraph().getAttributes();
break;
case DocumentApp.ElementType.LIST_ITEM:
var childattrs=child.asListItem().getAttributes();
break;
case DocumentApp.ElementType.TEXT:
var childattrs=child.asText().getAttributes();
break;
case DocumentApp.ElementType.TABLE:
var childattrs=child.asTable().getAttributes();
break;
case DocumentApp.ElementType.TABLE_CELL:
var childattrs=child.asTableCell().getAttributes();
break;
default:
var childattrs=child.asText().getAttributes();
}
if(childattrs)
{
s+= br + '<strong>Child[' + i + '] Attributes</strong>';
s+=br + '<div id="bdychild' + i + '" style="display:none;">';
for(var key in childattrs)
{
s+=br + '<strong>' + key + '</strong>' + ' = ' + childattrs[key];
s+=br + '<input type="text" value="' + childattrs[key] + '" id="childAttr' + key + Number(i) + '" />';
s+=br + '<input id="childattrbtn' + Number(i) + '" type="button" value="Save Changes" onClick="setChildAttribute(\'' + key + '\',' + i + ');" />'
}
s+='</div><a href="#bdychild' + i + '" onClick="toggleDiv(\'bdychild' + i + '\')">Show/Hide</a>';
}
else
{
s+=br + '<strong>No child attributes for child[' + i + '].</strong>';
}
//s+='<hr width="100%"/>';
if(type==DocumentApp.ElementType.TABLE)
{
var numrows = child.asTable().getNumRows();
for(var j=0;j<numrows;j++)
{
var numcells=child.asTable().getRow(j).getNumCells();
for(var k=0;k<numcells;k++)
{
var celltxt=child.asTable().getRow(j).getCell(k).editAsText().getText();
var cellAttrs=child.asTable().getRow(j).getCell(k).editAsText().getAttributes();
if(cellAttrs)
{
s+= br + '<strong>Child[' + i + '] ' + 'Row[' + j + ']' + ' Cell[' + k + ']' + ' Attributes</strong>';
s+=br + '<div id="cell' + Number(i) + Number(j) + Number(k) + '" style="display:none;">';
for(var key in cellAttrs)
{
s+=br + '<strong>' + key + '</strong>' + ' = ' + cellAttrs[key];
s+=br + '<input type="text" value="' + cellAttrs[key] + '" id="Attr' + key + Number(i) + Number(j) + Number(k) + '" />';
s+=br + '<input id="cellattrbtn' + Number(i) + Number(j) + Number(k) + '" type="button" value="Save Changes" onClick="setThisElementAttribute(\'' + key + '\',' + i + ',' + j + ',' + k + ');" />'
}
s+='</div><a href="#cell' + Number(i) + Number(j) + Number(k) + '" onClick="toggleDiv(\'cell' + Number(i) + Number(j) + Number(k) + '\')">Show/Hide</a>';
}
else
{
s+=br + '<strong>No child attributes for cell' + Number(i) + Number(j) + Number(k) + '.</strong>';
}
//s+=br + '<strong>Cell[' + j + '][' + k + ']= </strong>' + '<span style="color:#ff0000;font-size:14px;font-weight:bold;">' + celltxt + '</span>';
s+=br + '<strong>Cell[' + j + '][' + k + '] </strong>' + '<input id="celltxt' + i + '-' + j + '-' + k + '" type="text" value="' + celltxt + '" size="25"/>';
s+=br + '<input id="cellbtn' + j + '-' + k + '" type="button" value="' + 'Save Changes' + '" onClick="saveChildTableCellChanges(' + i + ',' + j + ',' + k + ');" />';
s+='<hr width="100%"/>';
}
}
s+='<hr width="100%"/>';
}
if(type==DocumentApp.ElementType.LIST_ITEM)
{
var listItemTxt=child.asListItem().editAsText().getText();
s+=br + '<input id="listItemTxt' + i + '" type="text" value="' + listItemTxt + '" size="25" />';
s+=br + '<input id="listItemBtn' + i + '" type="button" value="' + 'Save Changes' + '"onClick="saveListItemChanges(' + i + ');" />';
}
if((type==DocumentApp.ElementType.PARAGRAPH))
{
s+=br + '<input id="paraTxt' + i + '" type="text" value="' + childtxt + '" size="25" />';
s+=br + '<input id="paraBtn' + i + '" type="button" value="' + 'Save Changes' + '"onClick="saveParagraphChanges(' + i + ');" />';
}
s+='<hr width="100%"/>';
}
else
{
s+=br + '<strong>No ' + i + 'th Child in this document body.</strong>';
}
}
}
else
{
s+=br + '<strong>No Body Children in this document.</strong>';
}
var images=body.getImages();
if(images)
{
s+=br + '<strong>Body Images</strong>' + br + '<strong>Number of Images: </strong> ' + images.length;
s+='<hr width="100%"/>';
for(var i=0;i<images.length;i++)
{
var imgattrs=images[i].getAttributes();
if(imgattrs)
{
s+=br + '<strong>Image[' + i + ']: Attributes</strong>';
for(var key in imgattrs)
{
s+=br + '<strong>' + key + '</strong>= ' + imgattrs[key];
}
}
else
{
s+=br + '<strong>No image attributes for Image[' + i + ']';
}
s+=br + '<input id="imgfind' + i + '" type="button" value="Click to Find Image" onClick="shoot(' + i + ');" />';
s+='<hr width="100%"/>';
}
}
else
{
s+=br + '<strong>No Images in this Body element.</strong>';
}
}
else
{
s+=br + '<strong>No body in this document.</strong>';
}
var footer = doc.getFooter();
if(footer)
{
s+=br + '<h3>Document Footer</h3>';
var footerattrs = footer.getAttributes();
if(footerattrs)
{
s+=br + '<strong>Footer Attributes</strong>';
s+=br + '<div id="ftr1" style="display:none;">';
for(var key in footerattrs)
{
s+= br + key + ' = ' + footerattrs[key];
}
s+='</div><a href="#ftr1" onClick="toggleDiv(\'footer1\')">Show/Hide</a>';
}
else
{
s+=br + '<strong>No footer attributes for the footer in this document.</strong>';
}
var footertxt=footer.editAsText().getText();
var footertype=footer.getType();
if(footertxt)
{
s+=br + '<strong>Footer Type: </strong>' + footertype;
s+=br + '<strong>Footer Text: </strong>';
s+=br + '<span style="color:#ff0000;font-size:14px;">' + footertxt + '</span>';
}
else
{
s+=br + '<strong>Footer Type: </strong>' + footertype;
s+=br + '<strong>No Footer Text</strong>';
}
var footerchildren = footer.getNumChildren();
s+='<hr width="100%"/>';
if(footerchildren)
{
s+=br + '<strong>Number of Children = ' + footerchildren + '</strong>';
s+=br + '<strong>Footer Children Types</strong>';
for(var i=0;i<footerchildren;i++)
{
var child = footer.getChild(i);
var type = child.getType();
var childtxt = child.asText().getText();
if(childtxt)
{
s+=br + '<strong>' + 'Child[' + i + ']= ' + type + '</strong>';
s+=br + '<strong>' + 'Text = ' + '</strong>' + '<span style="color:#ff0000;font-size:14px;">' + childtxt + '</span>';
s+=br + '<strong>' + 'Text Length = ' + childtxt.length + '</strong>';
}
else
{
s+=br + '<strong>' + 'Child[' + i + ']= ' + type + '</strong>';
s+='<strong>No Footer Child[' + i + '] text.</strong>';
}
var childattrs = child.getAttributes();
if(childattrs)
{
s+= br + '<strong>Child[' + i + '] Attributes</strong>';
s+=br + '<div id="ftrchild' + i + '" style="display:none;">';
for(var key in childattrs)
{
s+=br + '<strong>' + key + '</strong>' + ' = ' + childattrs[key];
}
s+='</div><a href="#ftrchild' + i + '" onClick="toggleDiv(\'ftrchild' + i + '\')">Show/Hide</a>';
}
else
{
s+=br + '<strong>No Footer Child[' + i + '] attributes.</strong>';
}
s+='<hr width="100%"/>';
}
}
else
{
s+=br + '<strong>No Footer children for the footer in this document.</strong>';
}
}
else
{
s+=br + '<h3>No Footer Element in this Document</h3>';
}
s+='<input type="button" value="Exit" onClick="google.script.host.close();" />';
var html=HtmlService.createHtmlOutputFromFile('htmlToBody').setTitle('Looking Inside').setWidth(500).setHeight(450);
DocumentApp.getUi().showSidebar(html.append(s));
}
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function toggleDiv(id) {
var div = document.getElementById(id);
div.style.display = div.style.display == "none" ? "block" : "none";
}
function shoot(i) {
google.script.run.withSuccessHandler(reBound).idImage(i);
}
function reBound(i) {
google.script.run.idImage(i, false);
}
function hlHeaderChildText(idx){
google.script.run.withSuccessHandler(llHeaderChildText).highLightHeaderChildText(idx);
}
function llHeaderChildText(idx){
google.script.run.lowLightHeaderChildText(idx);
}
function hlBodyChildText(idx) {
google.script.run.withSuccessHandler(llBodyChildText).highLightBodyChildText(idx);
}
function llBodyChildText(idx) {
google.script.run.lowLightBodyChildText(idx);
}
function saveChildTableCellChanges(idx, rowidx, cellidx) {
var str = '#celltxt' + idx + '-' + rowidx + '-' + cellidx;
var text = $(str).val();
google.script.run.saveChildTableCellChanges(idx, rowidx, cellidx, text);
}
function setChildAttribute(key, idx){
var str='#childAttr' + key + Number(idx);
var text = $(str).val();
$(str).css('background-color','#ffffff');
google.script.run
.withSuccessHandler(updateChildAttribute)
.setChildAttribute(key,idx,text);
console.log(key + ',' + text);
}
function updateChildAttribute(a){
var id=a[0];
var text=a[1];
var type=a[2];
console.log(id + ',' + text + ',' + type)
$(id).val(text);
$(id).css('background-color','#ffff00');
}
function setThisElementAttribute(key,idx, rowidx, cellidx){
var str='#Attr' + key + idx + rowidx + cellidx;
var text = $(str).val();
google.script.run
.withSuccessHandler(updateThisElementAttributeValue)
.setThisElementAttribute(key,idx,rowidx,cellidx,text);
}
function updateThisElementAttributeValue(a){
var id=a[0];
var text=a[1];
$(id).val(text);
}
function setSelectedElementAttribute(key, idx){
var str='#elattr' + key + Number(idx);
var text = $(str).val();
$(str).css('background-color','#ffffff');
google.script.run
.withSuccessHandler(updateSelectedElementAttribute)
.setSelectedElementAttribute(key,idx,text);
console.log(key + ',' + text);
}
function updateSelectedElementAttribute(a){
var id=a[0];
var text=a[1];
var type=a[2];
console.log(id + ',' + text + ',' + type)
$(id).val(text);
$(id).css('background-color','#ffff00');
}
function saveListItemChanges(idx)
{
var str='#listItemTxt' + idx;
var text=$(str).val();
google.script.run.saveListItemChanges(idx,text);
}
function saveParagraphChanges(idx)
{
var str='#paraTxt' + idx;
var text=$(str).val();
google.script.run.saveParagraphChanges(idx,text);
}
console.log('My Code');
</script>
</head>
<body width="100%">
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function() {
$('#txt1').val('');
google.script.run
.withSuccessHandler(populateOptions)
.getNumChildren();
});
function sendText()
{
var index=$('#idx1').val();
var txt=$('#txt1').val();
$('#txt1').css('background-color','#ffff00');
google.script.run
.withSuccessHandler(clearText)
.putParagraph({'text':txt,'childIndex':index});
}
function clearText()
{
$('#txt1').val('');
$('#txt1').css('background-color','#ffffff');
}
function populateOptions(max)
{
var max=(typeof(max)!='undefined')?max:10;
var min = 1;
var select = document.getElementById('idx1');
for (var i = min; i<=max; i++)
{
var opt = document.createElement('option');
opt.value = i;
opt.innerHTML = i;
select.appendChild(opt);
}
}
console.log("My code");
</script>
</head>
<body>
<br />Index:<select id='idx1'><option value="0">0</option></select>
<br />Text:<br /><textarea id="txt1" rows="12" cols="35"></textarea>
<br /><input id="btn1" type="button" value="submit" onClick="sendText();" />
</body>
</html>