我想在我的谷歌Apps脚本删除HTML格式。 我目前搜索电子邮件和打印结果到谷歌电子表格。 我想知道,如果有一种方法来替代text.I我知道正则表达式,但我不认为它的工作原理与getBody功能。
我真的很感激一些反馈或在这个问题上有所帮助。
码:
function Search() {
var sheet = SpreadsheetApp.getActiveSheet();
var row = 2;
// Clear existing search results
sheet.getRange(2, 1, sheet.getMaxRows() - 1, 4).clearContent();
// Which Gmail Label should be searched?
var label = sheet.getRange("F3").getValue();
// Get the Regular Expression Search Pattern
var pattern = sheet.getRange("F4").getValue();
// Retrieve all threads of the specified label
var threads = GmailApp.search("in:" + label);
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var m = 0; m < messages.length; m++) {
var msg = messages[m].getBody();
// Does the message content match the search pattern?
if (msg.search(pattern) !== -1) {
// Print the message subject
sheet.getRange(row,3).setValue(messages[m].getBody());
替换此:
// Print the message subject
sheet.getRange(row,3).setValue(messages[m].getBody());
有了这个:
// Print the message subject
sheet.getRange(row,3).setValue(getTextFromHtml(messages[m].getBody()));
该getTextFromHtml()
函数是改编自这个答案 ,增加处理的一些基本格式(编号和要点列表,段落标记)。
function getTextFromHtml(html) {
return getTextFromNode(Xml.parse(html, true).getElement());
}
var _itemNum; // Used to lead unordered & ordered list items.
function getTextFromNode(x) {
switch(x.toString()) {
case 'XmlText': return x.toXmlString();
case 'XmlElement':
var name = x.getName().getLocalName();
Logger.log(name);
var pre = '';
var post = '';
switch (name) {
case 'br':
case 'p':
pre = '';
post = '\n';
break;
case 'ul':
pre = '';
post = '\n';
itemNum = 0;
break;
case 'ol':
pre = '';
post = '\n';
_itemNum = 1;
break;
case 'li':
pre = '\n' + (_itemNum == 0 ? ' - ' : (' '+ _itemNum++ +'. '));
post = '';
break;
default:
pre = '';
post = '';
break;
}
return pre + x.getNodes().map(getTextFromNode).join('') + post;
default: return '';
}
}
从这样的回答: 谷歌Apps脚本-提取从Gmail数据到电子表格
您可以通过简单地使用getPlainBody()完全放弃了getTextFromHTML功能; 代替getBody();.