This is a function from a Content Add-in looks for a specific customXMLPart in the document as a message from a TaskPane Add-in
Office.initialize = function(reason) { | |
// background thread checker | |
window.setInterval(() => { checkForPart(); }, 1000); | |
} | |
const ns = "http://pfe.microsoft.com/excelpoc/1.0"; | |
const xml = "<message xmlns='http://pfe.microsoft.com/excelpoc/1.0'>" + | |
"<sentby>[who]</sentby>" + | |
"<info>[data]</info>" + | |
"</message>"; | |
const from_tp = "TASKPANE ADD-IN"; | |
function checkForPart() { | |
Excel.run(function(context) { | |
/**@type {Excel.CustomXmlPartScopedCollection} */ | |
var customXmlParts = context.workbook.customXmlParts.getByNamespace(ns); | |
customXmlParts.load(); | |
return context.sync().then(function () { | |
if(customXmlParts.items.length > 0) { | |
/**@type {OfficeExtension.ClientResult<string>} */ | |
var xmlData = customXmlParts.items[0].getXml(); | |
context.sync().then(function() { | |
/**@type {DOMParser} */ | |
var parser = new window.DOMParser(); | |
/**@type {Document} */ | |
var xmlDoc = parser.parseFromString(xmlData.value, "text/xml"); | |
/**@type {Element} */ | |
var who = xmlDoc.getElementsByTagName("sentby")[0]; | |
/**@type {Element} */ | |
var data = xmlDoc.getElementsByTagName("info")[0]; | |
document.getElementById("message").innerText = who.innerHTML; | |
if(who.innerHTML == from_tp) { | |
// write tot he pane | |
var dt = new Date(); | |
var currentTime = pad(dt.getHours(),2) + ":" + pad(dt.getMinutes(),2) + ":" + pad(dt.getSeconds(),2); | |
// update a DIV on the page | |
document.getElementById("message").innerHTML = "<p>Message sent on " + | |
currentTime + | |
" by " + who.innerHTML + | |
" and the message is " + data.innerHTML; | |
// now we delete the part | |
customXmlParts.items[0].delete(); | |
return context.sync(); | |
} | |
}); | |
} | |
}); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment