Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用谷歌应用程序脚本在谷歌工作表中复制图表_Google Apps Script_Google Sheets_Charts - Fatal编程技术网

Google apps script 使用谷歌应用程序脚本在谷歌工作表中复制图表

Google apps script 使用谷歌应用程序脚本在谷歌工作表中复制图表,google-apps-script,google-sheets,charts,Google Apps Script,Google Sheets,Charts,我在谷歌地图上建立了一个图表。现在我需要复制图表 有图表的UI复制界面。我尝试在Google Apps脚本中复制它,但没有成功: function copyChart() { var sheet = SpreadsheetApp.getActiveSheet(); var chart = sheet.getCharts()[0]; var chartCopy = sheet.newChart(); chartCopy = chart; sheet.insertChart(ch

我在谷歌地图上建立了一个图表。现在我需要复制图表

有图表的UI复制界面。我尝试在Google Apps脚本中复制它,但没有成功:

function copyChart() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var chart = sheet.getCharts()[0];
  var chartCopy = sheet.newChart();
  chartCopy = chart;
  sheet.insertChart(chartCopy);
}

如何制作工作脚本来复制当前电子表格中的第一个图表?

根据电子表格服务的当前状态,无法完全复制现有的嵌入式图表。不过,可以复制图表的一部分,然后设置其余选项

如果API变得更加完整,则可以扩展此实用程序功能。(或者,如果谷歌完善克隆技术,它可能会被淘汰!)

这还不完整,但这只是一个开始。API的这一部分太不充分了,真是太遗憾了


我知道这是一个非常古老的线程,但我最近自己也遇到了这个问题,并将宏录制作为解决方法

只需记录,然后复制(或移动)一个图表,您就可以在编辑宏时访问它的所有详细信息


通过复制这部分代码,您可以相对轻松地重新定位或复制图表,这在构建主控表和复制主控表时非常有用。

正如您所说,问题在于当前的
EmbeddedChart API
非常有限,因此只能复制基本图表。我已经手动创建了图表并启用了设置,如
切换行/列
,以适应水平数据范围,但无法通过
API
复制这些设置。我尝试使用
getOptions()
setOptions()
复制所有设置,但是
getOptions()
仅返回程序设置的内容,因此在我手动创建的图表模板的情况下。。。。没什么:(
/**
 * Returns a new EmbeddedChart instance with some properties 
 * replicated from the original.
 *
 * @param   {EmbeddedChart} original    source chart to be cloned
 * @returns {EmbeddedChart}             new, cloned chart
 */ 
function cloneChart( original ) {
  original = original.modify();  // Necessary for read-access to some properties(!)
  var clone = SpreadsheetApp.getActiveSheet().newChart();

  // Set chart type
  clone.setChartType(original.getChartType());

  // Set position - caller should provide unique position
  var originalContainer = original.getContainer();
  var originalPostion = { anchorRowPos: originalContainer.getAnchorRow(),
                          anchorColPos: originalContainer.getAnchorColumn(), 
                          offsetX: originalContainer.getOffsetX(), 
                          offsetY: originalContainer.getOffsetY()
                     };

  clone.setPosition(originalPostion.anchorRowPos,
                    originalPostion.anchorColPos, 
                    originalPostion.offsetX, 
                    originalPostion.offsetY);

  // Copy ranges
  var ranges = original.getRanges();
  for (r=0; r<ranges.length; r++) {
    clone.addRange(ranges[r]);
  }

  return clone.build();
}
function copyChart() {
  var ss = SpreadsheetApp.getActive();
  var sheet = SpreadsheetApp.getActiveSheet();
  var chart = sheet.getCharts()[0];
  var newChart = cloneChart(chart,customLineChart);
  sheet.insertChart(newChart);

  var numcharts = sheet.getCharts().length;
  debugger;
  return;
  var chartBlob = chart.getBlob();
  var builder = sheet.newChart();
  chartCopy = chart;
  sheet.insertChart(chartCopy);
}

/*
 * Customize settings for line charts
 */
function customLineChart( chartBuilder ) {
  chartBuilder.asLineChart()
              .setTitle('Chart Title (Copy)')
              .setOption('legend', {position: 'right', textStyle: {fontSize: 16}})
              .setOption('height', 350)
              .setOption('width', 450);
  // ....  
}