繁体   English   中英

有没有办法一次性取消链接 Google 幻灯片演示中的所有图表?

[英]Is there a way to unlink all the charts in a Google slide presentation in one go?

我正在尝试使用 AppScript 使用 Slides API 来完成此操作。 但是,我是一个 JS 菜鸟。 请帮忙。

function onOpen() {
    var ui = SlidesApp.getUi();
    ui.createMenu('Custom Menu')
        .addItem('Batch Update Charts', 'batchUpdate')
        .addToUi();
}

function batchUpdate(){
    var gotSlides = SlidesApp.getActivePresentation().getSlides();

    for (var i = 0; i < gotSlides.ID; i++) {
        var slide = gotSlides[i];
        var sheetsCharts = slide.getChartId();
        for (var k = 0; k < sheetsCharts.ID; k++) {
            var shChart = sheetsCharts[k];
            var requests = [{
                createSheetsChart: {
                    chartId: shChart,
                    linkingMode: 'NOT_LINKED_IMAGE',
                }
            }];
            shChart.refresh()
            requests: requests       
        }
    }
}

这个代码是完全不准确的。 我希望这会给你一些关于我正在努力实现的目标的指示。

如果您指的是工作表图表中的 URL/索引链接,而不是其中的链接图表属性:

您可以对每张幻灯片中的每个SheetsChart使用removeLink() 请参阅https://developers.google.com/apps-script/reference/slides/sheets-chart#removeLink()

function removeAllSheetsChartLinks() {
  SlidesApp.openById(SLIDE_ID).getSlides()
  .forEach(function(s) {
    s.getSheetsCharts().forEach(function(c) {
      if (c.getLink() != null) c.removeLink();
    });
  });
}

但是,如果您要删除链接图表属性,则必须删除要从中删除链接图表属性的当前图表,并创建一个与原始图表具有相同属性但具有linkingMode: 'NOT_LINKED_IMAGE'属性。 这是因为没有针对此类功能的直接 Slides API 请求。 https://developers.google.com/slides/reference/rest/v1/presentations/request#LinkingMode

function removeLinkChartExample() {

  var presentation = SlidesApp.openById(SLIDE_ID);
  //if empty
  if (presentation == null) throw new Error('Presentation was not found');
  Logger.log("%s id = %s", presentation.getName(), presentation.getId());
  
  var slides = presentation.getSlides();
  if (slides == null) throw new Error('Slides were not found');
  Logger.log("Total of slides in %s: %d", presentation.getName(), slides.length);


  //refresh all linked sheet charts
  slides.forEach(function(s) {
    s.getSheetsCharts().forEach(function(c) {
      //if (c.getLink() != null) 
      { Logger.log("LINKED CHART TITLE: %s, \"%s\"",c.getTitle(), c.getSpreadsheetId()); c.refresh(); } 
    });
  });
  
  var chartToRemoveLinkedChart = slides[0]; //sheet that you want to remove its linked chart property
  if (chartToRemoveLinkedChart == null) return;
  
  var presentationId = presentation.getId();
  
  var sheetObjectId = chartToRemoveLinkedChart.getObjectId();
  Logger.log("Sheet ObjectId of \"%s\": %s", chartToRemoveLinkedChart.getSheetsCharts()[0].getTitle(), sheetObjectId);
  var presentationStaffChartId = chartToRemoveLinkedChart.getSheetsCharts()[0].getObjectId();
  Logger.log("Linked Chart ObjectId of \"%s\": %s", chartToRemoveLinkedChart.getSheetsCharts()[0].getTitle(), presentationStaffChartId);
  var spreadsheetId = chartToRemoveLinkedChart.getSheetsCharts()[0].getSpreadsheetId();
  Logger.log("SS Id of \"%s\": %s", chartToRemoveLinkedChart.getSheetsCharts()[0].getTitle(), spreadsheetId);
  var chartId = chartToRemoveLinkedChart.getSheetsCharts()[0].getChartId();
  Logger.log("SS Chart Id of \"%s\": %s", chartToRemoveLinkedChart.getSheetsCharts()[0].getTitle(), chartId);
  var width = chartToRemoveLinkedChart.getSheetsCharts()[0].getWidth();
  Logger.log("Chart width of \"%s\": %s", chartToRemoveLinkedChart.getSheetsCharts()[0].getTitle(), width);
  var height = chartToRemoveLinkedChart.getSheetsCharts()[0].getHeight();
  Logger.log("Chart height of \"%s\": %s", chartToRemoveLinkedChart.getSheetsCharts()[0].getTitle(), height);
  var top = chartToRemoveLinkedChart.getSheetsCharts()[0].getTop();
  Logger.log("Chart top of \"%s\": %s", chartToRemoveLinkedChart.getSheetsCharts()[0].getTitle(), top);
  var left = chartToRemoveLinkedChart.getSheetsCharts()[0].getLeft();
  Logger.log("Chart left of \"%s\": %s", chartToRemoveLinkedChart.getSheetsCharts()[0].getTitle(), left);

  //remove the linked chart from this sheet before creating a new one
  chartToRemoveLinkedChart.getSheetsCharts()[0].remove();

  presentationStaffChartId = "ga66641c4d9_0_11"; //you need to give your own unique id
  
  var requests = [{
    "createSheetsChart": {
      "objectId": presentationStaffChartId,
      "spreadsheetId": spreadsheetId,
      "chartId": chartId,
      "linkingMode": "NOT_LINKED_IMAGE",
      "elementProperties": {
        "pageObjectId": sheetObjectId,
        "size": {
          "width": {
            "magnitude": width,
            "unit": "PT"
          },
          "height": {
            "magnitude": height,
            "unit": "PT"
          }
        },
        "transform": {
          "scaleX": 1,
          "scaleY": 1,
          "translateX": left,
          "translateY": top,
          "unit": "PT"
        }
      }
    }
  }];
  
  // Execute the request.
  var batchUpdateResponse = Slides.Presentations.batchUpdate({
    requests: requests
  }, presentationId);
  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM