首页 > 解决方案 > 根据电子表格数据将图表添加到 Doc

问题描述

我正在尝试从工作表中获取数据,创建图表,复制模板文档并将图表插入副本。我的两个主要问题是每次创建两个新文档,另一个是我得到文本“InlineImage”而不是图表。谁能给我提示在哪里查找错误?先感谢您。

function openDialog() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var docTemplate = DriveApp.getFileById('1VhkAcoPhimYpYYwf_B-VqRXXUeOhp7Wkr0zLfT17GyA');
var destinationFolder = DriveApp.getFolderById('1htUiQeikzp-wuDgq0ybNyVhceVhf_cdT');

var range = sheet.getRange("B2:K15");
var chart = sheet.newChart()
    .setChartType(Charts.ChartType.ORG)
    .addRange(range)
    .setPosition(5, 5, 0, 0)
    .build();
var row = sheet.getSheetValues(2,1,1,1);
var copy = docTemplate.makeCopy(`${row} Family Tree`, destinationFolder);
var doc = DocumentApp.openById(copy.getId());
var body = doc.getBody();
var file = body.appendImage(chart);
body.replaceText('{{NewFamilyTreeChart}}', file);

标签: google-apps-script

解决方案


我试图复制您的代码并且脚本不会产生重复的文档。此外,您不能使用 replaceText 将字符串替换为图像。结果是“InlineImage”。您应该删除文本并使用 insertInlineImage()。

尝试这个:

function createChart(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var docTemplate = DriveApp.getFileById('xxidxx');
  var destinationFolder = DriveApp.getFolderById('xxidxx');
  var range = sheet.getRange("A1:B10");
  var chart = sheet.newChart()
    .setChartType(Charts.ChartType.ORG)
    .addRange(range)
    .setPosition(5, 5, 0, 0)
    .build();
  var row = "Test";
  var copy = docTemplate.makeCopy(`${row}  Data`, destinationFolder);
  var doc = DocumentApp.openById(copy.getId());
  var body = doc.getBody();
  var text = body.findText("{{TestData}}");
  if(text){
    var r = text.getElement();
    r.asText().setText("");
    r.getParent().asParagraph().insertInlineImage(0, chart);  
  }
}

例子:

床单:

在此处输入图像描述

模板文件:

在此处输入图像描述

输出:

在此处输入图像描述

参考:


推荐阅读