Как насчет этого обходного пути? Я думаю, что есть несколько обходных путей в вашей ситуации. Поэтому, пожалуйста, подумайте об этом как об одном из них.
К сожалению, диаграмма, созданная SPARKLINE()
, не может быть напрямую импортирована в электронное письмо. В качестве обходного пути я использовал следующий поток.
- Преобразование из диаграммы, созданной
SPARKLINE()
, в изображения с использованием EmbeddedChart.
- Отправить письмо с изображениями в виде встроенных изображений.
Модифицированный скрипт:
drawTable();
function drawTable() {
var ss_data = getData();
var data = ss_data[0];
var background = ss_data[1];
var fontColor = ss_data[2];
var fontStyles = ss_data[3];
var fontWeight = ss_data[4];
var fontSize = ss_data[5];
var html = "<table border='1'>";
var images = {}; // Added
for (var i = 0; i < data.length; i++) {
html += "<tr>"
for (var j = 0; j < data[i].length; j++) {
if (typeof data[i][j] == "object") { // Added
html += "<td style='height:20px;background:" + background[i][j] + ";color:" + fontColor[i][j] + ";font-style:" + fontStyles[i][j] + ";font-weight:" + fontWeight[i][j] + ";font-size:" + (fontSize[i][j] + 6) + "px;'><img src='cid:img" + i + "'></td>"; // Added
images["img" + i] = data[i][j]; // Added
} else {
html += "<td style='height:20px;background:" + background[i][j] + ";color:" + fontColor[i][j] + ";font-style:" + fontStyles[i][j] + ";font-weight:" + fontWeight[i][j] + ";font-size:" + (fontSize[i][j] + 6) + "px;'>" + data[i][j] + "</td>";
}
}
html += "</tr>";
}
html + "</table>"
MailApp.sendEmail({
to: Session.getUser().getEmail(),
subject: "Spreadsheet Data",
htmlBody: html,
inlineImages: images // Added
})
}
function getData(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var ss = sheet.getDataRange();
var val = ss.getDisplayValues();
var background = ss.getBackgrounds();
var fontColor = ss.getFontColors();
var fontStyles = ss.getFontStyles();
var fontWeight = ss.getFontWeights();
var fontSize = ss.getFontSizes();
var formulas = ss.getFormulas(); // Added
val = val.map(function(e, i){return e.map(function(f, j){return f ? f : getSPARKLINE(sheet, formulas[i][j])})}); // Added
return [val,background,fontColor,fontStyles,fontWeight,fontSize];
}
// Added
function getSPARKLINE(sheet, formula) {
formula = formula.toUpperCase();
if (~formula.indexOf("SPARKLINE")) {
var chart = sheet.newChart()
.setChartType(Charts.ChartType.SPARKLINE)
.addRange(sheet.getRange(formula.match(/\w+:\w+/)[0]))
.setTransposeRowsAndColumns(true)
.setOption("showAxisLines", false)
.setOption("showValueLabels", false)
.setOption("width", 200)
.setOption("height", 100)
.setPosition(1, 1, 0, 0)
.build();
sheet.insertChart(chart);
var createdChart = sheet.getCharts()[0];
var blob = createdChart.getAs('image/png');
sheet.removeChart(createdChart);
return blob;
}
}
Результат:
![enter image description here](https://i.stack.imgur.com/NV6yP.png)
Примечание:
- В этом измененном сценарии предполагается, что вы используете диаграмму как
SPARKLINE
.
- Я создал диаграмму на листе, используя
insertChart()
, потому что капля, непосредственно полученная из newChart()
, не может использоваться в качестве изображения. Когда диаграмма создается на листе, блоб, извлеченный из созданной диаграммы, можно использовать как изображение.
- Если вы хотите изменить размер изображений, пожалуйста, измените
setOption("width", 200)
и setOption("height", 100)
.
Рекомендации:
Если я неправильно понял ваш вопрос, извините.