Google apps script 使用更改日志数据创建阵列并通过电子邮件发送
我想创建一个脚本,定期收集有关电子表格更改的信息,并通过电子邮件发送(例如,每4小时发送一次) 在其他教程的帮助下,我能够创建这样一个脚本:Google apps script 使用更改日志数据创建阵列并通过电子邮件发送,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我想创建一个脚本,定期收集有关电子表格更改的信息,并通过电子邮件发送(例如,每4小时发送一次) 在其他教程的帮助下,我能够创建这样一个脚本: function grabData(){ var ss = SpreadsheetApp.getActiveSpreadsheet() var sheet = ss.getActiveSheet() var cell = ss.getActiveCell(); var time = Utilities.formatDate(new Date
function grabData(){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getActiveSheet()
var cell = ss.getActiveCell();
var time = Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'dd-MM-yyyy')+' at '+Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'hh:mm');;
var dataUser1 = PropertiesService.getScriptProperties().getProperty('contentUser1');
if(dataUser1==null){dataUser1=''};
dataUser1+='\nSheet ' +sheet.getName()+' cell '+cell.getA1Notation()+' has been modify at '+time+' (new value = '+cell.getValue()+')';
PropertiesService.getScriptProperties().setProperty('contentUser1',dataUser1);
}
function sendReport(){
var dataUser1 = PropertiesService.getScriptProperties().getProperty('contentUser1');
if(dataUser1.length >1) {
MailApp.sendEmail('example@email.com', 'Update of Online orders ', dataUser1);
PropertiesService.getScriptProperties().setProperty('contentUser1','');
}
}
但是,dataUser1
出现“值太大”错误
我还尝试构建一个数组来存储每个更改的值描述:
function grabDataTemp()
{
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getActiveSheet()
var cell = ss.getActiveCell();
var time = Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'dd-MM-yyyy')+' at '+Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'hh:mm');;
var changeLog =[];
var logLength=changeLog.length;
if (logLength == null)
{
changeLog [0] ='\nSheet ' +sheet.getName()+' cell '+cell.getA1Notation()+' has been modify at '+time+' (new value = '+cell.getValue()+')';
changeLog [1]="";
}
changeLog [logLength+1] = ('\nSheet ' +sheet.getName()+' cell '+cell.getA1Notation()+' has been modify at '+time+' (new value = '+cell.getValue()+')');
return changeLog
}
function sendReportTemp(changeLog)
{
if(changeLog.length >1)
{
MailApp.sendEmail('example@email.com', 'Update of Online orders changeLog-TRIAL ', changeLog)
changeLog = [];
}
}
不幸的是,这似乎也不是一个好的解决方案。是否可以使用数组以某种方式完成此操作?请检查您是否超过中给出的配额或限制 您可以选择在发送电子邮件时使用服务。该服务允许用户发送电子邮件,并完全控制电子邮件内容,其唯一目的是发送电子邮件 请尝试浏览文档,以获取有关可用方法的更详细信息以及可以尝试的示例代码
除此之外,您还可以检查。这可能也有帮助。请检查您是否超过了中给出的配额或限制 您可以选择在发送电子邮件时使用服务。该服务允许用户发送电子邮件,并完全控制电子邮件内容,其唯一目的是发送电子邮件 请尝试浏览文档,以获取有关可用方法的更详细信息以及可以尝试的示例代码
除此之外,您还可以检查。这可能也有帮助。您的第一个使用scriptProperties的解决方案确实受到这些属性可以具有的字符串长度的限制 工作表解决方案应该可行,我建议编写一个脚本,将工作表内容转换为html表,使其更具可读性 在一列中为每个更改使用一行,以使下面的代码在没有任何更改的情况下工作 代码示例:
function sendReport(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var errorMsg = ss.getDataRange().getValues();
var message = '<body><div style="font-family:arial,sans;font-size:12pt"><p>Change report</p>';
message+= '<table style="background-color:#fafafa;border-collapse:collapse;font-family:arial,sans;font-size:9pt;" border = 1 cellpadding = 5>';
message+='<tr valign="top" bgcolor="#FFA" cellpadding=5><th>Number</th><th>description</th></tr>';
var c = 1;//counter
for(var n=0;n<errorMsg.length;n++){
message+='<tr><td align="center">'+c+'</td><td>';
message+=errorMsg[n][0]+'</td></tr>';
c++;
}
message+='</table></body>'
var hh = 100+35*errorMsg.length;
if(hh>500){hh=500};
var render = HtmlService.createHtmlOutput(message).setWidth(940).setHeight(hh);
SpreadsheetApp.getUi().showModelessDialog(render, "preview");
MailApp.sendEmail(Session.getActiveUser().getEmail(),'change log','HTML ONLY',{'htmlBody':message})
}
函数sendReport(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var errorMsg=ss.getDataRange().getValues();
风险值消息=“变更报告””;
消息+='';
消息+='Numberdescription';
var c=1;//计数器
对于(var n=0;n500){hh=500};
var render=HtmlService.createHtmlOutput(message).setWidth(940).setHeight(hh);
SpreadsheetApp.getUi().showModelessDialog(呈现“预览”);
MailApp.sendEmail(Session.getActiveUser().getEmail(),'change log','HTML ONLY',{'htmlBody':message})
}
您的第一个使用scriptProperties的解决方案确实受到这些属性可以具有的字符串长度的限制 工作表解决方案应该可行,我建议编写一个脚本,将工作表内容转换为html表,使其更具可读性 在一列中为每个更改使用一行,以使下面的代码在没有任何更改的情况下工作 代码示例:
function sendReport(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var errorMsg = ss.getDataRange().getValues();
var message = '<body><div style="font-family:arial,sans;font-size:12pt"><p>Change report</p>';
message+= '<table style="background-color:#fafafa;border-collapse:collapse;font-family:arial,sans;font-size:9pt;" border = 1 cellpadding = 5>';
message+='<tr valign="top" bgcolor="#FFA" cellpadding=5><th>Number</th><th>description</th></tr>';
var c = 1;//counter
for(var n=0;n<errorMsg.length;n++){
message+='<tr><td align="center">'+c+'</td><td>';
message+=errorMsg[n][0]+'</td></tr>';
c++;
}
message+='</table></body>'
var hh = 100+35*errorMsg.length;
if(hh>500){hh=500};
var render = HtmlService.createHtmlOutput(message).setWidth(940).setHeight(hh);
SpreadsheetApp.getUi().showModelessDialog(render, "preview");
MailApp.sendEmail(Session.getActiveUser().getEmail(),'change log','HTML ONLY',{'htmlBody':message})
}
函数sendReport(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var errorMsg=ss.getDataRange().getValues();
风险值消息=“变更报告””;
消息+='';
消息+='Numberdescription';
var c=1;//计数器
对于(var n=0;n500){hh=500};
var render=HtmlService.createHtmlOutput(message).setWidth(940).setHeight(hh);
SpreadsheetApp.getUi().showModelessDialog(呈现“预览”);
MailApp.sendEmail(Session.getActiveUser().getEmail(),'change log','HTML ONLY',{'htmlBody':message})
}
您知道是什么原因导致了错误吗?是有人在单元格中粘贴了大量文本还是导入了csv之类的内容?记录了很多更改。当记录了大约84个事件时发生错误。字符总数9170您知道是什么原因导致了错误吗?是有人在单元格中粘贴了大量文本还是导入了csv之类的东西?记录了很多更改。当记录了大约84个事件时发生错误。字符总数9170