我有用于从Gmail提取数据并将其传递给Google工作表的代码。
请找到代码。
对我来说,问题是,整个数据仅被复制到第一行。
Gmail message:
UserName ID
XXX 23
YYY 45
我在Google工作表中得到的是: 第一行(A1)本身中的所有3 * 4表格式内容。
我需要将此信息附加在单独的单元格中,而不是在单个单元格中。
答案 0 :(得分:1)
您没有指定要进入的单元格,因此将以下代码始终附加到单元格A1中(极其低效)。
function addToDo() {
var label = GmailApp.getUserLabelByName("Samples");
var threads = label.getThreads();
var sheet = SpreadsheetApp.getActiveSheet();
var body = [];
for(var i=0;i<threads.length; i++){
body[body.length] = [threads[i].getMessages()[0].getPlainBody()]; //add to array in google app scripts
}
sheet.getRange(1,1,body.length,1).setValues(body); //dump array all at once to google sheets
}
请阅读此资源,因为它可以帮助您避免在与Google表格相关的GAS(Google应用程序脚本)代码中犯下更严重的错误。第一个不好的例子正是您要尝试做的。
https://developers.google.com/apps-script/guides/support/best-practices
答案 1 :(得分:1)
您的代码存在以下问题:它会将单个对象作为单元插入,并且效率低下。
您应该获取所有数据并立即进行设置。这使Google可以执行更高效的批量操作。
此外,如果要在多列中插入数据,则需要将其分开并将每列作为一个对象放置(在我的示例中为data
)。
function myFunction() {
var label = GmailApp.getUserLabels()[0];
var threads = label.getThreads();
var sheet = SpreadsheetApp.getActiveSheet();
var data = [];
for (var i=0; i<threads.length; i++) {
var threadId = threads[i].getId();
var firstmessage = threads[i].getMessages()[0];
var subject = firstmessage.getSubject();
var body = firstmessage.getPlainBody();
data.push([threadId, subject, body]); //Change this to have the columns you want
}
sheet.getRange(sheet.getDataRange().getLastRow(), 1, data.length, data[0].length).setValues(data);
}