function sendWeeklyReport() {
const CONFIG = {
spreadsheetId: 'ВАШ_ID_ТАБЛИЦЫ',
sheetName: 'Dashboard',
recipients: ['your-email@company.com', 'team@company.com'],
subjectPrefix: 'Еженедельный отчет по SEO и контексту',
timezone: Session.getScriptTimeZone() || 'Europe/Moscow',
dateFormat: "dd.MM.yyyy"
};
try {
const ss = SpreadsheetApp.openById(CONFIG.spreadsheetId);
const sheet = ss.getSheetByName(CONFIG.sheetName);
if (!sheet) throw new Error(`Лист "${CONFIG.sheetName}" не найден`);
const lastRow = sheet.getLastRow();
const lastCol = sheet.getLastColumn();
if (lastRow === 0 || lastCol === 0) throw new Error('Нет данных на дашборде');
// Читаем весь дашборд
const data = sheet.getRange(1, 1, lastRow, lastCol).getValues();
// Простейшие форматтеры (при желании можно расширить)
const formatCell = (value) => {
if (value == null) return '';
if (value instanceof Date) {
return Utilities.formatDate(value, CONFIG.timezone, CONFIG.dateFormat);
}
// Числа оставим как есть; альтернативно: Number(value).toLocaleString('ru-RU')
return String(value);
};
const chunks = [];
chunks.push('<table border="1" style="border-collapse:collapse;font-family:Arial,sans-serif;font-size:12px">');
for (const row of data) {
chunks.push('<tr>');
for (const cell of row) {
chunks.push(`<td style="padding:6px;vertical-align:top">${formatCell(cell)}</td>`);
}
chunks.push('</tr>');
}
chunks.push('</table>');
const htmlTable = chunks.join('');
const today = Utilities.formatDate(new Date(), CONFIG.timezone, CONFIG.dateFormat);
const subject = `${CONFIG.subjectPrefix} — ${today}`;
const sheetUrl = ss.getUrl();
MailApp.sendEmail({
to: CONFIG.recipients.join(','),
subject,
htmlBody: [
`<div style="font-family:Arial,sans-serif">`,
`<h1 style="font-size:16px;margin:0 0 12px">Отчет за ${today}</h1>`,
`<p style="margin:0 0 12px">Полная версия дашборда доступна по ссылке: <a href="${sheetUrl}" target="_blank" rel="noopener">открыть в Google Sheets</a>.</p>`,
htmlTable,
`</div>`
].join('')
});
} catch (err) {
console.error('Ошибка при отправке отчета:', err);
// Резервное уведомление о сбое (опционально)
// MailApp.sendEmail('admin@company.com', 'Сбой отправки еженедельного отчета', String(err));
throw err;
}
}