【发布时间】:2023-01-11 15:42:35
【问题描述】:
我正在尝试使用 GAS 从 Gmail 正文中获取数据。具体来说,我收到一封包含表格内容的电子邮件;我正在尝试从 gmail 复制表格并将其写入 google 表格以供我进一步分析。以下是我收到的示例电子邮件:
更新:我可以通过参考Insert table from gmail to google spreadsheet by google script 对我的代码进行一些修改。
表格中的合并单元格会出现此问题。该代码不会像它在 gmail 正文中显示的那样生成输出。有什么解决方法吗?
最终代码:
var SEARCH_QUERY = "SearchKey";
function getEmailss_(q) {
var emails = [];
var threads = GmailApp.search(q);
if (threads.length == 0) {
console.log("No threads found that match the search query: " + q);
}
for (var i in threads) {
var msgs = threads[i].getMessages();
for (var j in msgs) {
var arrStr = msgs[j].getBody()
.replace(/<\/tr>/gm, '[/tr]')
.replace(/<\/td>/gm, '[/td]')
.replace(/<.*?>/g, '\n')
.replace(/^\s*\n/gm, '')
.replace(/^\s*/gm, '')
.replace(/\s*\n/gm, '\n')
.split("[/tr]");
if (arrStr.length == 1) {
console.log("No data found in thread: " + threads[i].getFirstMessageSubject());
}
var line = [];
for (var i = 0; i < arrStr.length - 1; i++) {
line = arrStr[i].split("[/td]");
line.length -= 1;
emails.push(line);
}
}
}
if (emails.length == 0) {
console.log("No emails found that match the search query: " + q);
}
return convert2ArrayToRectangular_(emails);
}
function convert2ArrayToRectangular_(array2d)
{
// get max width
var res = [];
var w = 0;
for (var i = 0; i < array2d.length; i++)
{
if (array2d[i].length > w) {w = array2d[i].length;}
}
var row = [];
for (var i = 0; i < array2d.length; i++)
{
row = array2d[i];
if(array2d[i].length < w)
{
for (var ii = array2d[i].length; ii < w; ii++)
{
row.push('');
}
}
res.push(row);
}
return res;
}
function appendData_(sheet, array2d) {
var h = array2d.length;
var l = array2d[0].length;
sheet.getRange(1, 1, h, l).setValues(array2d);
}
function saveEmailsss() {
var array2d = getEmailss_(SEARCH_QUERY);
if (array2d) {
appendData_(SpreadsheetApp.getActive().getSheetByName('Sheet1'), convert2ArrayToRectangular_(array2d));
}
markArchivedAsRead();
}
function markArchivedAsRead() {
var threads = GmailApp.search('label:inbox is:unread to:me subject:importnumberlist');
GmailApp.markThreadsRead(threads);
};
【问题讨论】:
-
不清楚顶部图像和底部图像之间有什么区别。请用文字描述表格设计规范。
-
请记住,Gmail 中的格式化邮件使用 HTML,而 Google 表格使用 SpreadsheetApp.Range 方法。
-
第一张图片是来自 Gmail 的预览。这是我如何收到电子邮件的示例。第二个是我希望如何将 Gmail 中的表格以不同的列和行拉入谷歌表格。
-
嗨 Lorena,已对我的问题进行了更改。是的,另一个问题在很大程度上有帮助;但现在遇到了一个新问题。请参考我更新的问题——如果你能指导在这方面可以做什么,那将非常有帮助
标签: google-apps-script google-sheets gmail html-email cell-formatting