2013-12-17 3 views
1

Я получаю свой баланс текущего счета, отправленный мне по электронной почте один раз в день. Я хочу использовать Google Apps Script, чтобы вытащить баланс из сообщения электронной почты и подключить его к моей электронной таблице с текущим счетом. Я новичок в кодировании, но до сих пор я понял, как сделать следующее, что заставляет меня журнал HTML код правильного сообщения электронной почты:Скопируйте определенный текст из электронного сообщения в электронную таблицу

function myFunction() { 
var thread = GmailApp.getUserLabelByName("CHK BAL").getThreads(0,1)[0]; // get first thread in inbox 
var message = thread.getMessages()[0]; // get first message 
Logger.log(message.getBody()); // log contents of the body 
} 

Однако, так как этот метод возвращает HTML-код для сообщения электронной почты, а не фактического текста сообщения, он не содержит номер баланса, который отображается в самом электронном письме.

Я попытался заменить getPlainBody вместо getBody, но он возвращает нулевое значение в журнале.

Вопрос, который здесь размещается, - это в основном мой вопрос (Google script that find text in my gmail and adds it to a spreadsheet?), но даже с ответом Могсдада и полезными ссылками я не смог понять, что происходит не так.

Может ли кто-нибудь помочь перенаправить меня на то, как получить содержимое электронной почты вместо нулевого значения?

(После того, как это было решено, я не могу сказать, что ссылка на другой ответ Могсдада очень понятна о том, как идентифицировать валюту и скопировать ее в электронную таблицу, но, конечно, я еще не смог поиграть в нее так как я даже не могу получить доступ к контенту.)

Спасибо!


EDIT 1

ответ знакомства для Serge ниже для получения инструкций о том, как разобрать HTML. Я использовал эти функции, чтобы захватить текст самой последней электронной почты с балансом банковского счета от метки/фильтра Gmail и отбросить его в ячейку моей электронной таблицы.

Тогда я был в состоянии использовать следующее уравнение в соседней ячейке, чтобы лишить его до определенного количества валюты:

левый (правый (A5, LEN (A5) -find («$», А5)), FIND (CHAR (10), RIGHT (A5, LEN (A5) -FIND ("$", A5))) 1) +0

Конечно, это работает для меня, потому что номер валюты всегда которому предшествует $ (первый, а в моем случае - только $, чтобы появиться в тексте) и всегда следует CHAR (10). Любой, кто пытается применить эту формулу, нуждается в такой же согласованности до и после значения, которое они хотят изолировать.

+0

Я не уверен, почему вы вызвали меня в этом вопросе, так как я не имел никакого отношения к [этому вопросу] (http: // stackoverflow.ком/вопросы/4862827/как-делает-один-найти-валюты-значение-в-а-строки). Я думаю, вам нужно немного отредактировать это. Не могли бы вы предоставить обновленную версию HTML, которую вы получаете? Было бы полезно увидеть содержимое и теги вокруг баланса. – Mogsdad

+0

Привет, Могсдад, мои извинения. Я вставил ссылку на неправильный пост выше (в моем оригинале). С тех пор я исправил его как правильный пост. Тем временем ответ Сержа привел меня туда, где я должен был быть. Спасибо вам обоим. У меня есть имя пользователя без имени (не знаю, как это произошло в процессе регистрации), но вы и Серж ответили на несколько десятков моих вопросов за последние две недели с тех пор, как я начал с GAS, как с помощью прямых ответов, так и с помощью многих, многие опубликованные ответы. Спасибо за вашу помощь! – duck

ответ

2

Вы можете попробовать этот фрагмент кода originally written by Corey G on SO, чтобы получить текст из содержимого html. Я использую его довольно часто, и это хорошо работает большую часть времени :) (Спасибо Corey)

function getTextFromHtml(html) { 
    return getTextFromNode(Xml.parse(html, true).getElement()); 
} 


function getTextFromNode(x) { 
    switch(x.toString()) { 
    case 'XmlText': return x.toXmlString(); 
    case 'XmlElement': return x.getNodes().map(getTextFromNode).join(''); 
    default: return ''; 
    } 
} 

А функция тест, чтобы попробовать:

function test(){ 
    var html = GmailApp.getInboxThreads()[0].getMessages()[0].getBody(); 
    throw(getTextFromHtml(html)); 
} 
+0

Золотой! Спасибо, Серж. Работает красиво. Я могу получить текст из своей электронной почты и поместить его в ячейку. Оттуда я выяснил, как изолировать значение валюты, используя формулу в соседней ячейке. Не могу вас поблагодарить. Моя настройка действительно классная :) Для всех, кто хотел бы выделить значение валюты из кучи текста, я отредактировал исходный пост выше. Еще раз спасибо Серж! – duck

0

Как почему getPlainBody() возвращает нуль , это, скорее всего, связано с ошибкой в ​​Google Apps Script. Вопрос был подан в https://code.google.com/p/google-apps-script-issues/issues/detail?id=3980.

От этой темы: «Похоже, что затронутые сообщения содержат HTML в своем содержании. Возможное обходное решение предполагает использование getBody() вместо getPlainBody() и разбора через HTML напрямую».

Смежные вопросы